TestExternalEntityRef.java
package stax2.stream;
import com.ctc.wstx.api.WstxInputProperties;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;
import stax2.BaseStax2Test;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLResolver;
import javax.xml.stream.XMLStreamException;
/**
* Test entities in round-trip mode
*
* @author Guillaume Nodet
*/
public class TestExternalEntityRef
extends BaseStax2Test
{
private static final String TEST_BASIC = "<project>" +
"<?foo?>" +
"<name>œ</name>" +
"</project>";
public void testEntityRef()
throws XMLStreamException {
XMLInputFactory2 f = getInputFactory();
f.configureForRoundTripping();
XMLStreamReader2 sr = constructStreamReader(f, TEST_BASIC);
assertEquals(START_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
assertEquals(PROCESSING_INSTRUCTION, sr.next());
assertEquals("foo", sr.getPITarget());
assertEquals(START_ELEMENT, sr.next());
assertEquals("name", sr.getLocalName());
assertEquals(ENTITY_REFERENCE, sr.next());
assertEquals("oelig", sr.getLocalName());
}
private static final String TEST_DTD = "<!DOCTYPE foo [\n" +
" <!ENTITY desc SYSTEM \"file:desc.xml\">\n" +
" ]>\n" +
"<project>" +
"&desc;" +
"</project>";
public void testWithDtd()
throws XMLStreamException {
XMLInputFactory2 f = getInputFactory();
f.configureForRoundTripping();
XMLStreamReader2 sr = constructStreamReader(f, TEST_DTD);
assertEquals(DTD, sr.next());
assertEquals(SPACE, sr.next());
assertEquals(START_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
assertEquals(ENTITY_REFERENCE, sr.next());
assertEquals("desc", sr.getLocalName());
assertEquals(END_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
}
public void testWithDtdExpand()
throws XMLStreamException {
XMLInputFactory2 f = getInputFactory();
f.configureForRoundTripping();
f.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, true);
f.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, true);
f.setProperty(WstxInputProperties.P_ENTITY_RESOLVER, new XMLResolver() {
@Override
public Object resolveEntity(String publicID, String systemID, String baseURI, String namespace) throws XMLStreamException {
if ("file:desc.xml".equals(systemID)) {
return "<?xml version='1.0' encoding='UTF-8'?><description>foo</description>";
}
return null;
}
});
XMLStreamReader2 sr = constructStreamReader(f, TEST_DTD);
assertEquals(DTD, sr.next());
assertEquals(SPACE, sr.next());
assertEquals(START_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
assertEquals(ENTITY_REFERENCE, sr.next());
assertEquals("desc", sr.getLocalName());
assertEquals(START_ELEMENT, sr.next());
assertEquals("description", sr.getLocalName());
assertEquals(CHARACTERS, sr.next());
assertEquals("foo", sr.getText());
assertEquals(END_ELEMENT, sr.next());
assertEquals("description", sr.getLocalName());
assertEquals(END_ELEMENT, sr.next());
assertEquals("project", sr.getLocalName());
}
}