我有一个带有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消息。
任何人都有一些想法吗?
答案 0 :(得分:1)
您正在检索错误/不必要的消息上下文。您应该拥有的是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
答案 1 :(得分:0)
不幸的是,注入WebServiceContext并尝试获取SoapMessage不起作用,所以我采用了SOAPHandler方式。
为我的网络服务添加了处理程序链:
@HandlerChain(file = "my-handler.xml", name = "MyWebServiceHandler")
创建了我自己的处理程序类并实现了javax.xml.ws.handler.soap.SOAPHandler。
从我的SOAPHandler实现的方法“handleMessage(SOAPMessageContext context)”我可以得到这样的SOAP消息:
SOAPMessage soapMessage = context.getMessage();
soapMessage.writeTo(outputStream);