Hi Dan,

I tried your fix. It doesn't work. ElementSerializer is like this:

    public Element toXML(Object obj, QName qname)
    {
        if (obj == null)
            return XmlUtils.createElement(qname);
       
        //
        // short circuit - no need to recreate the Element if
        // the names are already the same
        //
        QName currentName = XmlUtils.getElementQName((Element)obj);
       
        if (currentName.equals(qname))
            return (Element)obj;
       
        return XmlUtils.createElement(XmlUtils.EMPTY_DOC, qname, obj);
    }

It throws an exception like this:

org.apache.muse.ws.addressing.soap.SoapFault: WRONG_DOCUMENT_ERR: A node
is used in a different document than the one that created it.
        at
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClient.java:298)
        at
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClient.java:232)
        at
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClient.java:211)
[my code begins here...]


It seems the code calling the serializer assumes that the returned
element belongs to the XmlUtils.EMPTY_DOC document. This works:

    public Element toXML(Object obj, QName qname)
    {
        if (obj == null)
            return XmlUtils.createElement(qname);
       
        //
        // short circuit - no need to recreate the Element if
        // the names are already the same
        //
        QName currentName = XmlUtils.getElementQName((Element)obj);
       
        if (currentName.equals(qname))
            return (Element) XmlUtils.EMPTY_DOC.importNode((Element)
obj, true);
        return XmlUtils.createElement(XmlUtils.EMPTY_DOC, qname, obj);
    }

Cheers,
Erik


