DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15328>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15328

Unnecessary namespace definitions generated in serialization

           Summary: Unnecessary namespace definitions generated in
                    serialization
           Product: Axis
           Version: current (nightly)
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Serialization/Deserialization
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


The NSStack used by org.apache.axis.encoding.SerializationContextImpl is not
being properly cleared at the end of each element, resulting in an accumulation
of namespaces on the stack. This shows up, for example, during the serialization
of multiRefs. The new code (since changes implemented yesterday) generates
multiRefs of this form:

  <multiRef id="id14" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns2:FlightBean" xmlns:ns1="urn:axis.sosnoski.com"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:ns2="http://flightsraw"; xmlns:ns3="http://xml.apache.org/xml-soap";>
   <arrivalTime xsi:type="xsd:string">11:04a</arrivalTime>
   <departureTime xsi:type="xsd:string">7:00a</departureTime>
   <number xsi:type="xsd:int">937</number>
   <carrier href="#id7"/>
  </multiRef>

with unused namespaces for prefixes ns1 and ns3. The serialization previously
generated looked like this (no unused namespace declarations):

  <multiRef id="id21" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns14:FlightBean" xmlns:ns14="http://flightsraw";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <arrivalTime xsi:type="xsd:string">11:04a</arrivalTime>
   <departureTime xsi:type="xsd:string">7:00a</departureTime>
   <number xsi:type="xsd:int">937</number>
   <carrier href="#id7"/>
  </multiRef>

In this example the problem only results in padding the multiRefs with
unnecessary namespace declarations, but it demonstrates the accumulation of
namespaces on the stack.

This can be fixed by implementing the same sort of state tracking for
SerializationContextImpl as added yesterday to DeserializationContextImpl, where
clients of NSStack need to push() a null prior to declaring any namespaces for
an element, or to push the null for the element itself if no namespaces are
declared. A cleaner solution is to just redefine what constitutes a frame in
NSStack, to consist of everything from the current top of the stack (which
should always be a null) down to (but not including) the next null on the stack.
This would make NSStack's implementation consistent with how namespaces are
actually declared and used in XML, and simplify the logic needed in clients of
the class.

Reply via email to