2015-06-09 35 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了點。