打印Axis2请求响应XML

时间:2014-11-27 12:13:42

标签: java axis2

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

wsdl2java创建了2个java文件,一个用于存根,一个用于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

3 个答案:

答案 0 :(得分:8)

我设法通过在存根(您调用以调用Web服务的那个)的方法中添加几行来实现。 我确定了这条线,即

_operationClient.execute(true);

有效地联系了Web服务并在其之后添加:

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

答案 1 :(得分:0)

不幸的是,除非您通过说tcp monitor拦截消息,否则您将很难获得原始消息。

答案 2 :(得分:0)

在上面的代码中:

  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 的部分。

至少在Out Message上为我工作。

for In我正在接受例外陈述"尝试读取封闭流"。