【问题标题】:java.lang.AbstractMethodError when adding Header to Java 4 JAX-RPC SOAP Handler将标头添加到 Java 4 JAX-RPC SOAP 处理程序时出现 java.lang.AbstractMethodError
【发布时间】:2013-01-30 17:21:32
【问题描述】:

我必须在 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;
}

感谢您的帮助!

【问题讨论】:

    标签: soap handlers jax-rpc java1.4


    【解决方案1】:

    所以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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-20
      • 2010-10-24
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多