If the WSDL namespace is part of the return value's QName, then it must have something to do with the WSDL. Can you attach it to the JIRA item so I can look at it?
Dan "Vinh Nguyen \(vinguye2\)" <[EMAIL PROTECTED]> wrote on 11/30/2006 04:08:53 AM: > Hi Dan, > I don't have a Tomcat server debugger setup, so it's hard for me to > trace the server code. What object creates the > ReflectionMessageHandler? Also, what object calls > ReflectionMessageHandler.toXml()? I want to trace where the > "returnValueName" and "responseBodyName" values in this method are > coming from, and what they are, since they are being passed to > serializer.toXml(). I suspect this might pinpoint the cause of this > issue a bit further. > > I tested an implemention of a custom serializer for another custom Car > object. When my CarTypeSerializer.toXml() is called (and I assume from > the default ReflectionMessageHandler), the second parameter is a QName > containing the incorrect namespace: > http://schemas.xmlsoap.org/wsdl/}Car > > The "http://schemas.xmlsoap.org/wsdl" namespace value seems to be coming > from the xmlns="http://schemas.xmlsoap.org/wsdl/" attribute defined in > the wsdl. > > The result is an element with everything correct except the namespace of > the topmost element: > > --CarTypeSerializer.toXml() Printing XmlUtils.toString(response): > <?xml version="1.0" encoding="UTF-8"?> > <Car xmlns="http://schemas.xmlsoap.org/wsdl/" > xmlns:car="http://cisco.com/musebox/schemas/car"> > <car:make > xmlns:car="http://cisco.com/musebox/schemas/car">Honda</car:make> > <car:model > xmlns:car="http://cisco.com/musebox/schemas/car">Accord</car:model> > <car:color > xmlns:car="http://cisco.com/musebox/schemas/car">White</car:color> > </Car> > > The problem seems to be near where the serializer is called on the > server side. This occurs after the capability method is called, and > before the serialized xml result it sent to the client. So somewhere in > Muse even before the data is sent thru Axis2. Hence, when > CarTypeSerializer.fromXml() is called on the client side, it also runs > into the same issues with the xml it receives. > > > > > -----Original Message----- > From: Dan Jemiolo (JIRA) [mailto:[EMAIL PROTECTED] > Sent: Wednesday, November 29, 2006 8:43 PM > To: [email protected] > Subject: [jira] Commented: (MUSE-155) xml element capability result > improperly changed when passed to the client (namespace and prefix not > preserved) > > [ > http://issues.apache.org/jira/browse/MUSE-155?page=comments#action_12454 > 531 ] > > Dan Jemiolo commented on MUSE-155: > ---------------------------------- > > I still think this is Axis2, not Muse. First, I can't find anywhere in > the code where we set the WSDL/SOAP binding namespace, for any reason. > Second, I can't find anywhere in the code where we modify the namespaces > on the element returned to us by Resource.invoke(). Finally, the > ReflectionMessageHandler, which wraps your response element in the > wrapper, has the following code: > > // > // for complex types, we need a child element under the > // response body element > // > Element valueXML = ser.toXML(result, returnValueName); > > // > // for arrays, we put the children (array items) under the > // response body element > // > if (returnType.isArray()) > XmlUtils.moveSubTree(valueXML, responseXML); > > else if (isComplex) > responseXML.appendChild(valueXML); > > else > responseXML = valueXML; > > return responseXML; > > > So, the ElementSerializer.toXML() method is called (which does nothing > -just returns the given Element), and since your type is not an array, > and is complex, the Element is appended to the wrapper. Then it is > returned. After the above return statement, it's all pass throughs - > giving the Element back to the isolation layer for return to the Axis2 > engine. > > > > xml element capability result improperly changed when passed to the > > client (namespace and prefix not preserved) > > ---------------------------------------------------------------------- > > ----------------------------------------- > > > > Key: MUSE-155 > > URL: http://issues.apache.org/jira/browse/MUSE-155 > > Project: Muse > > Issue Type: Bug > > Affects Versions: 2.0.0 > > Environment: Muse 2.0.0, Axis2 1.0, Apache 2.2.3, Tomcat > 5.5.17, JDK 1.5.0_08, Windows XP SP2 > > Reporter: Vinh Nguyen > > Assigned To: Dan Jemiolo > > > > Muse is improperly changing the xml result of operations that return > custom types. > > For example, my code returns a custom <Box> type in an xml Element. > On the pass back to the client, Muse wraps the Element in a response > wrapper. In doing so, it improperly changes/deletes my element's > namespace and prefix. This causes problems on the client side when I > try to extract out my element and deserialize back to a javabean. The > original namespace was moved/deleted and a default one was inserted, so > it becomes difficult to extract the original element, and my code > encounters errors due to mismatched namespaces. > > Here's my server code: > > public Element boxOperation(int width) throws Exception > > { > > BoxDocument doc = BoxDocument.Factory.newInstance(); > > BoxType type = doc.addNewBox(); > > type.setWidth(BigInteger.valueOf(width)); > > type.setHeight(BigInteger.valueOf(width)); > > Element response = XmlUtils.getFirstElement(doc.newDomNode()); > > System.out.println("--BoxCapability toString(response):\n" + > XmlUtils.toString(response)); > > return response; > > } > > Here's the server log output: > > --BoxCapability toString(response): > > <?xml version="1.0" encoding="UTF-8"?> > > <box:Box xmlns:box="http://cisco.com/musebox/schemas/box"> > > <box:width>555</box:width> > > <box:height>555</box:height> > > </box:Box> > > On the client side, here's the SOAP trace of the incoming data: > > [CLIENT TRACE] SOAP envelope contents (incoming): > > ... > > <soapenv:Body> > > <muse-op:BoxOperationResponse > > xmlns:muse-op="http://cisco.com/musebox/simple/box" > xmlns:tns="http://ws.apache.org/axis2"> > > <Box xmlns="http://schemas.xmlsoap.org/wsdl/" > xmlns:box="http://cisco.com/musebox/schemas/box"> > > <box:width>555</box:width> > > <box:height>555</box:height> > > </Box> > > </muse-op:BoxOperationResponse> > > </soapenv:Body> > > </soapenv:Envelope> > > If I modify my wsdl and remove one attribute line > > (xmlns="http://schemas.xmlsoap.org/wsdl/") at the top of the file, I > get the following client side SOAP trace instead: > > [CLIENT TRACE] SOAP envelope contents (incoming): > > ... > > <soapenv:Body> > > <muse-op:BoxOperationResponse > > xmlns:muse-op="http://cisco.com/musebox/simple/box" > xmlns:tns="http://ws.apache.org/axis2"> > > <Box xmlns:box="http://cisco.com/musebox/schemas/box"> > > <box:width>555</box:width> > > <box:height>555</box:height> > > </Box> > > </muse-op:BoxOperationResponse> > > </soapenv:Body> > > </soapenv:Envelope> > > NOTE: The difference between the two traces are the namespaces in the > <Box> element. > > If my client code calls > XmlUtils.toString(XmlUtils.getFirstElement(response)), I get: > > <?xml version="1.0" encoding="UTF-8"?> > > <Box xmlns="http://schemas.xmlsoap.org/wsdl/" > xmlns:box="http://cisco.com/musebox/schemas/box"> > > <box:width>555</box:width> > > <box:height>555</box:height> > > </Box> > > So there are 2 problems here: > > 1) Muse takes my operation output and puts on a response wrapper. In > doing so, it removes both the namespace and prefix of the <Box> element. > > After removing the wrapper, the <Box> element now becomes useless > because it has no namespace, even though namespaces for child elements > are properly preserved. This is why my client code is running into > errors when trying to serialize the xml element back into a javabean > (XmlBean object). It tries to find/match the original namespace of the > <Box> element, but it is nowhere to be found. > > 2) In addition to Muse removing the top element's namespace, it tries > > to put in a default one instead. If my wsdl file contains the > attribute xmlns="http://schemas.xmlsoap.org/wsdl/" > > (which is defined in the samples), then Muse will take this namespace > > and set it as the default in the <Box> element. So my client code > complains of a namespace mismatch. (The namespace > xmlns:tns="http://ws.apache.org/axis2" is also inserted either by Muse > or Axis2, but it isn't causing problems at this moment.) So I think Muse > should either properly preserve the xml operation results exactly as is, > or put in the correct element namespaces and not override incorrectly. > Muse does preserve notification outputs correctly, but it doesn't seem > to do so for operations. > > -- > This message is automatically generated by JIRA. > - > If you think it was sent incorrectly contact one of the administrators: > http://issues.apache.org/jira/secure/Administrators.jspa > - > For more information on JIRA, see: > http://www.atlassian.com/software/jira > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
