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=21012>. 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=21012 Improper Prefix Handling.(SAAJ ) Summary: Improper Prefix Handling.(SAAJ ) Product: Axis Version: 1.1 Platform: All OS/Version: Other Status: NEW Severity: Blocker Priority: Other Component: Serialization/Deserialization AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Find enclosed the code(JunitTestCase) for improper prefix handling. In MessageElement if no prefix is given for an attribute it results in a bug such that the prefix is repeated. <JunittestCase> public void testAttribute()throws Exception{ String soappacket = "<SOAP-ENV:Envelope xmlns:SOAP- ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">" + "<SOAP-ENV:Body> <helloworld name=\"tester\" />" + "</SOAP-ENV:Body></SOAP-ENV:Envelope>"; SOAPMessage msg = MessageFactory.newInstance().createMessage( new MimeHeaders(), new ByteArrayInputStream (soappacket.getBytes())); SOAPBody body = msg.getSOAPPart().getEnvelope().getBody(); SOAPElement ele = (SOAPElement )body.getChildElements().next(); Iterator attit = ele.getAllAttributes(); Name n = (Name) attit.next(); System.out.println(n.getQualifiedName()); assertTrue("Test fail prefix problem",!n.getQualifiedName().equals ("name:name")); } </JunittestCase> <output> name:name </output> I think the problem is in MessageElement <originalcode> public Iterator getAllAttributes() { int num = attributes.getLength(); Vector attrs = new Vector(num); for (int i = 0; i < num; i++) { String q = attributes.getQName(i); String prefix = ""; if (q != null) { int idx = q.indexOf(":"); if (idx > 0) { prefix = q.substring(0, idx); } else { prefix= q; } } attrs.add(new PrefixedQName(attributes.getURI(i), attributes.getLocalName(i), prefix)); } return attrs.iterator(); } </originalcode> <patch> public Iterator getAllAttributes() { int num = attributes.getLength(); Vector attrs = new Vector(num); for (int i = 0; i < num; i++) { String q = attributes.getQName(i); String prefix = ""; if (q != null) { int idx = q.indexOf(":"); if (idx > 0) { prefix = q.substring(0, idx); } else { prefix= ""; <--- Note: This is the only change. } } attrs.add(new PrefixedQName(attributes.getURI(i), attributes.getLocalName(i), prefix)); } return attrs.iterator(); } </patch> Kindly fix the same.
