Java 如何使用Axis2获取请求和响应?
我有一个用Axis2生成的SOAP客户机。它使用JAXB-RI,尽管这可能并不重要 我没有任何XML配置。只需获取使用Java 如何使用Axis2获取请求和响应?,java,soap,axis2,Java,Soap,Axis2,我有一个用Axis2生成的SOAP客户机。它使用JAXB-RI,尽管这可能并不重要 我没有任何XML配置。只需获取使用wsdl2java生成的Stub,准备响应(作为POJO)并在Stub上执行方法 如何获取此呼叫中交换的请求和响应的原始XML(作为字符串)? 我计算出了服务。_getServiceClient().getLastOperationContext().getMessageContext(“out”).getEnvelope()(与“”中的”类似),但其中一个会引发异常,因为流已被
wsdl2java
生成的Stub
,准备响应(作为POJO)并在Stub
上执行方法
如何获取此呼叫中交换的请求和响应的原始XML(作为字符串)?
我计算出了服务。_getServiceClient().getLastOperationContext().getMessageContext(“out”).getEnvelope()
(与“”中的”类似),但其中一个会引发异常,因为流已被处理
这听起来很明显,但不知怎的,我不知道怎么做,而且官方文档非常稀少。不确定“In”消息标签有什么问题
但在搜索过程中,发现了以下JIRA罚单
哪个指向
并在讨论中找到了一个WA来解决这个问题
使用以下代码,我能够监听soap请求的响应消息
stub._getServiceClient().getAxisService().addMessageContextListener(
new MessageContextListener() {
public void attachServiceContextEvent(ServiceContext sc,
MessageContext mc) {}
public void attachEnvelopeEvent(MessageContext mc) {
try
{ mc.getEnvelope().cloneOMElement().serialize(System.out); }
catch (XMLStreamException e) {}
}
});
我曾经遇到过类似的问题,你们可以参考下面的代码
private void ResponseSOAPMessage(OperationContext opCtx, OMElement responseOM)
throws AxisFault
{
MessageContext msgCtxIn = opCtx.getMessageContext("In");
if (!msgCtxIn.getEnvelope().isComplete())
{
msgCtxIn.getEnvelope().getBody().getFirstOMChild().close(false);
msgCtxIn.getEnvelope().getBody().addChild(responseOM);
msgCtxIn.getEnvelope().getBody().getFirstOMChild().detach();
}
CommonsTransportHeaders inHeaders = (CommonsTransportHeaders)msgCtxIn.getProperty("TRANSPORT_HEADERS");
if (msgCtxIn.getEnvelope().isComplete())
{
System.out.println("SOAP Response:");
System.out.println(msgCtxIn.getEnvelope().toString());
}
else
{
System.out.println("SOAP Response Message Body:");
System.out.println(responseOM.toString());
}
}