【问题标题】:Print Axis2 Request Response XML打印 Axis2 请求响应 XML
【发布时间】:2015-01-26 01:03:58
【问题描述】:

我想将 RAW 请求响应 XML 打印到控制台。我已经使用 wsdl2java axis2 创建了存根。

wsdl2java 创建了 2 个 java 文件,一个用于 stub,一个用于 callbackhandler。

我正在尝试使用下面的方法,但为

获取空值
operationContext.getMessageContext("Out");
/
operationContext.getMessageContext("In");.

代码

public void SOAPLogHandler(Stub stub){  

ServiceContext serviceConxt = stub._getServiceClient().getServiceContext();

//**** Enable the Cache to hold the last operation
OperationContext OperationContext  = new OperationContext();
boolean cacheLastOperationContext = true;
OperationContext.setComplete(true); // Enable the Cache value
serviceConxt.setCachingOperationContext(cacheLastOperationContext);
serviceConxt.setLastOperationContext(OperationContext);

OperationContext operationContext = serviceConxt.getLastOperationContext();

if (operationContext != null) {
         MessageContext outMessageContext = operationContext.getMessageContext("Out");
             operationContext.getMessageContexts();
        if (outMessageContext != null) {
            System.out.println("OUT SOAP: "+outMessageContext.getEnvelope().toString());
             }
     MessageContext inMessageContext = operationContext.getMessageContext("In");
if (inMessageContext != null) {
    System.out.println("IN SOAP: "+ inMessageContext.getEnvelope().toString());
                  }
           }

请告诉我是否有其他方法可以获取原始 xml

【问题讨论】:

    标签: java axis2


    【解决方案1】:

    在上面的代码中:

      OperationContext OperationContext  = new OperationContext();
      boolean cacheLastOperationContext = true;
      OperationContext.setComplete(true); // Enable the Cache value
      serviceConxt.setCachingOperationContext(cacheLastOperationContext);
      serviceConxt.setLastOperationContext(OperationContext);
    

    您正在显式创建 new operationContext 并将其设置为 LastOperationContext。这就是你得到 null 的原因。

    我使用相同的代码,只是删除了 设置 setLastOperationContext 的部分。

    它至少对我有用。

    因为我收到异常声明“尝试在关闭的流上读取”。

    【讨论】:

      【解决方案2】:

      我设法通过在存根的方法(调用 Web 服务的方法)中添加几行来做到这一点。 我确定了这条线,即

      _operationClient.execute(true);
      

      有效地联系网络服务并在其后添加:

      _operationClient.getMessageContext("Out").getEnvelope().serialize(System.out);
      _operationClient.getMessageContext("In").getEnvelope().serialize(System.out);
      

      【讨论】:

      • 这应该是正确的答案。我能够打印来自检索 SOAP 信封的 WS 的每个响应。
      • 对我来说,除了壁垒添加的 WS-Security 标头之外,几乎打印出完整的传出消息。
      • 这对我也有用,但是每次我构建代码行时,我都会添加到存根中,这是一个生成的代码被删除。有什么想法可以在生成的代码之外实现吗?
      【解决方案3】:

      很遗憾,除非您通过 tcp 监视器拦截消息,否则您将很难获得原始消息。

      【讨论】:

      • 不是一个有用的评论。
      猜你喜欢
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2022-01-23
      • 2011-02-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多