just checked in a fix for this.

Dan



Erik Rissanen <[EMAIL PROTECTED]> wrote on 04/17/2007 09:19:32 AM:

> 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]
> 


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

Reply via email to