Java 从Wildfly WebServiceContext获取SOAP消息
我有一个带有4种WebMethods的Wildfly 8.1.0 Web服务 我需要记录SOAP消息(业务需求) 我注入了有效的WebServiceContextJava 从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
@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);