Java 如何使用Axis2获取请求和响应?

Java 如何使用Axis2获取请求和响应?,java,soap,axis2,Java,Soap,Axis2,我有一个用Axis2生成的SOAP客户机。它使用JAXB-RI,尽管这可能并不重要 我没有任何XML配置。只需获取使用wsdl2java生成的Stub,准备响应(作为POJO)并在Stub上执行方法 如何获取此呼叫中交换的请求和响应的原始XML(作为字符串)? 我计算出了服务。_getServiceClient().getLastOperationContext().getMessageContext(“out”).getEnvelope()(与“”中的”类似),但其中一个会引发异常,因为流已被

我有一个用Axis2生成的SOAP客户机。它使用JAXB-RI,尽管这可能并不重要

我没有任何XML配置。只需获取使用
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());
        }
      }