Could you please raise a jira and attach your patch please ?
I will commit it asap.

Cheers,
Guillaume Nodet

Simon Èarni wrote:

Jonathan,

I updated my source from svn, executed maven eclipse using maven1 (earlier I was using maven2) and the problem with namespace seems to be solved. But the issue regarding SaajMarshaller.createSOAP remains. I need to have document.importNode(node,true) instead of node.cloneNode(true).
Cheers,
Simon

"Simon Carni" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
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???















Reply via email to