當我嘗試在傳出期間將org.w3c.dom.Element附加到javax.xml.ws.handler.soap.SOAPHandler中的現有SOAPHeader時,目前出現以下錯誤客戶端消息:將元素附加到SOAP標題時的WRONG_DOCUMENT_ERR
org.w3c.dom.DOMException中:WRONG_DOCUMENT_ERR:一個節點在不同的文檔而不是創建它
所述一個用於只有當我使一個單獨的JAX-WS客戶呼叫時發生此問題到handleMessage()函數內的另一個web服務。爲了回答一些問題,我正在導入並克隆Element對象,試圖附加它,並且可以成功地做到這一點,只要我不進行後續的web服務調用,如上所述。我的客戶端調用和webservice都在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服務調用應的SOAPHeader,但同樣對始發的WebServices 0的效果,如果我刪除了Web服務調用問題消失。
請顯示您正在使用的代碼。你*說*你正在正確導入元素 - 但是沒有看到代碼,我們無法判斷這是否是真實的,這是顯而易見的事情,可能會出錯。 –
我可以做到這一點,但如果我沒有正確導入它如何刪除額外的web服務調用允許導入工作? – dsutherland
@JonSkeet - 我添加了一些代碼來顯示導入發生。不過,我不知道這樣做會如何消除因爲刪除web服務調用允許導入發生沒有問題。這很奇怪。 – dsutherland