Можно ли получить доступ к необработанному сообщению SOA/XML в Java-клиенте JAX-RPC?
Я пытаюсь получить доступ к XML-ответу через Java-клиент JAX-RPC.
Я изучал пользовательские обработчики Axis, но похоже, что они полезны только в сфере обслуживания.
1 ответ
Вот некоторый код, который вернет вам полезную нагрузку XML-ответа. Вы можете получить его непосредственно из класса заглушки AXIS или из обработчика, который записал его в MessageContext. Вот тот, который читает это непосредственно:
private String getSOAPResponseXML(Object clientstub) {
String returnValue = null;
org.apache.axis.client.Stub stub = (org.apache.axis.client.Stub)clientstub;
Call call = stub._getCall();
if (call != null) {
MessageContext ctx = call.getMessageContext();
// If I registered a handler
// returnValue = (String) ctx.getProperty( ClientHandler.SOAP_RESPONSE );
// or use:
try {
Message msg = call.getResponseMessage();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// NOTE: If we never get a response (a request handler throws an uncaught error
// this can cause a java.lang.NullPointerException
msg.writeTo(baos);
returnValue = baos.toString();
} catch (java.io.IOException ex) {
log.debug("Error in getSOAPResponseXML", ex);
} catch (javax.xml.soap.SOAPException ex) {
log.debug("Error in getSOAPResponseXML", ex);
}
}
return returnValue;
} // getSOAPResponseXML
Если вам нужен обработчик, просто дайте мне знать.