I tried it with the mini engine, and it works now.

Fixing the SimpleSoapClient and the ElementSerializer is all that is
needed in Muse. Axis still breaks the message by re-indenting it, but
the mini engine is ok.

Regards,
Erik

Erik Rissanen wrote:
> 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]

Reply via email to