Java 如何打印SOAPMessage

Java 如何打印SOAPMessage,java,jakarta-ee,soap,Java,Jakarta Ee,Soap,SOAPMessage具有writeTo()方法,用于将其内容打印到流中。 但是如何将SOAPMessage内容写入StringBuffer呢 必须修改代码行“message.writeTo(System.out);” public boolean handleMessage(SOAPMessageContext smc) { StringBuffer sbuf = new StringBuffer(); sbuf.append("\n--------------------

SOAPMessage具有writeTo()方法,用于将其内容打印到流中。 但是如何将SOAPMessage内容写入StringBuffer呢

必须修改代码行“message.writeTo(System.out);”

public boolean handleMessage(SOAPMessageContext smc) {
     StringBuffer sbuf = new StringBuffer();
     sbuf.append("\n------------------------------------\n");
     sbuf.append("In SOAPHandler " + HandlerName + ":handleMessage()\n");

     Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

     if (outboundProperty.booleanValue()) {
        sbuf.append("\ndirection = outbound ");
     }
     else {
        sbuf.append("\ndirection = inbound ");
     }

     SOAPMessage message = smc.getMessage();      
     try {
        sbuf.append("\n");
        sbuf.append(message.toString());         
        //message.writeTo(System.out);         
        sbuf.append("\nMessage Desc:");         
        sbuf.append("\n");
     }
     catch (Exception e) {
        sbuf.append("Exception in SOAP Handler: " + e);
     }

     sbuf.append("Exiting SOAPHandler " + HandlerName + ":handleMessage()\n");
     sbuf.append("------------------------------------\n");
     logger.debug(sbuf.toString());
     return true;
  }

好的,我已经解决了这个问题。修改后的代码块如下所示

  public boolean handleMessage(SOAPMessageContext smc) {
     StringBuffer sbuf = new StringBuffer();
     sbuf.append("\n------------------------------------\n");
     sbuf.append("In SOAPHandler " + HandlerName + ":handleMessage()\n");

     Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

     if (outboundProperty.booleanValue()) {
        sbuf.append("\ndirection = outbound ");
     }
     else {
        sbuf.append("\ndirection = inbound ");
     }

     SOAPMessage message = smc.getMessage();      
     try {
        sbuf.append("\n");
        sbuf.append(message.toString()); 
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        message.writeTo(baos);                     
        sbuf.append("\nMessage Desc:"+baos.toString());         
        sbuf.append("\n");
     }
     catch (Exception e) {
        sbuf.append("Exception in SOAP Handler: " + e);
     }

     sbuf.append("Exiting SOAPHandler " + HandlerName + ":handleMessage()\n");
     sbuf.append("------------------------------------\n");
     logger.debug(sbuf.toString());
     return true;
  }

如果您仅仅为了调试目的而需要记录SOAP消息,那么为JAX-WS实现打开SOAP消息日志记录会更容易。在这种情况下,您根本不需要编写任何代码。

您可以使用处理程序链,并使用多个处理程序来装饰输入/输出消息。打印中间内容有它的用途。