2010-07-06 14 views
26

बनाया जब मैं एक तत्व है किorg.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: एक नोड एक है कि यह

<hold/> 
की तरह दिखना चाहिए जनरेट करने का प्रयास करने पर मुझे त्रुटि हो रही है के अलावा किसी अन्य दस्तावेज़ में प्रयोग किया जाता है

एक्सिस 2 द्वारा उत्पन्न जावा क्लाइंट कोड का उपयोग करना। जावा

HoldPayment hold = new HoldPayment() 
cr.setHold(hold); 

झलकी लेकिन जब मैं इसे बंद कर आग मैं WRONG_DOCUMENT_ERR की कोई त्रुटि मिलती है। अगर मैं इस तत्व को निकालकर संदेश में शामिल नहीं करता हूं तो यह ठीक काम करता है। किसी को भी यह पता चल गया कि इसे कैसे ठीक किया जाए?

AxisFault 
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException 
faultSubcode: 
faultString: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. 
faultActor: 
faultNode: 
faultDetail: 
     {http://xml.apache.org/axis/}stackTrace:org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. 
     at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:352) 
     at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284) 
     at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235) 
     at org.apache.axis.message.SOAPFaultBuilder.onEndChild(SOAPFaultBuilder.java:305) 
     at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1090) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 
     at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) 
     at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) 
     at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) 
     at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) 
     at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796) 
     at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144) 
     at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) 
     at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) 
     at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) 
     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165) 
     at org.apache.axis.client.Call.invokeEngine(Call.java:2784) 
     at org.apache.axis.client.Call.invoke(Call.java:2767) 
     at org.apache.axis.client.Call.invoke(Call.java:2443) 
     at org.apache.axis.client.Call.invoke(Call.java:2366) 
     at org.apache.axis.client.Call.invoke(Call.java:1812) 
     at au.com.virginblue.www.schema._2005._02.booking_wsdl.BookingBindingStub.createReservation(BookingBindingStub.java:1803) 
     at com.test.GetDJBooking.main(GetDJBooking.java:215) 

     {http://xml.apache.org/axis/}hostname:test.com.au 

org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. 
     at org.apache.axis.AxisFault.makeFault(AxisFault.java:101) 
     at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701) 
     at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) 
     at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796) 
     at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144) 
     at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) 
     at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) 
     at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) 
     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165) 
     at org.apache.axis.client.Call.invokeEngine(Call.java:2784) 
     at org.apache.axis.client.Call.invoke(Call.java:2767) 
     at org.apache.axis.client.Call.invoke(Call.java:2443) 
     at org.apache.axis.client.Call.invoke(Call.java:2366) 
     at org.apache.axis.client.Call.invoke(Call.java:1812) 
     at au.com.virginblue.www.schema._2005._02.booking_wsdl.BookingBindingStub.createReservation(BookingBindingStub.java:1803) 
     at com.nhh.dj.GetDJBooking.main(GetDJBooking.java:215) 
Caused by: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. 
     at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:352) 
     at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284) 
     at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235) 
     at org.apache.axis.message.SOAPFaultBuilder.onEndChild(SOAPFaultBuilder.java:305) 
     at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1090) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 
     at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) 
     at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) 
     at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) 
     ... 14 more 

उत्तर

2

आप एक दस्तावेज़ से नोड की प्रतिलिपि नहीं बना सकते हैं और इसे दूसरे पर चिपका सकते हैं। ऐसा करने का प्रयास इस प्रकार की त्रुटि में परिणाम देता है।

नोड को ठीक से आयात किया जाना है। अगर मुझे अच्छी तरह से याद है, तो दस्तावेज़ वर्ग इस सामान्य कार्य के लिए सही तरीके प्रदान करता है।

संपादित

समस्या setHold विधि के पीछे कोड में हो सकता है। तत्व आयात किया जाना चाहिए। यदि यह सभी स्वत: जेनरेटेड कोड है, तो अक्ष का एक नया संस्करण ढूंढने से समस्या हल हो सकती है। मेरी टिप्पणी देखें, जहां मैंने एक अक्ष 1.3/1.4 अंक का उल्लेख किया था।

