Java 从Wildfly WebServiceContext获取SOAP消息

Java 从Wildfly WebServiceContext获取SOAP消息,java,web-services,soap,wildfly,Java,Web Services,Soap,Wildfly,我有一个带有4种WebMethods的Wildfly 8.1.0 Web服务 我需要记录SOAP消息(业务需求) 我注入了有效的WebServiceContext @Resource private WebServiceContext wsContext; 我可以获取org.apache.cxf.jaxws.context.WrappedMessageContext: WrappedMessageContext wrappedMessageContext = (WrappedMessageCo

我有一个带有4种WebMethods的Wildfly 8.1.0 Web服务

我需要记录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消息


有人有什么想法吗?

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

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

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


不幸的是,注入WebServiceContext并尝试获取SoapMessage没有成功,所以我选择了SOAPHandler的方式

已将处理程序链添加到“我的web服务”:

@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);

java.lang.ClassCastException:org.apache.cxf.jaxws.context.WrappedMessageContext不能强制转换为javax.xml.ws.handler.soap.SOAPMessageContextSee my edit@javapenguin。我不建议您继续当前的路线,因为您的代码不可移植/不容易处理我不是注入CXF特定MessageContext的人。这就是wildfly在做的事。
SOAPMessage soapMessage = context.getMessage();
soapMessage.writeTo(outputStream);