Hi Jonathan,
First of all thank you for your reply!
I'll put my comments inline...
>...
> What is the revision number of the SaajMarshaler you are working with?
>...
The revision number of SaajMarshaller is same as yours - 367116.
...
>If you run ServiceMix with log4j set to DEBUG, can you tell if the output
>of
> SaajMarshaler.toNMS and SaajMarshaler.createSOAP are correct? Have you
> verified that the issue is not with the HttpSoapConnector?
...
Outputs from both, SaajMarshaller.createSOAP and toNMS are correct.
SaajBinding returns correct message. Things go wrong after the message is
returned to HttpSoapConnector. Text bellow is printed right before src is
returned in invokeInOut method in HttpSoapConnector
(...
Source src = exchange.getOutMessage().getContent();
exchange.setStatus(ExchangeStatus.DONE);
channel.send(exchange);
src = transformer.toDOMSource(src);
System.out.println("Body is: " + transformer.toString(src));
return src;
...
)
That's the output:
Body is: <?xml version="1.0" encoding="UTF-8"?><ns1:serviceMethodResponse
xmlns:ns1="http://example3.userguide.samples"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><serviceMethodReturn
xsi:type="xsd:string">test
me</serviceMethodReturn></ns1:serviceMethodResponse>
As you can see the namespace attribute is there. Following line in output is
this:
DEBUG - HandlerPipeline.invoke(95) | Invoking handler
org.codehaus.xfire.soap.handler.SoapSerializerHandler in phase post-invoke
I guess that's the spot where something goes wrong.
> ....". Does this namespace issue arise once you replace
> node.cloneNode(true) with document.importNode(node,true)? The change to
> cloneNode() was implemented precisely to avoid the namespace issue that
> you
> are describing.
Yes the issue arised after the change . Before the change the message
wasn't even sent from SaajBinding to WS. Now the things go wrong somewhere
on the "return path" of the message.
Looking at log we can say it's somewhere in HttpSoapConnector
(org.codehaus.xfire.soap.handler.SoapSerializerHandler more precisely)
p.s. : I've tested document.appendChild(node.cloneNode(true)); and in the
case that parent document of cloned node is not the same as the document we
were going to append it to, it allways throws Exception.
Cheers,
Simon
<[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Simon,
>
> What is the revision number of the SaajMarshaler you are working with? I
> am
> using the same xfire-all version, and revision 367116 with Systinet
> clients
> and services, and am not experiencing any of the problems that you seem to
> be encountering with Axis. In fact, the changes to the SaajMarshaler were
> put in place to fix the namespace problem that you are describing below.
> If
> you run ServiceMix with log4j set to DEBUG, can you tell if the output of
> SaajMarshaler.toNMS and SaajMarshaler.createSOAP are correct? Have you
> verified that the issue is not with the HttpSoapConnector? As an
> alternative, have you tried substituting your SOAP/XML data in to the
> SaajMarshalerTest?
>
> To clarify your situation a bit, in your note you say "Now there's another
> issue:...". Does this namespace issue arise once you replace
> node.cloneNode(true) with document.importNode(node,true)? The change to
> cloneNode() was implemented precisely to avoid the namespace issue that
> you
> are describing.
>
> regards,
> /jonathan
>
>> -----Original Message-----
>> From: news [mailto:[EMAIL PROTECTED] Behalf
>> Of Simon Carni
>> Sent: Thursday, January 12, 2006 10:39 PM
>> To: [email protected]
>> Subject: [servicemix-user] Re: Re: Exception in SaajMarshaler...
>>
>>
>> Hi Jonathan,
>>
>> The build is 3.0-SNAPSHOT and the xfire-all-1.0-20060106.jar.
>> I'm running it
>> on java 1.5.0-b64.
>> Thanx,
>> Simon
>>
>> <[EMAIL PROTECTED]> wrote in message
>> news:[EMAIL PROTECTED]
>> northamerica.cexp.com...
>> Which version of the xfire-all jar are you running with?
>> Also, which build
>> of the various components are you running off of?
>>
>> > -----Original Message-----
>> > From: news [mailto:[EMAIL PROTECTED]
>> > Behalf
>> > Of Simon Carni
>> > Sent: Thursday, January 12, 2006 4:01 PM
>> > To: [email protected]
>> > Subject: [servicemix-user] Re: Exception in SaajMarshaler...
>> >
>> >
>> > Hi Guillaume,
>> >
>> > I think I know where the problem is :
>> >
>> > document.appendChild(node.cloneNode(true));
>> > in method createSOAPMessage in SaajMarshaller throws A node
>> > is used in a
>> > different document than the one that created it exception.
>> > The workaround is to replace this with
>> > document.appendChild(document.importNode(node,true));
>> > I had simillar issue on some other project...
>> >
>> > Now there's another issue:
>> > when the message is routed back to Axis client seems like
>> > xmlns attribute
>> > gets gets lost.
>> > Here's the document returned to AxisClient when the WS is
>> > called directly:
>> >
>> > <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
>> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>> > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv
>> > :Body><ns1:serviceMethodResponse
>> > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> > xmlns:ns1="http://example3.userguide.samples"><serviceMethodReturn
>> > xsi:type="xsd:string">simon</serviceMethodReturn></ns1:service
>> > MethodResponse></soapenv:Body></soapenv:Envelope>
>> >
>> > and here's the document returned when using SM as a "broker":
>> > <?xml version='1.0' encoding='UTF-8'?><soap:Envelope
>> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
>> > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Bo
>> > dy><ns1:serviceMethodResponse
>> > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>> > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><service
>> > MethodReturn
>> > xsi:type="xsd:string">simon</serviceMethodReturn></ns1:service
>> > MethodResponse></soap:Body></soap:Envelope>
>> >
>> > You can see xmlns:ns1="http://example3.userguide.samples"
>> > missing in second
>> > doc.
>> > As result I get org.xml.sax.SAXParseException: The prefix
>> > "ns1" for element
>> > "ns1:serviceMethodResponse" is not bound
>> > at Axis client.
>> > The attribute exists before
>> > org.codehaus.xfire.soap.handler.SoapSerializerHandler is
>> > invoked, so that
>> > could be the spot.
>> >
>> > Maybe I just missed something...
>> > Anyway thanx in advance
>> > Cheers,
>> > Simon
>> >
>> >
>> > "Guillaume Nodet"
>> > <[EMAIL PROTECTED]>
>> > wrote in message
>> > news:[EMAIL PROTECTED]
>> > > Could you raise a jira, specifying this stacktrace and the
>> > exact classpath
>> > > used.
>> > > The most important is the saaj implementation and dom
>> > implementation.
>> > >
>> > > Cheers,
>> > > Guillaume Nodet
>> > >
>> > > Simon Èarni wrote:
>> > >
>> > >>Hi,
>> > >>
>> > >>While trying to execute following scenario on SM 3.0-SNAPSHOT;
>> > >>
>> > >>Axis SOAP Client --> HttpSoapConnector --> SaajBinding
>> --> SOAP WS,
>> > >>
>> > >>I get exception:
>> > >>
>> > >>DEBUG - DefaultEndpoint.handleException(76) | Fault occurred!
>> > >>org.codehaus.xfire.fault.XFireFault: WRONG_DOCUMENT_ERR: A
>> > node is used in
>> > >>a dif
>> > >>ferent document than the one that created it.
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.components.http.HttpSoapInOutBinding.invokeInOu
>> > >>t(HttpSoapInOutBinding.java:143)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.components.http.HttpSoapInOutBinding$InOutServi
>> > >>ce.invokeInOut(HttpSoapInOutBinding.java:221)
>> > >> at sun.reflect.NativeMethodAccessorImpl.invoke0
>> > (Native Method)
>> > >> at
>> > >>
>> >
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
>> > >>java:39)
>> > >> at
>> > >>
>> >
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>> > >>sorImpl.java:25)
>> > >> at java.lang.reflect.Method.invoke(Method.java:585)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.service.binding.ObjectInvoker.invoke(ObjectInvoker
>> > >>.java:87)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessa
>> > >>ge(ServiceInvocationHandler.java:110)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(Se
>> > >>rviceInvocationHandler.java:72)
>> > >> at org.codehaus.xfire.handler.HandlerPipeline.invoke
>> > >> (HandlerPipeline.jav
>> > >>a:97)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoin
>> > >>t.java:58)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.
>> > >>java:38)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.transport.http.XFireServletController.invoke(XFire
>> > >>ServletController.java:278)
>> > >> at
>> > >>
>> >
>> org.codehaus.xfire.transport.http.XFireServletController.doService(XF
>> > >>ireServletController.java :144)
>> > >> at org.apache.servicemix.component
>> > >> s.http.HttpSoapInOutBinding.process(Ht
>> > >>tpSoapInOutBinding.java:94)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.components.http.BindingServlet.doPost(BindingSe
>> > >>rvlet.java:75)
>> > >> at
>> > javax.servlet.http.HttpServlet.service(HttpServlet.java:615)
>> > >> at
>> > javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
>> > >> at
>> > >>
>> >
>> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java :428
>> > >>)
>> > >> at
>> > >>
>> >
>> org.mortbay.jetty.servlet.ServletHandler.dispatch(ServletHandler.java
>> > >>:666)
>> > >> at
>> > >>
>> >
>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:5
>> > >>68)
>> > >> at org.mortbay.http.HttpContext.handle
>> > (HttpContext.java:1530)
>> > >> at
>> > org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
>> > >> at
>> org.mortbay.http.HttpServer.service(HttpServer.java:909)
>> > >> at org.mortbay.http.HttpConnection.service
>> > >> (HttpConnection.java:816)
>> > >> at
>> > >>
>> org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
>> > >> at
>> > org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
>> > >> at org.mortbay.http.SocketListener.handleConnection
>> > >> (SocketListener.java:
>> > >>244)
>> > >> at
>> > org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
>> > >> at
>> > org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
>> > >>Caused by: org.w3c.dom.DOMException : WRONG_DOCUMENT_ERR: A
>> > node is used
>> > >>in a dif
>> > >>ferent document than the one that created it.
>> > >> at
>> > org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown
>> > >> Source)
>> > >>
>> > >> at
>> > org.apache.xerces.dom.ParentNode.insertBefore(Unknown Source)
>> > >> at
>> > org.apache.xerces.dom.CoreDocumentImpl.insertBefore(Unknown
>> > >> Source)
>> > >> at
>> > org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.components.saaj.SaajMarshaler.createSOAPMessage
>> > >>(SaajMarshaler.java:140)
>> > >> at
>> > org.apache.servicemix.components.saaj.SaajBinding.onMessageExc
>> > >> hange(S
>> > >>aajBinding.java:88)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBoun
>> > >>d(DeliveryChannelImpl.java:587)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlo
>> > >>w.java:179)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doSend(SedaFlow.java
>> > >>:137)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.send(AbstractFlow.jav
>> > >>a:121)
>> > >> at org.apache.servicemix.jbi.nmr.Broker.sendExchangePacket
>> > >> (Broker.java:2
>> > >>85)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBICont
>> > >>ainer.java:586)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(Delive
>> > >>ryChannelImpl.java :346)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(Deli
>> > >>veryChannelImpl.java:420)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(Deli
>> > >>veryChannelImpl.java :397)
>> > >> at
>> > >>
>> >
>> org.apache.servicemix.components.http.HttpSoapInOutBinding.invokeInOu
>> > >>t(HttpSoapInOutBinding.java:132)
>> > >> ... 29 more
>> > >>DEBUG - HandlerPipeline.invoke(95) | Invoking handler
>> > >>org.codehaus.xfire.soap.ha
>> > >>ndler.FaultSoapSerializerHandler in phase post-invoke
>> > >>DEBUG - HandlerPipeline.invoke(95) | Invoking handler
>> > >>org.codehaus.xfire.handler
>> > >>
>> > >>...
>> > >>
>> > >>Any ideas???
>> > >>
>> > >>
>> > >>
>> > >>
>> > >>
>> > >>
>> > >
>> > >
>> >
>> >
>> >
>>
>>
>>
>