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;