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]
