You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2004/07/08 16:13:30 UTC
cvs commit: ws-axis/java/test/saaj TestDOM.java
dims 2004/07/08 07:13:29
Modified: java/src/org/apache/axis/message MessageElement.java
SOAPBody.java
java/test/saaj TestDOM.java
Log:
Fix and test case for AXIS-1436 - SOAPBody.addDocument ClassCastException
Revision Changes Path
1.176 +11 -4 ws-axis/java/src/org/apache/axis/message/MessageElement.java
Index: MessageElement.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/MessageElement.java,v
retrieving revision 1.175
retrieving revision 1.176
diff -u -r1.175 -r1.176
--- MessageElement.java 29 Jun 2004 13:18:40 -0000 1.175
+++ MessageElement.java 8 Jul 2004 14:13:28 -0000 1.176
@@ -1415,10 +1415,17 @@
Mapping map = new Mapping(att.getNodeValue(), att.getLocalName());
addMapping(map);
}
- parent.addAttribute(att.getPrefix(),
- att.getNamespaceURI(),
- att.getLocalName(),
- att.getNodeValue());
+ if(att.getLocalName() != null) {
+ parent.addAttribute(att.getPrefix(),
+ att.getNamespaceURI(),
+ att.getLocalName(),
+ att.getNodeValue());
+ } else if (att.getNodeName() != null) {
+ parent.addAttribute(att.getPrefix(),
+ att.getNamespaceURI(),
+ att.getNodeName(),
+ att.getNodeValue());
+ }
}
org.w3c.dom.NodeList children = element.getChildNodes();
1.54 +3 -63 ws-axis/java/src/org/apache/axis/message/SOAPBody.java
Index: SOAPBody.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPBody.java,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- SOAPBody.java 27 Jun 2004 12:28:31 -0000 1.53
+++ SOAPBody.java 8 Jul 2004 14:13:28 -0000 1.54
@@ -217,7 +217,9 @@
}
public javax.xml.soap.SOAPBodyElement addDocument(Document document) throws SOAPException {
- return importBodyElement(this, document.getDocumentElement());
+ SOAPBodyElement bodyElement = new SOAPBodyElement(document.getDocumentElement());
+ addChildElement(bodyElement);
+ return bodyElement;
}
public javax.xml.soap.SOAPFault addFault() throws SOAPException {
@@ -303,67 +305,5 @@
public void setSAAJEncodingCompliance(boolean comply) {
this.doSAAJEncodingCompliance = true;
- }
-
- /**
- * Recursive function
- * @todo: handle Attributes not yet finished
- * @param parent
- * @param element
- */
-
- private static SOAPBodyElement importBodyElement(MessageElement parent, org.w3c.dom.Node element)
- {
- try{
- PrefixedQName name = new PrefixedQName(element.getNamespaceURI(),
- element.getLocalName(),
- element.getPrefix());
- SOAPBodyElement bodyElement = null;
- bodyElement = new SOAPBodyElement(name);
- if(element instanceof org.w3c.dom.Element){
- org.w3c.dom.NamedNodeMap attrs = ((Element)element).getAttributes();
- for(int i = 0; i < attrs.getLength(); i++){
- org.w3c.dom.Node att = attrs.item(i);
- bodyElement.setAttribute(att.getNamespaceURI(), att.getLocalName(), att.getPrefix());
- }
- }
- parent.appendChild(bodyElement);
-
- org.w3c.dom.NodeList children = element.getChildNodes();
- for(int i = 0; i < children.getLength(); i++){
- org.w3c.dom.Node child = children.item(i);
- importMessageElement((MessageElement)element, child);
- }
- return bodyElement;
- }
- catch(Exception e)
- {
- return null;
- }
- }
-
- private static void importMessageElement(org.w3c.dom.Node parent, org.w3c.dom.Node element)
- {
-
- PrefixedQName name = new PrefixedQName(element.getNamespaceURI(),
- element.getLocalName(),
- element.getPrefix());
- MessageElement bodyElement = new MessageElement(name);
- org.w3c.dom.NamedNodeMap attrs = element.getAttributes();
- for(int i = 0; i < attrs.getLength(); i++){
- org.w3c.dom.Node att = attrs.item(i);
- bodyElement.setAttribute(att.getNamespaceURI(),
- att.getLocalName(),
- att.getPrefix());
- }
- // do we have to set some more for importing.....?
- parent.appendChild(bodyElement);
-
- org.w3c.dom.NodeList children = element.getChildNodes();
- for(int i = 0; i < children.getLength(); i++){
- org.w3c.dom.Node child = children.item(i);
- importMessageElement(element, child);
- }
-
}
}
1.4 +22 -0 ws-axis/java/test/saaj/TestDOM.java
Index: TestDOM.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/saaj/TestDOM.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestDOM.java 8 Jul 2004 08:51:58 -0000 1.3
+++ TestDOM.java 8 Jul 2004 14:13:29 -0000 1.4
@@ -4,6 +4,7 @@
import org.apache.axis.message.RPCParam;
import org.apache.axis.message.RPCElement;
import org.w3c.dom.Element;
+import org.w3c.dom.Document;
import org.custommonkey.xmlunit.XMLUnit;
import javax.xml.soap.MessageFactory;
@@ -17,6 +18,7 @@
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPBodyElement;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Iterator;
@@ -142,6 +144,26 @@
SOAPElement elem3 = (SOAPElement) it3.next();
System.out.println("child = " + elem3);
}
+ }
+
+ public void testAddDocument() throws Exception {
+ String xml = "<bank:getBalance xmlns:bank=\"http://myservice.test.com/banking/\">\n" +
+ " <gb:getBalanceReq xmlns:gb=\"http://myservice.test.com/banking/getBalance\">\n" +
+ " <bt:account acctType=\"domestic\" customerId=\"654321\" xmlns:bt=\"http://myservice.test.com/banking/bankTypes\">\n" +
+ " <bt:accountNumber>1234567890</bt:accountNumber>\n" +
+ " <bt:currency>USD</bt:currency>\n" +
+ " </bt:account>\n" +
+ " </gb:getBalanceReq>\n" +
+ "</bank:getBalance>";
+ Document document = XMLUtils.newDocument(new ByteArrayInputStream(xml.getBytes()));
+
+ MessageFactory factory = new org.apache.axis.soap.MessageFactoryImpl();
+ SOAPMessage msg = factory.createMessage();
+ msg.getSOAPBody();
+ SOAPBody body = msg.getSOAPBody();
+
+ SOAPBodyElement soapBodyElt = body.addDocument(document);
+ assertXMLEqual(xml, soapBodyElt.toString());
}
private String messageToString(SOAPMessage message) throws Exception {