Журнал SOAP-сообщений - PullRequest
7 голосов
/ 21 июня 2011

Я создал класс, который перехватывает цикл запроса-ответа при обмене сообщениями SOAP, и я хотел зарегистрировать обмен сообщениями. Каков наилучший способ, чтобы я мог записать сообщение SOAP в мой файл журнала?

Я не хочу, чтобы это было напечатано в моем лог-файле, но я просто хочу получить доступ и просмотрите конверт SOAP запроса и ответа.

Я пробовал с этим кодом:

public class LogHandler{    
    private static final Logger _LOG;
    @Override
    protected void handleResponse(SOAPMessage message)
        logSOAPMessage(message);
    }
    @Override
    protected void handleRequest(SOAPMessage message)
        logSOAPMessage(message);
    }    
    private void logSOAPMessage(SOAPMessage message){
      _LOG.info(":: Logging SOAP Message :: " + message.toString());
    }
}

Но не получает нужного сообщения.

:: Logging SOAP Message :: oracle.j2ee.ws.saaj.soap.soap11.Message11@715346

Есть намеки?

Ответы [ 3 ]

13 голосов
/ 21 июня 2011

Если message является SOAPMessage, выполните следующие действия:

ByteArrayOutputStream bout = new ByteArrayOutputStream();   
message.writeTo(bout);   
String msg = bout.toString("UTF-8");

Теперь в строке msg есть сообщение мыло, и вы можете войти в него.

В вашем примере:

private void logSOAPMessage(SOAPMessage message){
    ByteArrayOutputStream bout = new ByteArrayOutputStream();  
    message.writeTo(bout);  
    String msg = bout.toString("UTF-8");  
    _LOG.info(":: Logging SOAP Message :: " + msg);     
}
2 голосов
/ 25 февраля 2015

Cratylus 'ответ недостаточен, если вы не хотите регистрировать вложения SOAP.

Вот способ войти только в конверт:

// Get the Envelope Source 
Source src = message.getSOAPPart().getContent() ;

// Transform the Source into a StreamResult to get the XML
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "no");
StreamResult result = new StreamResult(new StringWriter());
transformer.transform(src, result);
String xmlString = result.getWriter().toString();
2 голосов
/ 21 июня 2011

То, что вы видите, является строкой SOAPMessage.Возможно, вам придется поискать javadocs, чтобы узнать, можете ли вы получить SOAPEnvelope из Oracle SOAPMessage, и оно должно содержать входящее / исходящее сообщение SOAP.

Редактировать: Пожалуйста, отметьте this для getSoapHeader () и getSoapBody () для деконструкции сообщения мыла.Возможно, вам придется выяснить то же самое для оболочки Oracle SOAPMessage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...