+0

क्षमा करें मुझे यकीन नहीं है कि आपका क्या मतलब है, मैं नहीं देख सकता कि मैंने एक दस्तावेज़ से दूसरे दस्तावेज़ में कॉपी और पेस्ट किया था। मैं एक्सिस 2 wsdl2java से उत्पन्न क्लाइंट कोड का उपयोग कर रहा हूं। इसने तत्व को जोड़ने के लिए एक विधि उत्पन्न की है, फिर भी जब मैं इसे जोड़ता हूं तो यह त्रुटि उत्पन्न करता है? – yurl

+0

आपका अक्ष संस्करण क्या है? यहां कम से कम रिपोर्ट की गई समस्या है: https://issues.apache.org/jira/browse/AXIS-2705 –

+0

मैं 1.4 का उपयोग कर रहा हूं। मैं देखूंगा कि 1.5 का उपयोग करने से यह ठीक हो जाएगा। – yurl

67

मैं इस कार्यान्वयन का उपयोग एक एक्सएमएल दस्तावेज़ से दूसरे में नोड जोड़ने के लिए करता हूं।

Node firstDocImportedNode = firstDoc.importNode(secondDocsNode, true); 
firstDocNode.appendChild(firstDocImportedNode); 

देखें कि इससे मदद मिलती है या नहीं। ट्रिक सिर्फ सीधे जोड़ने के बजाय, अन्य दस्तावेज़ में नोड आयात कर रहा है।

+0

यदि फर्स्ट डॉक वह दस्तावेज़ है जहां आप नोड ले रहे हैं और दूसरा डॉक है जहां आप इसका उपयोग करने जा रहे हैं, तो आपको इसका उपयोग करना चाहिए: secondDoc.importNode (firstDocsNode, true) हालांकि 'आयात' शब्द का तात्पर्य है। –

+0

एक आकर्षण की तरह काम करता है –

+0

कोई विचार क्या बुलियन (इस मामले में 'सत्य') का मतलब है? – dokaspar

0

हमने सीएक्सएफ के साथ एसओएपी संदेश भेजते समय यह त्रुटि देखी।

org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. 
at org.apache.xerces.dom.ParentNode.internalInsertBefore(ParentNode.java:351) 
at org.apache.xerces.dom.ParentNode.insertBefore(ParentNode.java:283) 
at org.apache.xerces.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:393) 
at org.apache.xerces.dom.NodeImpl.appendChild(NodeImpl.java:236) 
at org.jboss.ws.core.soap.SOAPDocument.appendChild(SOAPDocument.java:226) 
at org.jboss.ws.core.soap.SOAPPartImpl.appendChild(SOAPPartImpl.java:300) 
at org.apache.cxf.staxutils.W3CDOMStreamWriter.setChild(W3CDOMStreamWriter.java:119) [cxf-common-utilities-2.5.4.jar:2.5.4] 
at org.apache.cxf.staxutils.W3CDOMStreamWriter.newChild(W3CDOMStreamWriter.java:109) [cxf-common-utilities-2.5.4.jar:2.5.4] 
at org.apache.cxf.staxutils.W3CDOMStreamWriter.writeStartElement(W3CDOMStreamWriter.java:137) [cxf-common-utilities-2.5.4.jar:2.5.4] 
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:122) [cxf-rt-bindings-soap-2.4.6.jar:2.4.6] 

त्रुटि SAAJOutInterceptor कि SoapOutInterceptor पहले संसाधित किया गया है में था। साज कार्यान्वयन जेबॉस से था। और यह एक और क्लासलोडर के साथ दस्तावेज़ बनाते हैं। साज ब्रेक सोपऑट इंटरसेप्टर से यह दस्तावेज।

हमने इस समस्या को हल किया है जो हमारे मॉड्यूल पर निर्भरता जोड़ रहा है।

<dependency> 
    <groupId>com.sun.xml.messaging.saaj</groupId> 
    <artifactId>saaj-impl</artifactId> 
    <version>1.3</version> 
</dependency> 
संबंधित मुद्दे