次のような要素を生成しようとするとエラーが発生します
<hold/>
Java Axis2によって生成されたクライアントコードの使用Javaスニペット
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
この実装を使用して、あるXMLドキュメントから別のXMLドキュメントにNodeを追加します。
Node firstDocImportedNode = firstDoc.importNode(secondDocsNode, true);
firstDocNode.appendChild(firstDocImportedNode );
これが役立つかどうかを確認してください。 Trickは、直接追加するのではなく、Nodeを他のドキュメントにインポートするだけです。
このエラーは、CXFでメッセージSOAP=を送信したときに見られました。
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]
SoapOutInterceptorの前に処理されたSAAJOutInterceptorにエラーがありました。 Saaj実装はJBossからでした。そして、別のクラスローダーでドキュメントを作成します。 Saajからのこの文書はSoapOutInterceptorを破壊します。
この問題を解決して、モジュールに依存関係を追加しました。
<dependency>
<groupId>com.Sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.3</version>
</dependency>
あるドキュメントからノードをコピーして、別のドキュメントに貼り付けることはできません。そうしようとすると、このタイプのエラーが発生します。
ノードを適切にインポートする必要があります。よく覚えていれば、Documentクラスはこの一般的なタスクに適したメソッドを提供します。
[〜#〜] edit [〜#〜]
問題は、setHoldメソッドの背後にあるコードにある可能性があります。要素はimportedでなければなりません。これがすべて自動生成されたコードである場合、新しいバージョンの軸を探すことで問題を解決できます。軸1.3/1.4の問題について言及した私のコメントを参照してください。