我有一个带有4个WebMethods的Wildfly 8.1.0 WebService。

我需要记录SOAP消息(业务需求)

我注入了有效的WebServiceContext

@Resource
private WebServiceContext wsContext;


我可以得到org.apache.cxf.jaxws.context.WrappedMessageContext:

WrappedMessageContext wrappedMessageContext = (WrappedMessageContext) wsContext.getMessageContext();


以及org.apache.cxf.message.Message:

Message message = wrappedMessageContext.getWrappedMessage();


但不是SOAP消息。

有人有想法吗?

最佳答案

您正在检索错误/不必要的消息上下文。您应该拥有的是SOAPMessageContext,从中可以轻松获取SOAPMessage。您应该改为:

SOAPMessageContext msgCtxt = (SOAPMessageContext) wsContext.getMessageContext();
       SOAPMessage soapMsg = msgCtxt.getMessage(); //gotten your SOAP message
       //log your message


编辑:

根据您的评论,您似乎正在注入特定于CXF的MessageContext(出于明显的可移植性问题,可能不应该这样做)。

org.apache.cxf.binding.soap.SoapMessage soapMessage =  (org.apache.cxf.binding.soap.SoapMessage)wrappedMessage.getWrappedMessage();     //continuing from your current code

10-03 00:18