/* * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package stream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Iterator; import javax.xml.namespace.NamespaceContext; import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.util.StreamReaderDelegate; import org.testng.Assert; import org.testng.annotations.Listeners; import org.testng.annotations.Test; /* * @test * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest * @run testng/othervm -DrunSecMngr=true stream.StreamReaderDelegateTest * @run testng/othervm stream.StreamReaderDelegateTest * @summary Test StreamReaderDelegate. */ @Listeners({jaxp.library.FilePolicy.class}) public class StreamReaderDelegateTest { /** * Tested xml file looks as below: <?xml version="1.0" standalone="no" ?> * <ns1:foo attr1="defaultAttr1" ns1:attr1="ns1Attr1" ns2:attr1="ns2Attr1" * attr2="defaultAttr2" attr3="defaultAttr3" xmlns:ns1="http://ns1.java.com" * xmlns:ns2="http://ns2.java.com"> <!--description--> content text * <![CDATA[<greeting>Hello</greeting>]]> other content </ns1:foo> **/ @Test public void testAttribute() { StreamReaderDelegate delegate = null; try { System.out.println("===in testAttribute()==="); XMLInputFactory ifac = XMLInputFactory.newFactory(); XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("testfile1.xml").getFile()))); delegate = new StreamReaderDelegate(reader); Assert.assertTrue(delegate.standaloneSet()); Assert.assertFalse(delegate.isStandalone()); while (delegate.hasNext()) { delegate.next(); if (delegate.getEventType() == XMLStreamConstants.START_ELEMENT || delegate.getEventType() == XMLStreamConstants.ATTRIBUTE) { if (delegate.getLocalName().equals("foo")) { Assert.assertTrue(delegate.getAttributeCount() == 5); Assert.assertTrue(delegate.getAttributeType(1) == "CDATA"); Assert.assertTrue(delegate.getAttributeValue(0).equals("defaultAttr1")); Assert.assertTrue(delegate.getAttributeValue(delegate.getAttributeCount() - 2).equals("defaultAttr2")); Assert.assertTrue(delegate.getAttributeValue(delegate.getAttributeCount() - 1).equals("defaultAttr3")); Assert.assertTrue(delegate.getAttributeValue("http://ns1.java.com", "attr1").equals("ns1Attr1")); Assert.assertTrue(delegate.getAttributeValue("http://ns2.java.com", "attr1").equals("ns2Attr1")); Assert.assertTrue(delegate.getAttributeValue(null, "attr2").equals("defaultAttr2")); Assert.assertTrue(delegate.getAttributeValue(null, "attr3").equals("defaultAttr3")); Assert.assertTrue(delegate.getAttributeNamespace(0) == null); Assert.assertTrue(delegate.getAttributeNamespace(1).equals("http://ns1.java.com")); Assert.assertTrue(delegate.getAttributePrefix(1).equals("ns1")); Assert.assertTrue(delegate.getAttributeName(1).toString() .equals("{" + delegate.getAttributeNamespace(1) + "}" + delegate.getAttributeLocalName(1))); Assert.assertTrue(delegate.getAttributeLocalName(1).equals("attr1")); // negative test. Should return null for out of // attribute array index Assert.assertTrue(delegate.getAttributeNamespace(delegate.getAttributeCount()) == null); Assert.assertTrue(delegate.getAttributePrefix(delegate.getAttributeCount()) == null); Assert.assertTrue(delegate.getAttributeName(delegate.getAttributeCount()) == null); Assert.assertTrue(delegate.getAttributeLocalName(delegate.getAttributeCount()) == null); Assert.assertTrue(delegate.getAttributeType(delegate.getAttributeCount()) == null); } } else { try { delegate.getAttributeCount(); } catch (IllegalStateException e) { System.out.println("expected exception for incorrect event type"); } } } } catch (FileNotFoundException e) { e.printStackTrace(); Assert.fail("FileNotFoundException in testAttribute()"); } catch (XMLStreamException e) { e.printStackTrace(); System.out.println(delegate.getLocation()); Assert.fail("XMLStreamException in testAttribute()"); } catch (FactoryConfigurationError e) { e.printStackTrace(); Assert.fail("FactoryConfigurationError in testAttribute()"); } finally { try { delegate.close(); } catch (XMLStreamException e) { e.printStackTrace(); Assert.fail("XMLStreamException in testAttribute()"); } } } /** * Tested xml file looks as below: <?xml version="1.0" encoding="UTF-8"?> * <ns1:foo xmlns:ns="http://ns1.java.com" xmlns:ns1="http://ns1.java.com" * xmlns:ns2="http://ns2.java.com" > <!--description-->content text * <![CDATA[<greeting>Hello</greeting>]]> other content </ns1:foo> **/ @Test public void testNamespace() { StreamReaderDelegate delegate = null; try { System.out.println("===in testNamespace()==="); XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader( new FileInputStream(new File(getClass().getResource("testfile2.xml").getFile()))); delegate = new StreamReaderDelegate(); delegate.setParent(reader); while (delegate.hasNext()) { delegate.next(); if (delegate.getEventType() == XMLStreamConstants.START_ELEMENT || delegate.getEventType() == XMLStreamConstants.ATTRIBUTE) { if (delegate.getName().getLocalPart().equals("foo")) { Assert.assertTrue(("{" + delegate.getNamespaceURI(delegate.getPrefix()) + "}" + delegate.getLocalName()).equals(delegate.getName() .toString())); System.out.println(delegate.getLocation()); Assert.assertTrue(delegate.getNamespaceCount() == 3); Assert.assertTrue(delegate.getNamespaceURI().equals("http://ns1.java.com")); Assert.assertTrue(delegate.getNamespaceURI(2).equals("http://ns2.java.com")); Assert.assertTrue(delegate.getNamespaceURI("ns").equals("http://ns1.java.com")); Assert.assertTrue(delegate.getNamespacePrefix(1).equals("ns1")); NamespaceContext nsCtx = delegate.getNamespaceContext(); nsCtx.getNamespaceURI("ns"); Iterator prefixes = nsCtx.getPrefixes("http://ns1.java.com"); boolean hasns = false; boolean hasns1 = false; while (prefixes.hasNext()) { String prefix = (String) prefixes.next(); if (prefix.equals("ns")) { hasns = true; } else if (prefix.equals("ns1")) { hasns1 = true; } } Assert.assertTrue(hasns && hasns1); } } } } catch (FileNotFoundException e) { e.printStackTrace(); Assert.fail("FileNotFoundException in testNamespace()"); } catch (XMLStreamException e) { e.printStackTrace(); System.out.println(delegate.getLocation()); Assert.fail("XMLStreamException in testNamespace()"); } catch (FactoryConfigurationError e) { e.printStackTrace(); Assert.fail("FactoryConfigurationError in testNamespace()"); } finally { try { delegate.close(); } catch (XMLStreamException e) { e.printStackTrace(); Assert.fail("XMLStreamException in testNamespace()"); } } } /** * <?xml version="1.0" encoding="utf-8" ?> <ns1:foo * xmlns:ns1="http://ns1.java.com" xmlns:ns2="http://ns2.java.com"> * <!--description--> content text <![CDATA[<greeting>Hello</greeting>]]> * other content </ns1:foo> **/ @Test public void testText() { String property = "javax.xml.stream.isCoalescing"; System.out.println("===in testText()===="); StreamReaderDelegate delegate = null; try { XMLInputFactory ifac = XMLInputFactory.newFactory(); ifac.setProperty(property, Boolean.TRUE); XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("testfile3.xml").getFile())), "iso8859-1"); delegate = new StreamReaderDelegate(); delegate.setParent(reader); Assert.assertTrue(delegate.getParent().equals(reader)); Assert.assertTrue(delegate.getProperty(property).equals(Boolean.TRUE)); Assert.assertTrue(delegate.getCharacterEncodingScheme().equalsIgnoreCase("utf-8")); Assert.assertTrue(delegate.getEncoding().equalsIgnoreCase("iso8859-1")); Assert.assertTrue(delegate.getVersion().equals("1.0")); while (delegate.hasNext()) { delegate.next(); if (delegate.getEventType() == XMLStreamConstants.CHARACTERS) { char[] target1 = new char[delegate.getTextLength()]; delegate.getTextCharacters(delegate.getTextStart(), target1, 0, target1.length); char[] target2 = delegate.getTextCharacters(); Assert.assertTrue(delegate.getText().trim().equals(new String(target1).trim())); Assert.assertTrue(delegate.getText().trim().equals(new String(target2).trim())); } } } catch (FileNotFoundException e) { e.printStackTrace(); Assert.fail("FileNotFoundException in testText()"); } catch (XMLStreamException e) { e.printStackTrace(); System.out.println(delegate.getLocation()); Assert.fail("XMLStreamException in testText()"); } catch (FactoryConfigurationError e) { e.printStackTrace(); Assert.fail("FactoryConfigurationError in testText()"); } finally { try { delegate.close(); } catch (XMLStreamException e) { e.printStackTrace(); Assert.fail("XMLStreamException in testText()"); } } } @Test public void testWhiteSpace() { System.out.println("===in testWhiteSpace()==="); StreamReaderDelegate delegate = null; try { XMLInputFactory ifac = XMLInputFactory.newFactory(); ifac.setProperty("javax.xml.stream.isCoalescing", Boolean.TRUE); XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("testfile4.xml").getFile()))); delegate = new StreamReaderDelegate(); delegate.setParent(reader); while (delegate.hasNext()) { int i = delegate.next(); switch (i) { case XMLStreamConstants.CHARACTERS: { Assert.assertTrue(delegate.isCharacters()); Assert.assertTrue(delegate.hasText()); Assert.assertTrue(delegate.isWhiteSpace()); break; } case XMLStreamConstants.START_ELEMENT: { Assert.assertTrue(delegate.isStartElement()); Assert.assertTrue(delegate.isAttributeSpecified(0)); Assert.assertTrue(delegate.hasName()); delegate.require(XMLStreamConstants.START_ELEMENT, delegate.getNamespaceURI(), delegate.getLocalName()); break; } case XMLStreamConstants.END_ELEMENT: { Assert.assertTrue(delegate.isEndElement()); Assert.assertTrue(delegate.hasName()); delegate.require(XMLStreamConstants.END_ELEMENT, delegate.getNamespaceURI(), delegate.getLocalName()); break; } } } } catch (FileNotFoundException e) { e.printStackTrace(); Assert.fail("FileNotFoundException in testWhiteSpace()"); } catch (XMLStreamException e) { e.printStackTrace(); System.out.println(delegate.getLocation()); Assert.fail("XMLStreamException in testWhiteSpace()"); } catch (FactoryConfigurationError e) { e.printStackTrace(); Assert.fail("FactoryConfigurationError in testWhiteSpace()"); } finally { try { delegate.close(); } catch (XMLStreamException e) { e.printStackTrace(); Assert.fail("XMLStreamException in testWhitespace()"); } } } @Test public void testElementText() { System.out.println("===in testElementText()==="); StreamReaderDelegate delegate = null; try { XMLInputFactory ifac = XMLInputFactory.newFactory(); XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile()))); delegate = new StreamReaderDelegate(); delegate.setParent(reader); while (delegate.hasNext()) { if (delegate.getEventType() == XMLStreamConstants.START_ELEMENT) { if (delegate.getLocalName().equals("name") || delegate.getLocalName().equals("price")) { System.out.println(delegate.getElementText()); } delegate.nextTag(); } else { delegate.next(); } } } catch (FileNotFoundException e) { e.printStackTrace(); Assert.fail("FileNotFoundException in testElementText()"); } catch (XMLStreamException e) { e.printStackTrace(); System.out.println(delegate.getLocation()); Assert.fail("XMLStreamException in testElementText()"); } catch (FactoryConfigurationError e) { e.printStackTrace(); Assert.fail("FactoryConfigurationError in testElementText()"); } finally { try { delegate.close(); } catch (XMLStreamException e) { e.printStackTrace(); Assert.fail("XMLStreamException in testElementText()"); } } } @Test public void testPITargetAndData() { System.out.println("===in testPITargetAndData()==="); StreamReaderDelegate delegate = null; try { XMLInputFactory xif = XMLInputFactory.newInstance(); String PITarget = "soffice"; String PIData = "WebservicesArchitecture"; String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<?" + PITarget + " " + PIData + "?>" + "<foo></foo>"; InputStream is = new java.io.ByteArrayInputStream(xml.getBytes()); XMLStreamReader sr = xif.createXMLStreamReader(is); delegate = new StreamReaderDelegate(sr); while (delegate.hasNext()) { int eventType = delegate.next(); if (eventType == XMLStreamConstants.PROCESSING_INSTRUCTION) { String target = delegate.getPITarget(); String data = delegate.getPIData(); Assert.assertTrue(target.equals(PITarget)); Assert.assertTrue(data.equals(PIData)); } } } catch (Exception ex) { ex.printStackTrace(); Assert.fail("Exception in testPITargetAndData()"); } finally { try { delegate.close(); } catch (XMLStreamException e) { e.printStackTrace(); Assert.fail("XMLStreamException in testPITargetAndData()"); } } } }