blob: c62e036b4e4ad8d4661362df3cd1588b027ca4a7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.axis2.saaj;
import junit.framework.Assert;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.Detail;
import javax.xml.soap.DetailEntry;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.Name;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.Text;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
import java.util.Iterator;
@RunWith(SAAJTestRunner.class)
public class SOAPEnvelopeTest extends Assert {
private static final String XML_STRING =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <soapenv:Header>\n" +
" <shw:Hello xmlns:shw=\"http://www.jcommerce.net/soap/ns/SOAPHelloWorld\">\n" +
" <shw:Myname>Tony</shw:Myname>\n" +
" </shw:Hello>\n" +
" </soapenv:Header>\n" +
" <soapenv:Body>\n" +
"<shw:Address shw:t='test' xmlns:shw=\"http://www.jcommerce.net/soap/ns/SOAPHelloWorld\">\n" +
"<shw:City>GENT</shw:City>\n" +
"</shw:Address>\n" +
"</soapenv:Body>\n" +
"</soapenv:Envelope>";
private static final String XML_INPUT_1 = "<root><a><!-- this is a test with a comment node --></a></root>";
@Validated @Test
public void testEnvelope() throws Exception {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage smsg =
mf.createMessage(new MimeHeaders(),
new ByteArrayInputStream(XML_STRING.getBytes()));
SOAPPart sp = smsg.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
assertTrue(se != null);
// validate the body
final SOAPBody body = sp.getEnvelope().getBody();
validateBody(body.getChildElements());
}
@Validated @Test
public void testDetachHeader() throws Exception {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage smsg =
mf.createMessage(new MimeHeaders(),
new ByteArrayInputStream(XML_STRING.getBytes()));
SOAPPart sp = smsg.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
assertTrue(se != null);
SOAPHeader header = se.getHeader();
assertNotNull(header);
header.detachNode();
assertNull(se.getHeader());
assertNull(smsg.getSOAPHeader());
}
@Validated @Test
public void testDetachBody() {
try {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage smsg =
mf.createMessage(new MimeHeaders(),
new ByteArrayInputStream(XML_STRING.getBytes()));
SOAPPart sp = smsg.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
try {
se.addBody();
fail("Expected Exception did not occur");
} catch (SOAPException e) {
assertTrue(true);
}
se.getBody().detachNode();
assertNull(se.getBody());
try {
se.addBody();
} catch (SOAPException e) {
e.printStackTrace();
fail("Unexpected Exception occurred.");
}
} catch (Exception e) {
e.printStackTrace();
fail("Unexpected Exception : " + e);
}
}
@Validated @Test
public void testEnvelope2() throws Exception {
MessageFactory mf = MessageFactory.newInstance();
final ByteArrayInputStream baIS = new ByteArrayInputStream(XML_STRING.getBytes());
final MimeHeaders mimeheaders = new MimeHeaders();
mimeheaders.addHeader("Content-Type", "text/xml");
SOAPMessage smsg =
mf.createMessage(mimeheaders, baIS);
SOAPEnvelope envelope = smsg.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();
assertTrue(body != null);
}
// TODO: This test fails due to some issues in OM. Needs to be added to the test suite
// that issue is fixed
public void _testEnvelopeWithLeadingComment() throws Exception {
String soapMessageWithLeadingComment =
"<?xml version='1.0' encoding='UTF-8'?>" +
"<!-- Comment -->" +
"<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" +
"<env:Body><echo><arg0>Hello</arg0></echo></env:Body>" +
"</env:Envelope>";
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message =
factory.createMessage(new MimeHeaders(),
new ByteArrayInputStream(
soapMessageWithLeadingComment.getBytes()));
SOAPPart part = message.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
message.writeTo(System.out);
assertTrue(envelope != null);
assertTrue(envelope.getBody() != null);
}
@Validated @Test
public void testEnvelopeWithCommentInEnvelope() throws Exception {
String soapMessageWithLeadingComment =
"<?xml version='1.0' encoding='UTF-8'?>\n" +
"<soapenv:Envelope xmlns='http://somewhere.com/html'\n" +
" xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'\n" +
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'\n" +
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n" +
"<!-- Comment -->" +
" <soapenv:Body>\n" +
" <echo><arg0>Hello</arg0></echo>" +
// " <t:echo xmlns:t='http://test.org/Test'><t:arg0>Hello</t:arg0></t:echo>" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>";
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message =
factory.createMessage(new MimeHeaders(),
new ByteArrayInputStream(
soapMessageWithLeadingComment.getBytes()));
SOAPPart part = message.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
assertTrue(envelope != null);
assertTrue(envelope.getBody() != null);
}
@Validated @Test
public void testEnvelopeWithCommentInBody() throws Exception {
String soapMessageWithLeadingComment =
"<?xml version='1.0' encoding='UTF-8'?>\n" +
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'\n" +
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'\n" +
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n" +
" <soapenv:Body>\n" +
"<!-- Comment -->" +
// " <echo><arg0>Hello</arg0></echo>" +
" <t:echo xmlns:t='http://test.org/Test'><t:arg0>Hello</t:arg0></t:echo>" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>";
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message =
factory.createMessage(new MimeHeaders(),
new ByteArrayInputStream(
soapMessageWithLeadingComment.getBytes()));
SOAPPart part = message.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
assertTrue(envelope != null);
assertTrue(envelope.getBody() != null);
}
@Validated @Test
public void testEnvelopeWithComments() throws Exception {
String soapMessageWithLeadingComment =
"<?xml version='1.0' encoding='UTF-8'?>\n" +
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'\n" +
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'\n" +
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n" +
" <soapenv:Header>\n" +
"<!-- Comment -->" +
" <shw:Hello xmlns:shw=\"http://www.jcommerce.net/soap/ns/SOAPHelloWorld\">\n" +
"<!-- Comment -->" +
" <shw:Myname><!-- Comment -->Tony</shw:Myname>\n" +
" </shw:Hello>\n" +
" </soapenv:Header>\n" +
" <soapenv:Body>\n" +
"<!-- Comment -->" +
" <t:echo xmlns:t='http://test.org/Test'><t:arg0>Hello</t:arg0></t:echo>" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>";
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message =
factory.createMessage(new MimeHeaders(),
new ByteArrayInputStream(
soapMessageWithLeadingComment.getBytes()));
SOAPPart part = message.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
assertTrue(envelope != null);
assertTrue(envelope.getBody() != null);
}
public void _testFaults() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
assertFalse(body.hasFault());
SOAPFault soapFault = body.addFault();
soapFault.setFaultString("myFault");
soapFault.setFaultCode("CODE");
assertTrue(body.hasFault());
assertNotNull(body.getFault());
assertSame(soapFault, body.getFault());
assertEquals("myFault", soapFault.getFaultString());
assertEquals("CODE", soapFault.getFaultCode());
}
public void _testFaults2() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
SOAPFault fault = body.addFault();
assertTrue(body.getFault() != null);
Detail d1 = fault.addDetail();
Name name = envelope.createName("GetLastTradePrice", "WOMBAT",
"http://www.wombat.org/trader");
d1.addDetailEntry(name);
Detail d2 = fault.getDetail();
assertTrue(d2 != null);
Iterator i = d2.getDetailEntries();
assertTrue(getIteratorCount(i) == 1);
i = d2.getDetailEntries();
while (i.hasNext()) {
DetailEntry de = (DetailEntry)i.next();
assertEquals(de.getElementName(), name);
}
}
@Validated @Test
public void testHeaderElements() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPHeader header = envelope.getHeader();
SOAPHeaderElement headerEle = header.addHeaderElement(envelope.createName("foo1",
"f1",
"foo1-URI"));
headerEle.setActor("actor-URI");
headerEle.setMustUnderstand(true);
Iterator iterator = header.extractHeaderElements("actor-URI");
int cnt = 0;
while (iterator.hasNext()) {
cnt++;
SOAPHeaderElement resultHeaderEle = (SOAPHeaderElement)iterator.next();
assertEquals(headerEle.getActor(), resultHeaderEle.getActor());
assertEquals(resultHeaderEle.getMustUnderstand(), headerEle.getMustUnderstand());
}
assertTrue(cnt == 1);
iterator = header.extractHeaderElements("actor-URI");
assertTrue(!iterator.hasNext());
}
@Validated @Test
public void testText() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
Iterator iStart = body.getChildElements();
int countStart = getIteratorCount(iStart);
final String bodyText = "This is the body text";
SOAPElement se = body.addChildElement("Child");
assertTrue(se != null);
SOAPElement soapElement = se.addTextNode(bodyText);
assertEquals(bodyText, soapElement.getValue());
Iterator i = body.getChildElements();
int count = getIteratorCount(i);
assertTrue(count == countStart + 1);
}
@Validated @Test
public void testNonCommentText() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement se = body.addChildElement("Child");
se.addTextNode("This is text");
Iterator iterator = se.getChildElements();
Object o = null;
while (iterator.hasNext()) {
o = iterator.next();
if (o instanceof Text) {
break;
}
}
assertTrue(o instanceof Text);
Text t = (Text)o;
assertTrue(!t.isComment());
}
@Validated @Test
public void testCommentText() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
SOAPElement se = body.addChildElement("Child");
se.addTextNode("<!-- This is a comment -->");
Iterator iterator = se.getChildElements();
Node n = null;
while (iterator.hasNext()) {
n = (Node)iterator.next();
if (n instanceof Text) {
break;
}
}
assertTrue(n instanceof Text);
Text t = (Text)n;
assertTrue(t.isComment());
}
@Validated @Test
public void testAttributes() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
Name name1 = envelope.createName("MyAttr1");
String value1 = "MyValue1";
Name name2 = envelope.createName("MyAttr2");
String value2 = "MyValue2";
Name name3 = envelope.createName("MyAttr3");
String value3 = "MyValue3";
body.addAttribute(name1, value1);
body.addAttribute(name2, value2);
body.addAttribute(name3, value3);
Iterator iterator = body.getAllAttributes();
assertTrue(getIteratorCount(iterator) == 3);
iterator = body.getAllAttributes();
boolean foundName1 = false;
boolean foundName2 = false;
boolean foundName3 = false;
while (iterator.hasNext()) {
Name name = (Name)iterator.next();
if (name.equals(name1)) {
foundName1 = true;
assertEquals(value1, body.getAttributeValue(name));
} else if (name.equals(name2)) {
foundName2 = true;
assertEquals(value2, body.getAttributeValue(name));
} else if (name.equals(name3)) {
foundName3 = true;
assertEquals(value3, body.getAttributeValue(name));
}
}
assertTrue(foundName1 && foundName2 && foundName3);
}
@Validated @Test
public void testAttributes2() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
Name name1 = envelope.createName("MyAttr1", "att", "http://test.com/Attr");
String value1 = "MyValue1";
Name name2 = envelope.createName("MyAttr2");
String value2 = "MyValue2";
Name name3 = envelope.createName("MyAttr3");
String value3 = "MyValue3";
body.addAttribute(name1, value1);
body.addAttribute(name2, value2);
body.addAttribute(name3, value3);
Iterator iterator = body.getAllAttributes();
assertTrue(getIteratorCount(iterator) == 3);
iterator = body.getAllAttributes();
boolean foundName1 = false;
boolean foundName2 = false;
boolean foundName3 = false;
while (iterator.hasNext()) {
Name name = (Name)iterator.next();
if (name.equals(name1)) {
foundName1 = true;
assertEquals(value1, body.getAttributeValue(name));
} else if (name.equals(name2)) {
foundName2 = true;
assertEquals(value2, body.getAttributeValue(name));
} else if (name.equals(name3)) {
foundName3 = true;
assertEquals(value3, body.getAttributeValue(name));
}
}
assertTrue(foundName1 && foundName2 && foundName3);
}
@Validated @Test
public void testAttributes3() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
SOAPBody body = envelope.getBody();
Name name1 = envelope.createName("MyAttr1", "att", "http://test.com/Attr");
String value1 = "MyValue1";
Name name2 = envelope.createName("MyAttr2", "att", "http://test.com/Attr");
String value2 = "MyValue2";
Name name3 = envelope.createName("MyAttr3", "att", "http://test.com/Attr");
String value3 = "MyValue3";
body.addAttribute(name1, value1);
body.addAttribute(name2, value2);
body.addAttribute(name3, value3);
Iterator iterator = body.getAllAttributes();
assertTrue(getIteratorCount(iterator) == 3);
iterator = body.getAllAttributes();
boolean foundName1 = false;
boolean foundName2 = false;
boolean foundName3 = false;
while (iterator.hasNext()) {
Name name = (Name)iterator.next();
if (name.equals(name1)) {
foundName1 = true;
assertEquals(value1, body.getAttributeValue(name));
} else if (name.equals(name2)) {
foundName2 = true;
assertEquals(value2, body.getAttributeValue(name));
} else if (name.equals(name3)) {
foundName3 = true;
assertEquals(value3, body.getAttributeValue(name));
}
}
assertTrue(foundName1 && foundName2 && foundName3);
}
@Validated @Test
public void testAddHeader() {
try {
SOAPEnvelope envelope = getSOAPEnvelope();
try {
envelope.addHeader();
fail("Did not get expected SOAPException");
} catch (SOAPException e) {
assertTrue("Got expected SOAPException", true);
}
envelope.getHeader().detachNode();
assertNull(envelope.getHeader());
SOAPHeader myhdr;
try {
myhdr = envelope.addHeader();
assertNotNull("SOAPHeader return value is null", myhdr);
} catch (SOAPException e) {
fail("Unexpected SOAPException : " + e);
}
} catch (Exception e) {
e.printStackTrace();
fail("Unexpected Exception : " + e);
}
}
private SOAPEnvelope getSOAPEnvelope() throws Exception {
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message = factory.createMessage();
return message.getSOAPPart().getEnvelope();
}
private int getIteratorCount(java.util.Iterator i) {
int count = 0;
while (i.hasNext()) {
count++;
i.next();
}
return count;
}
private void validateBody(Iterator iter) {
while (iter.hasNext()) {
final Object obj = iter.next();
if (obj instanceof Text) {
final String data = ((Text)obj).getData();
assertTrue("\n".equals(data) || "GENT".equals(data));
} else {
final SOAPElement soapElement = (SOAPElement)obj;
final Iterator attIter = soapElement.getAllAttributes();
while (attIter.hasNext()) {
final Object o = attIter.next();
assertEquals("test", soapElement.getAttributeValue((Name)o));
}
final Iterator childElementIter = soapElement.getChildElements();
if (childElementIter == null) {
return;
}
validateBody(childElementIter);
}
}
}
@Validated @Test
public void testSetEncodingStyle() throws Exception {
SOAPEnvelope envelope = getSOAPEnvelope();
envelope.setEncodingStyle("http://example.com/MyEncodings");
assertNotNull(envelope.getEncodingStyle());
assertEquals("http://example.com/MyEncodings",envelope.getEncodingStyle());
}
@Validated @Test
public void testElementAfterBody() throws Exception {
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage message = factory.createMessage();
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
try {
//SOAP1.2 does not allow trailing blocks after the Body
//Call SOAPEnvelope.addChildElement() and (expect SOAPException)
Name elementAfterBody = envelope.createName("AfterBody", "e", "some-uri");
envelope.addChildElement(elementAfterBody);
fail("Did not throw expected SOAPException");
} catch (SOAPException e) {
//Did throw expected SOAPException"
} catch (Exception e) {
fail("Unexpected Exception: " + e.getMessage());
}
}
@Validated @Test
public void testTransform() throws Exception {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPBody body = message.getSOAPBody();
Source source = new DOMSource(createDocument());
Result result = new DOMResult(body);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(source, result);
assertEquals(1, body.getChildNodes().getLength());
Iterator iter = body.getChildElements();
assertTrue(iter.hasNext());
Object obj = iter.next();
assertTrue(obj instanceof SOAPBodyElement);
SOAPElement soapElement = (SOAPElement)obj;
assertEquals("http://example.com", soapElement.getNamespaceURI());
assertEquals("GetLastTradePrice", soapElement.getLocalName());
iter = soapElement.getChildElements();
assertTrue(iter.hasNext());
obj = iter.next();
assertTrue(obj instanceof SOAPElement);
soapElement = (SOAPElement)obj;
assertNull(soapElement.getNamespaceURI());
assertEquals("symbol", soapElement.getLocalName());
assertFalse(iter.hasNext());
iter = soapElement.getChildElements();
assertTrue(iter.hasNext());
obj = iter.next();
assertTrue(obj instanceof Text);
Text text = (Text)obj;
assertEquals("DEF", text.getData());
assertFalse(iter.hasNext());
}
private Element createDocument() throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element getLastTradePrice = document.createElementNS("http://example.com", "m:GetLastTradePrice");
Element symbol = document.createElement("symbol");
getLastTradePrice.appendChild(symbol);
org.w3c.dom.Text def = document.createTextNode("DEF");
symbol.appendChild(def);
document.appendChild(getLastTradePrice);
return getLastTradePrice;
}
@Validated @Test
public void testTransformWithComments() throws Exception {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPBody body = message.getSOAPBody();
Source source = new SAXSource(new InputSource(new StringReader(XML_INPUT_1)));
DOMResult result = new DOMResult(body);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(source, result);
// test DOM
org.w3c.dom.Node rootNode = result.getNode();
org.w3c.dom.Node node = rootNode.getFirstChild();
assertTrue(node instanceof Element);
assertEquals("root", node.getNodeName());
node = node.getFirstChild();
assertTrue(node instanceof Element);
assertEquals("a", node.getNodeName());
node = node.getFirstChild();
assertTrue(node instanceof Comment);
assertEquals("this is a test with a comment node", node.getNodeValue().trim());
// test SAAJ
assertEquals(1, body.getChildNodes().getLength());
Iterator iter = body.getChildElements();
assertTrue(iter.hasNext());
Object obj = iter.next();
assertTrue(obj instanceof SOAPBodyElement);
SOAPElement soapElement = (SOAPElement)obj;
assertEquals("root", soapElement.getLocalName());
iter = soapElement.getChildElements();
assertTrue(iter.hasNext());
obj = iter.next();
assertTrue(obj instanceof SOAPElement);
soapElement = (SOAPElement)obj;
assertEquals("a", soapElement.getLocalName());
assertFalse(iter.hasNext());
iter = soapElement.getChildElements();
assertTrue(iter.hasNext());
obj = iter.next();
assertTrue(obj instanceof Text);
Text text = (Text)obj;
assertTrue(text.isComment());
assertEquals("this is a test with a comment node", text.getData().trim());
assertFalse(iter.hasNext());
}
}