1

Java 4 で JAX-RPC SOAP メッセージ ハンドラーを作成する必要があり、メッセージにセキュリティ ヘッダーを追加する必要があります。

現在、メッセージを送信しようとするとjava.lang.AbstractMethodError: org.apache.axis.message.SOAPHeader.addHeaderElement(Ljavax/xml/namespace/QName;)Ljavax/xml/soap/SOAPHeaderElement;エラーが発生します。

このエラーについてオンラインで見つけることができないので、どんな助けでも大歓迎です!

私のコードは以下の通りです:

public final boolean handleRequest(MessageContext context) {
    SOAPMessageContext soapContext = (SOAPMessageContext) context;
    String authId = "test";
        try {
            SOAPMessage soapMsg = soapContext.getMessage();
            SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
            SOAPHeader soapHeader = soapEnv.getHeader();
            /* If no header, add one */
            if (soapHeader == null) {
                soapHeader = soapEnv.addHeader();
            }

            /* Add a soap header, name as AUTH_ID_KEY */
            QName qname = new QName(TARGET_NAMESPACE, AUTH_ID_KEY);
            SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(qname);
            soapHeaderElement.addTextNode(authId);
            soapMsg.saveChanges();
        } catch (SOAPException e) {
            throw new ProtocolException(e);
        }

    return true;
}

助けてくれてありがとう!

4

1 に答える 1

2

したがって、メソッドをorg.apache.axis.message.SOAPHeader実装しますjavax.xml.soap.SOAPHeaderが、addHeaderElement(QName)メソッドを抽象化します。

この実装を使用する場合、addHeaderElement(javax.xml.soap.Name)代わりにメソッドを使用する必要がありました。

最終的な作業コードは次のとおりです。

SOAPMessage soapMessage = soapContext.getMessage();
SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
SOAPHeader soapHeader = soapEnvelope.getHeader();
/* If no header, add one */
if (soapHeader == null) {
    soapHeader = soapEnvelope.addHeader();
}

/* Add a soap header, name as AUTH_ID_KEY */
Name name = soapEnvelope.createName(AUTH_ID_KEY);
SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(name);
soapHeaderElement.addTextNode(authId);
soapMessage.saveChanges();
于 2013-02-01T09:39:12.930 に答える