从Wildfly WebServiceContext获取SOAP消息

时间:2014-11-10 11:07:33

标签: java web-services soap wildfly

我有一个带有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消息。

任何人都有一些想法吗?

2 个答案:

答案 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);