2015-06-09 36 views
3

我有一个SOAPHandler SOAP响应的请求。我需要捕获响应的请求获取使用SOAPHandler

public class SOAPLoggingHandler implements SOAPHandler<SOAPMessageContext> { 

    @Override 
    public boolean handleFault(SOAPMessageContext context) { 
     writeMessageLogging(context); 
     return true; 
    } 
    public boolean handleMessage(SOAPMessageContext context) { 
     writeMessageLogging(context); 
     return true; 
    } 

    private void writeMessageLogging(SOAPMessageContext smc) { 
     Boolean outboundProperty = (Boolean) smc 
       .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

     if (logger.isDebugEnabled()) { 
      if (outboundProperty.booleanValue()) { 
       logger.debug("Request message"); 
      } else { 
       logger.debug("Response message:"); 
      } 
     } 
     SOAPMessage message = smc.getMessage(); 
     ByteArrayOutputStream out=null; 
     try { 
      if (!outboundProperty.booleanValue()) { 
       String requestXML="Request of the Response, is possible?"; 
      } 
       out = new ByteArrayOutputStream(); 
      message.writeTo(out); 
      String strMsg = new String(out.toByteArray()); 
      logger.debug("strMsg:" + strMsg); 
      out.close(); 
     } catch (Exception e) { 
      logger.error("Exception in handler:", e); 
     }finally{ 
      IOUtils.closeQuietly(out); 
     } 

    } 
} 

参见:

字符串requestXML = “?响应的要求,有可能”;

可以捕捉一个响应的请求处理?

+0

删除多余的句子。修正了标点符号。 – Dijkgraaf

回答

1

我终于解决了我的问题:

 


    public class SOAPLoggingHandler implements SOAPHandler { 

     private static Logger logger = Logger.getLogger(SOAPLoggingHandler.class 
       .getCanonicalName()); 

     public static final String REQUEST_XML="REQUEST_XML"; 


     @Override 
     public boolean handleFault(SOAPMessageContext context) { 

      writeMessageLogging(context); 
      return true; 
     } 

     @Override 
     public boolean handleMessage(SOAPMessageContext context) { 
      writeMessageLogging(context); 
      return true; 

     } 

     private void writeMessageLogging(SOAPMessageContext smc) { 
      Boolean outboundProperty = (Boolean) smc 
        .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

      SOAPMessage message = smc.getMessage(); 
      ByteArrayOutputStream out=null; 
      try { 
       out = new ByteArrayOutputStream(); 
       message.writeTo(out); 
       String strMsg = new String(out.toByteArray()); 

       if (!outboundProperty.booleanValue()) { 
        String requestXML=(String)smc.get(REQUEST_XML); 
        logger.debug("Request of Response:"+requestXML); 
       }else{ 
        smc.put(REQUEST_XML,strMsg); 
       } 
       logger.debug("strMsg:" + strMsg); 
       out.close(); 
      } catch (Exception e) { 
       logger.error("Exception in handler:", e); 
      }finally{ 
       IOUtils.closeQuietly(out); 
      } 

     } 
    } 

 

我用这个SOAPMessageContext了点。