1

現在、送信クライアント側メッセージ中に javax.xml.ws.handler.soap.SOAPHandler の既存の SOAPHeader に org.w3c.dom.Element をアタッチしようとすると、次のエラーが発生します。

org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: ノードを作成したドキュメントとは別のドキュメントでノードが使用されています

この問題は、handleMessage() 関数内から別の Web サービスに対して別の jax-ws クライアント呼び出しを行った場合にのみ発生します。いくつかの質問に答えるために、Element オブジェクトをアタッチしようとするときに、Element オブジェクトを適切にインポートして複製していますが、上で述べたように、その後の Web サービス呼び出しを行わない限り、正常に実行できます。クライアント側の呼び出しと Web サービスの両方が JBoss EAP 5.1 で実行されています。考え?提案?使用例を以下に示します。

public boolean handleMessage(SOAPMessageContext ctx) {
    Boolean outbound = (Boolean) msgContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if(!outbound)
    {
       SOAPPart document = ctx.getMessage().getSOAPPart();          
       SOAPHeaderElement wsse = getSecurityHeaderElement(document.getEnvelope());

       //Extra Webservice call
       Service service=Service.create(wsdlUrl,qname);
       WebserviceInterface ws=service.getPort(WebserviceInterface.class);
       ws.helloWorld();
       //End of other webservice call

       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder docBuilder= factory.newDocumentBuilder();
       Document doc=docBuilder.newDocument();
       //Insert appending nodes here
       Element xmlElement=doc.getDocumentElement();

       Node node = document.importNode(xmlElement.cloneNode(true),true);    
       wsse.appendChild(node);
    }
}   

私を最も困惑させているのは、この他のWebサービス呼び出しが元のWebサービスSOAPHeaderに影響を与えないはずですが、Webサービス呼び出しを削除すると問題が解決することです。

4

1 に答える 1