If I create a Document by reading it from a String (as in the WS examples) I
can add it to a SOAPBody. But if I create the same document programatically I
get a NAMESPACE_ERR.
In the example below I created the Document programatically, converted it to a
String, and then back to a Document. The second worked, the first did not.
I have changed the version of the XerceImpl.jar, without any difference.
Any advice would be much appreciated. Should I submit a bug?
adding doc from ByteArrayInputStream:
| <?xml version="1.0" encoding="UTF-8"?>
| <Order><Customer>Kermit</Customer><Item>Ferrari</Item></Order>
| adding doc from program:
|
| org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or
change an object in a way which is incorrect with regard to namespaces.
| at org.apache.xerces.dom.ElementNSImpl.setName(Unknown Source)
| at org.apache.xerces.dom.ElementNSImpl.<init>(Unknown Source)
| at org.apache.xerces.dom.CoreDocumentImpl.createElementNS(Unknown
Source)
| at org.jboss.util.xml.DOMUtils.createElement(DOMUtils.java:140)
| at org.jboss.ws.soap.SOAPElementImpl.<init>(SOAPElementImpl.java:79)
| at
org.jboss.ws.soap.SOAPFactoryImpl.createElement(SOAPFactoryImpl.java:75)
| at org.jboss.ws.soap.SOAPBodyImpl.addDocument(SOAPBodyImpl.java:82)
| at test.TestNs.<init>(TestNs.java:40)
| at test.TestNs.main(TestNs.java:73)
Program:
package test;
import java.io.ByteArrayInputStream;
| import java.io.StringWriter;
|
| import javax.xml.parsers.DocumentBuilder;
| import javax.xml.parsers.DocumentBuilderFactory;
| import javax.xml.soap.MessageFactory;
| import javax.xml.soap.SOAPBody;
| import org.w3c.dom.Document;
| import org.w3c.dom.Element;
| import com.ibm.wsdl.util.xml.DOM2Writer;
|
| public class TestNs {
|
| public TestNs() {
| try {
| MessageFactory mf = MessageFactory.newInstance();
| SOAPBody body = mf.createMessage().getSOAPBody();
| SOAPBody body2 = mf.createMessage().getSOAPBody();
| DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
| docBuilderFactory.setNamespaceAware(true);
| DocumentBuilder builder =
docBuilderFactory.newDocumentBuilder();
|
| Document doc = getDoc();
|
| StringWriter swr = new StringWriter();
| DOM2Writer.serializeAsXML(doc, swr);
| String xml = swr.toString();
|
| Document doc2 = builder.parse(new
ByteArrayInputStream(xml.getBytes()));
|
| System.out.println("adding doc from
ByteArrayInputStream: \n" + swr);
| body2.addDocument(doc2);
|
| System.out.println("adding doc from program:\n");
| // NAMESPACE_ERR !
| body.addDocument(doc);
|
| } catch (Exception e) {
| e.printStackTrace();
| }
| }
|
| private Document getDoc() {
| try {
| DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
| docBuilderFactory.setNamespaceAware(true);
| DocumentBuilder builder =
docBuilderFactory.newDocumentBuilder();
| Document root = builder.newDocument();
|
| Element orderEl = root.createElement("Order");
| root.appendChild(orderEl);
|
| Element customerEl = root.createElement("Customer");
| orderEl.appendChild(customerEl);
| customerEl.appendChild(root.createTextNode("Kermit"));
|
| Element itemEl = root.createElement("Item");
| orderEl.appendChild(itemEl);
| itemEl.appendChild(root.createTextNode("Ferrari"));
|
| return root;
| } catch (Exception e) {
| e.printStackTrace();
| return null;
| }
| }
|
| public static void main(String[] args) {
| new TestNs();
| }
| }
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3955220#3955220
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3955220
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user