[ http://issues.apache.org/jira/browse/MUSE-155?page=all ]

Vinh Nguyen updated MUSE-155:
-----------------------------

    Attachment: SimpleResource.wsdl

Attached my test wsdl file for SimpleResource

> 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
>         Attachments: SimpleResource.wsdl
>
>
> 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]

Reply via email to