[ http://issues.apache.org/jira/browse/AXIS-1624?page=history ]

David Del Vecchio updated AXIS-1624:
------------------------------------

    Attachment: NSStack.java
                NSStack.patch
                TestNSStack.java

Attached a modified version of NSStack class with a switch to conditionally 
omit this prefix optimization. A test case for this problem is also attached.

> XML Serialization Alters XML Causing Signature Validation Failure
> -----------------------------------------------------------------
>
>          Key: AXIS-1624
>          URL: http://issues.apache.org/jira/browse/AXIS-1624
>      Project: Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.2RC1
>  Environment: Windows XP/2000, Tomcat 5.0
>     Reporter: Stuart Jensen
>     Priority: Critical
>  Attachments: NSStack.java, NSStack.patch, TestNSStack.java
>
> If you create a SOAPBodyElement with the following XML: 
>   
>   <soapenv:Body wsu:id="id-23412344"
>     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-2004";>
>   <somepfx:SomeTag id="e0sdoaeckrpd"  xmlns="ns:uri:one"
>     xmlns:somepfx="ns:uri:one">hello</somepfx:SomeTag>
>   </soapenv:Body> 
>    
> and then pass that SOAPBodyElement to the Call.invoke(Object[]) method as a
> member of the Object[] parameter.  Then the XML that is sent by AXIS will be 
> the
> following: 
>    
>   <soapenv:Body wsu:id="id-23412344"
>     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-2004";>
>   <SomeTag id="e0sdoaeckrpd" xmlns="ns:uri:one"
>     xmlns:somepfx="ns:uri:one">hello</SomeTag>
>   </soapenv:Body> 
>    
> Note that the only difference is that the namespace prefix "somepfx" has been 
> removed from the tag "SomeTag". 
>    
> Now I realize that setting the default namespace AND defining a namespace 
> prefix for the same namespace is redundant, but it is valid XML.
> If this XML is located inside of a signed XML element, then any subsequest 
> validation of that signature will fail.
> ===========================
> The latest C14N specs state that the namespace prefixes are part of the
> signature and cannot be changed. However, AXIS XML serialization removes
> redundant namespace prefixes.  The code path inwhich this happens is
> detailed below: 
>   
> On the sending side: When Call.invoke() is called it eventually gets down
> to where it serializes the SOAPBodyElements into XML that it ends up sending 
> in the request. Since every SOAPBodyElement is an instance of a 
> MessageElement, the serialization executes through MessaeElement's 
>    
> protected void outputImpl(SerializationContext outputContext) throws 
> Exception 
>   
> which registers the current prefix with the SerializationContext by calling
> outputContext.registerPrefixForURI(prefix, namespaceURI); 
>   
> These prefixes are then queried when the SerializationContext's 
>   
> public String getPrefixForURI(String uri, String defaultPrefix, boolean 
> attribute) 
>    
> is called.  This method uses an NSStack object to keep track of what 
> namespaces are currently in play.  The problem is that this method has code 
> that checks the current default namespace URI and if it is the same as the 
> namespace currently being requested, then it returns an "empty string" 
> prefix. Effectively, removing the prefix from the XML. The offending code is 
> in NSStack.java: 
>   
>     public String getPrefix(String namespaceURI, boolean noDefault) {
>         if ((namespaceURI == null) || (namespaceURI.length()==0))
>             return null;
>         
>         // If defaults are OK, and the given NS is the current default,
>         // return "" as the prefix to favor defaults where possible.
>         if (!noDefault && currentDefaultNS > 0 &&
>             stack[currentDefaultNS]!= null &&
>             namespaceURI == stack[currentDefaultNS].getNamespaceURI())
>         {
>             // No need to return the prefix - already in that namespace!!!
>             return "";
>         } 
>   
> It appears that the DeSerializationContext.java (on the receiving side)also 
> trys to play the same game. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira

Reply via email to