1

JAX-RPC Java クライアント経由で XML 応答にアクセスしようとしています。

Axis のカスタム ハンドラーを調べていますが、サービス側でしか役に立たないようです。

4

1 に答える 1

1

XML 応答ペイロードを返すコードを次に示します。AXIS Stub クラスから直接取得するか、それを 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

ハンドラーが必要な場合は、お知らせください。

于 2013-05-15T18:20:45.553 に答える