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]