dims        2002/06/22 09:40:57

  Modified:    java/src/org/apache/axis/encoding
                        SerializationContextImpl.java
               java/test/encoding TestDOM.java
               java/src/org/apache/axis/utils XMLUtils.java
  Log:
  - Fix for Bug 7132 - Attributes object does not contain all attributes for the 
element (This was the oldest bug in our system)
  - Test case for making sure that we don't break this functionality again.
  
  Revision  Changes    Path
  1.33      +15 -10    
xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java
  
  Index: SerializationContextImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- SerializationContextImpl.java     11 Jun 2002 14:53:54 -0000      1.32
  +++ SerializationContextImpl.java     22 Jun 2002 16:40:56 -0000      1.33
  @@ -709,6 +709,7 @@
       public void startElement(QName qName, Attributes attributes)
           throws IOException
       {
  +        java.util.Vector vecQNames = new java.util.Vector();
           if (log.isDebugEnabled()) {
               log.debug(JavaUtils.getMessage("startElem00",
                       "[" + qName.getNamespaceURI() + "]:" + qName.getLocalPart()));
  @@ -757,11 +758,11 @@
                           qname = attributes.getLocalName(i);
                       }
                   } else {
  -                    qname = attributes.getLocalName(i);
  -                    if(qname == null)
  -                        qname = attributes.getQName(i);
  +                   qname = attributes.getQName(i);
  +                    if(qname.equals(""))
  +                        qname = attributes.getLocalName(i);
                   }
  -
  +                vecQNames.add(qname);
                   writer.write(qname);
                   writer.write("=\"");
                   writer.write(XMLUtils.xmlEncodeString(attributes.getValue(i)));
  @@ -772,14 +773,18 @@
           ArrayList currentMappings = nsStack.peek();
           for (int i = 0; i < currentMappings.size(); i++) {
               Mapping map = (Mapping)currentMappings.get(i);
  -            writer.write(" xmlns");
  +            StringBuffer sb = new StringBuffer("xmlns");
               if (!map.getPrefix().equals("")) {
  -                writer.write(":");
  -                writer.write(map.getPrefix());
  +                sb.append(":");
  +                sb.append(map.getPrefix());
  +            }
  +            if(vecQNames.indexOf(sb.toString())==-1){
  +                writer.write(" ");
  +                writer.write(sb.toString());
  +                writer.write("=\"");
  +                writer.write(map.getNamespaceURI());
  +                writer.write("\"");
               }
  -            writer.write("=\"");
  -            writer.write(map.getNamespaceURI());
  -            writer.write("\"");
           }
   
           writingStartTag = true;
  
  
  
  1.13      +34 -3     xml-axis/java/test/encoding/TestDOM.java
  
  Index: TestDOM.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/TestDOM.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- TestDOM.java      21 Jun 2002 13:00:37 -0000      1.12
  +++ TestDOM.java      22 Jun 2002 16:40:56 -0000      1.13
  @@ -6,12 +6,15 @@
   import org.apache.axis.AxisEngine;
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
  +import org.apache.axis.message.MessageElement;
   import org.apache.axis.message.SOAPBodyElement;
   import org.apache.axis.message.SOAPEnvelope;
   import org.apache.axis.message.SOAPHeaderElement;
   import org.apache.axis.server.AxisServer;
   import org.apache.axis.utils.XMLUtils;
   
  +import java.util.Iterator;
  +
   /**
   
    * Verify that deserialization actually can cause the soap service
  @@ -26,7 +29,7 @@
           super(name);
       }
   
  -    private String request =
  +    private String header =
           "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
           "<SOAP-ENV:Envelope" +
           " SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\""; +
  @@ -42,8 +45,15 @@
           "    </SOAP-SEC:signature>\n" +
           "  </SOAP-ENV:Header>\n" +
           "  <SOAP-ENV:Body id=\"body\">\n" +
  -        "    <ns1:getQuote xmlns:ns1=\"urn:xmltoday-delayed-quotes\">\n" +
  -        "      <symbol xsi:type=\"xsd:string\">IBM</symbol>\n" +
  +        "    <ns1:getQuote xmlns:ns1=\"urn:xmltoday-delayed-quotes\">\n";
  +
  +    private String request1 =
  +        "      <symbol xsi:type=\"xsd:string\">IBM</symbol>\n";
  +
  +    private String request2 =
  +        "      <addResult xsi:type=\"xsd:int\" 
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";>4</addResult>\n";
  +
  +    private String footer =
           "    </ns1:getQuote>\n" +
           "  </SOAP-ENV:Body>\n" +
           "</SOAP-ENV:Envelope>";
  @@ -55,6 +65,7 @@
          engine.init();
          MessageContext msgContext = new MessageContext(engine);
          msgContext.setHighFidelity(true);
  +       String request = header + request1 + footer;
          Message message = new Message(request);
          message.setMessageContext(msgContext);
   
  @@ -71,6 +82,7 @@
          engine.init();
          MessageContext msgContext = new MessageContext(engine);
          msgContext.setHighFidelity(true);
  +        String request = header + request1 + footer;
          Message message = new Message(request);
          message.setMessageContext(msgContext);
   
  @@ -95,6 +107,24 @@
          assertTrue(result2.indexOf("foo3")!=-1);
       }
   
  +    /**
  +     * Test for Bug 7132
  +     */
  +    public void testAttributes() throws Exception {
  +       AxisEngine engine = new AxisServer();
  +       engine.init();
  +       MessageContext msgContext = new MessageContext(engine);
  +       msgContext.setHighFidelity(true);
  +       String request = header + request2 + footer;
  +       Message message = new Message(request);
  +       message.setMessageContext(msgContext);
  +       SOAPEnvelope envelope = message.getSOAPEnvelope();
  +       SOAPBodyElement bodyElement = 
(SOAPBodyElement)envelope.getBodyElements().elementAt(0);
  +       MessageElement me = (MessageElement) bodyElement.getChildren().get(0);
  +       org.xml.sax.Attributes atts = me.getAttributes();
  +       assertTrue(atts.getLength()==2);
  +    }
  +
       public void testEmptyNode() throws Exception
       {
           SOAPBodyElement body = new 
SOAPBodyElement(XMLUtils.newDocument().createElement("tmp"));
  @@ -112,6 +142,7 @@
       public static void main(String [] args) throws Exception
       {
           TestDOM tester = new TestDOM("TestDOM");
  +        tester.testAttributes();
           tester.testHeaders();
           tester.testNodeWithAttribute();
           tester.testEmptyNode();
  
  
  
  1.53      +3 -1      xml-axis/java/src/org/apache/axis/utils/XMLUtils.java
  
  Index: XMLUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/XMLUtils.java,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- XMLUtils.java     13 Jun 2002 13:33:04 -0000      1.52
  +++ XMLUtils.java     22 Jun 2002 16:40:57 -0000      1.53
  @@ -195,7 +195,9 @@
               return (SAXParser )saxParsers.pop();
   
           try {
  -            return saxFactory.newSAXParser();
  +            SAXParser parser = saxFactory.newSAXParser();
  +            
parser.getXMLReader().setFeature("http://xml.org/sax/features/namespace-prefixes";, 
true);
  +            return parser;
           } catch (ParserConfigurationException e) {
               log.error(JavaUtils.getMessage("parserConfigurationException00"), e);
               return null;
  
  
  


Reply via email to