Daniel Jemiolo wrote:
> Just wanted to let you know that tonight's build will incorporate both 
> those fixes... the JARs you'd need are muse-core and muse-wsa-soap.
>
> Dan
>
>
>
> Erik Rissanen <[EMAIL PROTECTED]> wrote on 04/12/2007 02:06:54 PM:
>
>   
>> I actually used toString(xml, true, false) since it was the indentation
>> which was the problem, not the <?xml> header.
>>
>> Don't forget to fix the ElementSerializer as well. It breaks the
>> signature by changing the namespace prefix. I am not sure what the
>> correct fix is there since other Muse code might depend on the current
>> behavior.
>>
>> I'll let you know if I find problems in Axis, but I'll go with the mini
>> engine for now. Lots of work to do. :-)
>>
>> Thanks,
>> Erik
>>
>>
>> Daniel Jemiolo wrote:
>>     
>>> Thanks for the SoapClient fix - that's a tricky one. I knew were 
>>>       
> weren't 
>   
>>> adding actual whitespace text nodes to the DOM, so I couldn't fathom 
>>>       
> why 
>   
>>> there would be more whitespace on the outgoing message. I'll fix it so 
>>>       
>
>   
>>> that we use toString(xml, false, false), which will disable 
>>>       
> indentation.
>   
>>> Please update us if you find a similar problem in the Axis2/Axiom code 
>>>       
>
>   
>>> that accounts for the remaining issues.
>>>
>>> Dan
>>>
>>>
>>>
>>> Erik Rissanen <[EMAIL PROTECTED]> wrote on 04/10/2007 05:58:54 AM:
>>>
>>>
>>>       
>>>> Daniel,
>>>>
>>>> I have looked for the source of the indentation. In
>>>> SimpleSoapClient.java at line 247:
>>>>
>>>>         byte[] soapBytes = XmlUtils.toString(soapRequest).getBytes();
>>>>
>>>> This does indentation, so it will break the message on the client 
>>>>         
> side
>   
>>>> before it is sent. However, fixing this didn't take care of the 
>>>>         
> problem,
>   
>>>> so something else does indentation as well.
>>>>
>>>> I made a search for the use of XmlUtils.toString in the muse source 
>>>>         
> and
>   
>>>> I got 45 hits. Most seemed ok, but I didn't go through all of them.
>>>>
>>>> I have not looked at the Axis code, which might also do indentation.
>>>>
>>>> I need to work on some other things today, but I will look into this
>>>> later. If Axis is the source of the remaining problems, using the 
>>>>         
> mini
>   
>>>> engine might solve it for me. I will try the mini engine later when I
>>>> have time again.
>>>>
>>>> Regards,
>>>> Erik
>>>>
>>>>
>>>> Daniel Jemiolo wrote:
>>>>
>>>>         
>>>>> From a Muse perspective, the only time we add indentation is in 
>>>>> XmlUtils.toString(), which is used if you turn on SOAP tracing 
>>>>>
>>>>>           
>>> (log-level 
>>>
>>>       
>>>>> = FINE in muse.xml). This just makes it easier to read the log file. 
>>>>>           
>
>   
>>> You 
>>>
>>>       
>>>>> can stop the indentation all together by using this version of 
>>>>> XmlUtils.toString():
>>>>>
>>>>> http://ws.apache.org/muse/docs/2.2.
>>>>>
>>>>>           
> 0/javadoc/org/apache/muse/util/xml/XmlUtils.html#toString(org.w3c.dom.Node,%
>   
>>>> 20boolean,%20boolean)
>>>>
>>>>         
>>>>> The point is that, from a Muse perspective, we don't add any 
>>>>>
>>>>>           
>>> additional 
>>>
>>>       
>>>>> whitespace nodes/indentation when processing the message - it just 
>>>>>
>>>>>           
>>> happens 
>>>
>>>       
>>>>> when we trace. If you look in the Axis2 service code, we just take 
>>>>>           
> the 
>   
>>>       
>>>>> SOAP body as it comes from Axis2 (in Axiom form), convert it to DOM, 
>>>>>           
>
>   
>>> and 
>>>
>>>       
>>>>> hand off the DOM tree to your method:
>>>>>
>>>>>
>>>>>
>>>>>           
> http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-platform-
>   
> axis2/src/org/apache/muse/core/platform/axis2/AxisIsolationLayer.java?
>   
>>>> revision=522017&view=markup
>>>>
>>>>         
>>>>> The Axiom -> DOM conversion is pretty straightforward - I could 
>>>>>
>>>>>           
>>> understand 
>>>
>>>       
>>>>> if we had *missed* something in the copying, but *adding* new things 
>>>>>           
>
>   
>>> would 
>>>
>>>       
>>>>> be hard.
>>>>>
>>>>> Does this problem happen if you use the Mini SOAP engine (-j2ee 
>>>>>           
> mini)? 
>   
>>> If 
>>>
>>>       
>>>>> not, the problem may be with Axiom/Axis2. I've noticed that, like 
>>>>>           
> Axis 
>   
>>>       
>>>>> 1.x, there are still cases where Axis2 adds in prefix/namespace 
>>>>> declarations, and so the addition of blank/whitespace text nodes 
>>>>>           
> does 
>   
>>> not 
>>>
>>>       
>>>>> seem impossible.
>>>>>
>>>>>
>>>>>
>>>>> Erik Rissanen <[EMAIL PROTECTED]> wrote on 04/09/2007 02:51:06 AM:
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> Daniel Jemiolo wrote:
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> Can you give an example of the changing of XML prefixes? This was 
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>> actually 
>>>>>
>>>>>
>>>>>           
>>>>>>> a major problem for us with the various SOAP engines we targeted 
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>> (because 
>>>>>
>>>>>
>>>>>           
>>>>>>> WSRF is very dependent on prefixes staying the same), so we make 
>>>>>>>
>>>>>>>               
>>> sure 
>>>
>>>       
>>>>> not 
>>>>>
>>>>>
>>>>>           
>>>>>>> to modify prefixes in the request handling. Let me know what's 
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>> happening.
>>>>>
>>>>>
>>>>>           
>>>>>>> Also, are you signing things as part of the operation 
>>>>>>>
>>>>>>>               
>>> implementations? 
>>>
>>>       
>>>>>>> Normally this is done with something like WSS4J, which you can 
>>>>>>>
>>>>>>>               
>>> enable 
>>>
>>>       
>>>>> as 
>>>>>
>>>>>
>>>>>           
>>>>>>> an Axis2 handler (so the envelope will be completely finished when 
>>>>>>>               
>
>   
>>> you 
>>>
>>>       
>>>>>>> sign or validate it).
>>>>>>>
>>>>>>> Dan
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Erik Rissanen <[EMAIL PROTECTED]> wrote on 04/08/2007 01:52:42 PM:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I am using Apache Muse 2.2.0 for implementing a web service. I 
>>>>>>>>                 
> need 
>   
>>>       
>>>>> to
>>>>>
>>>>>
>>>>>           
>>>>>>>> pass digitally signed XML documents to the service. The problem I 
>>>>>>>>                 
>
>   
>>>>>>>>                 
>>>>> have
>>>>>
>>>>>
>>>>>           
>>>>>>>> is that Muse re-indents the XML and changes namespace prefixes. 
>>>>>>>>
>>>>>>>>                 
>>> This
>>>
>>>       
>>>>>>>> breaks the signatures.
>>>>>>>>
>>>>>>>> Is this a bug, feature or do I need to reconfigure muse somehow? 
>>>>>>>>                 
> I 
>   
>>>>>>>>                 
>>>>> tried
>>>>>
>>>>>
>>>>>           
>>>>>>>> to search the web, this list and the bug tracking system, but I 
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>> couldn't
>>>>>
>>>>>
>>>>>           
>>>>>>>> find anything.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Erik
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>> The signature is for an XML document which is signed standalone. I 
>>>>>>             
> am
>   
>>>>>> not signing the WS invocation itself, rather I am transmitting a
>>>>>> document which has been previously signed. So WSS4J is not what I 
>>>>>>             
> am
>   
>>>>>> looking for here.
>>>>>>
>>>>>> The schema for the messages looks like this:
>>>>>>
>>>>>>         <xsd:schema elementFormDefault="qualified"
>>>>>>             targetNamespace="http://sics.se/my-stuff";>
>>>>>>
>>>>>>             <xsd:element name="AddPolicy">
>>>>>>                 <xsd:complexType>
>>>>>>                     <xsd:sequence>
>>>>>>                         <xsd:element ref="saml:Assertion" />
>>>>>>                     </xsd:sequence>
>>>>>>                 </xsd:complexType>
>>>>>>             </xsd:element>
>>>>>>
>>>>>>             <xsd:element name="AddPolicyResponse" 
>>>>>>             
> type="xsd:anyURI"/>
>   
>>>>>>         </xsd:schema>
>>>>>>
>>>>>> I use wsdl2java to generate a client proxy which has the following 
>>>>>>
>>>>>>
>>>>>>             
>>>>> method:
>>>>>
>>>>>
>>>>>           
>>>>>>     URI addPolicy(Element assertion) throws SoapFault;
>>>>>>
>>>>>> I read my signed document from disc and parse it into a DOM. I pass 
>>>>>>             
>
>   
>>> the
>>>
>>>       
>>>>>> document element of this DOM to the above method. The document 
>>>>>>             
> looks
>   
>>>>>> like this (fragments only since it is quite long):
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
>>>>>> ID="ID_191adef5-f5a9-40b6-a0c1-c23ca7de3c6c"
>>>>>> IssueInstant="2007-04-08T13:56:13Z" Version="2.0">
>>>>>> <saml:Issuer
>>>>>> Format="http://www.w3.org/2001/XMLSchema#string";>...</saml:Issuer>
>>>>>> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#";>
>>>>>> ...
>>>>>> <ds:Reference URI="#ID_191adef5-f5a9-40b6-a0c1-c23ca7de3c6c">
>>>>>> ...
>>>>>> </ds:Signature>
>>>>>> <saml:Statement
>>>>>> xmlns:xacml-saml="urn:oasis:xacml:3.0:saml:assertion:schema:os"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>> xsi:type="xacml-saml:XACMLPolicyStatementType">
>>>>>> <xacml:Policy xmlns="urn:oasis:names:tc:xacml:3.0:schema:os"
>>>>>> xmlns:xacml="urn:oasis:names:tc:xacml:3.0:schema:os" PolicyId="..."
>>>>>> RuleCombiningAlgId="..." Version="1.0">
>>>>>>   <xacml:Target>
>>>>>>     <xacml:DisjunctiveMatch>
>>>>>> ...
>>>>>>
>>>>>>
>>>>>> On the server side wsdl2java generates the following:
>>>>>>
>>>>>>     public URI addPolicy(Element Assertion) throws Exception    {
>>>>>>       ....
>>>>>>     }
>>>>>>
>>>>>> When I receive the document here it doesn't look right. notice the
>>>>>> prefix "pfx3" and the excessive amount of indentation:
>>>>>>
>>>>>> <pfx3:Assertion ID="ID_191adef5-f5a9-40b6-a0c1-c23ca7de3c6c"
>>>>>> IssueInstant="2007-04-08T13:56:13Z" Version="2.0">
>>>>>>
>>>>>>
>>>>>>
>>>>>>             <saml:Issuer
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
> Format="http://www.w3.org/2001/XMLSchema#string";>...</saml:Issuer><ds:Signature>
>   
>>>>>> ....
>>>>>>
>>>>>>                 <ds:SignedInfo>
>>>>>> </ds:KeyInfo></ds:Signature><saml:Statement
>>>>>> xmlns:xacml-saml="urn:oasis:xacml:3.0:saml:assertion:schema:os"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>> type="xacml-saml:XACMLPolicyStatementType">
>>>>>>
>>>>>>                 <xacml:Policy PolicyId="..." 
>>>>>>             
> RuleCombiningAlgId="..."
>   
>>>>>> Version="1.0">
>>>>>>
>>>>>>
>>>>>>                     <xacml:Target>
>>>>>>
>>>>>>
>>>>>>
>>>>>>                         <xacml:DisjunctiveMatch>
>>>>>>
>>>>>>
>>>>>> xsi:type has also been changed to just type in the saml:Statement 
>>>>>>
>>>>>>
>>>>>>             
>>>>> element.
>>>>>
>>>>>
>>>>>           
>>>>>> I got the above document by encoding the received Assertion element 
>>>>>>             
>
>   
>>> to a
>>>
>>>       
>>>>>> file in the capability implementation. I used the apache 
>>>>>>             
> xml-security
>   
>>>>>> canonicalizer for the encoding:
>>>>>>
>>>>>>             Canonicalizer canon = Canonicalizer.getInstance
>>>>>>             (Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS);
>>>>>>             FileOutputStream fouts = new 
>>>>>>
>>>>>>
>>>>>>             
>>>>> FileOutputStream("/tmp/tete2.xml");
>>>>>
>>>>>
>>>>>           
>>>>>>             fouts.write(canon.canonicalizeSubtree(Assertion));
>>>>>>             fouts.close();
>>>>>>
>>>>>> I don't think it is the canonicalizer which messes up the file. I 
>>>>>>
>>>>>>             
>>> also
>>>
>>>       
>>>>>> tried to use the Muse XmlUtils class for this encoding, in which 
>>>>>>             
> case
>   
>>>>>> the document looks different from above. (The indentation is 
>>>>>>
>>>>>>             
>>> prettier.)
>>>
>>>       
>>>>>> I am using the axis2 engine and I deploy the war in tomcat 5 on 
>>>>>>
>>>>>>             
>>> Fedora
>>>
>>>       
>>>>>> Core 6 Linux.
>>>>>>
>>>>>> Thanks for your assistance,
>>>>>> Erik
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
> ---------------------------------------------------------------------
>   
>>>>>> 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]
>>>>
>>>>
>>>>         
>>> ---------------------------------------------------------------------
>>> 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]
>
>   


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to