1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 package stream.XMLStreamWriterTest; 25 26 import java.io.StringWriter; 27 28 import javax.xml.stream.XMLOutputFactory; 29 import javax.xml.stream.XMLStreamReader; 30 import javax.xml.stream.XMLStreamWriter; 31 32 import org.testng.Assert; 33 import org.testng.annotations.Listeners; 34 import org.testng.annotations.Test; 35 36 import util.BaseStAXUT; 37 38 /* 39 * @test 40 * @bug 6675332 41 * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest 42 * @run testng/othervm -DrunSecMngr=true stream.XMLStreamWriterTest.Bug6675332Test 43 * @run testng/othervm stream.XMLStreamWriterTest.Bug6675332Test 44 * @summary Test XMLStreamWriter writeAttribute when IS_REPAIRING_NAMESPACES is true. 45 */ 46 @Listeners({jaxp.library.BasePolicy.class}) 47 public class Bug6675332Test extends BaseStAXUT { 48 49 private static final XMLOutputFactory XML_OUTPUT_FACTORY = XMLOutputFactory.newInstance(); 50 51 @Test 52 public void test() { 53 final String URL_P1 = "http://p1.org"; 54 final String URL_DEF = "urn:default"; 55 final String ATTR_VALUE = "'value\""; 56 final String ATTR_VALUE2 = "<tag>"; 57 58 final String TEXT = " some text\n"; 59 XML_OUTPUT_FACTORY.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE); 60 61 final String EXPECTED_OUTPUT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root></root>"; 62 XMLStreamWriter w = null; 63 StringWriter strw = new StringWriter(); 64 try { 65 w = XML_OUTPUT_FACTORY.createXMLStreamWriter(strw); 66 67 w.writeStartDocument(); 68 69 /* 70 * Calling this method should be optional; but if we call it, 71 * exceptation is that it does properly bind the prefix and URL as 72 * the 'preferred' combination. In this case we'll just try to make 73 * URL bound as the default namespace 74 */ 75 w.setDefaultNamespace(URL_DEF); 76 w.writeStartElement(URL_DEF, "test"); // root 77 78 /* 79 * And let's further make element and attribute(s) belong to that 80 * same namespace 81 */ 82 w.writeStartElement("", "leaf", URL_DEF); // 1st leaf 83 w.writeAttribute("", URL_DEF, "attr", ATTR_VALUE); 84 w.writeAttribute(URL_DEF, "attr2", ATTR_VALUE); 85 w.writeEndElement(); 86 87 // w.writeEmptyElement("", "leaf"); // 2nd leaf; in empty/no 88 // namespace! 89 90 w.writeStartElement(URL_DEF, "leaf"); // 3rd leaf 91 // w.writeAttribute("", "attr2", ATTR_VALUE2); // in empty/no 92 // namespace 93 w.writeEndElement(); 94 95 w.writeEndElement(); // root elem 96 w.writeEndDocument(); 97 w.close(); 98 System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\\n"); 99 System.out.println(strw.toString()); 100 101 // And then let's parse and verify it all: 102 // System.err.println("testAttributes: doc = '"+strw+"'"); 103 104 XMLStreamReader sr = constructNsStreamReader(strw.toString()); 105 assertTokenType(START_DOCUMENT, sr.getEventType(), sr); 106 107 // root element 108 assertTokenType(START_ELEMENT, sr.next(), sr); 109 Assert.assertEquals("test", sr.getLocalName()); 110 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 111 112 // first leaf: 113 assertTokenType(START_ELEMENT, sr.next(), sr); 114 Assert.assertEquals("leaf", sr.getLocalName()); 115 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 116 System.out.println(sr.getAttributeLocalName(0)); 117 System.out.println(sr.getAttributeLocalName(1)); 118 Assert.assertEquals(2, sr.getAttributeCount()); 119 Assert.assertEquals("attr", sr.getAttributeLocalName(0)); 120 121 String uri = sr.getAttributeNamespace(0); 122 if (!URL_DEF.equals(uri)) { 123 Assert.fail("Expected attribute 'attr' to have NS '" + URL_DEF + "', was " + valueDesc(uri) + "; input = '" + strw + "'"); 124 } 125 Assert.assertEquals(ATTR_VALUE, sr.getAttributeValue(0)); 126 assertTokenType(END_ELEMENT, sr.next(), sr); 127 Assert.assertEquals("leaf", sr.getLocalName()); 128 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 129 130 // 2nd/empty leaf 131 /** 132 * assertTokenType(START_ELEMENT, sr.next(), sr); 133 * assertEquals("leaf", sr.getLocalName()); assertNoNsURI(sr); 134 * assertTokenType(END_ELEMENT, sr.next(), sr); assertEquals("leaf", 135 * sr.getLocalName()); assertNoNsURI(sr); 136 */ 137 // third leaf 138 assertTokenType(START_ELEMENT, sr.next(), sr); 139 Assert.assertEquals("leaf", sr.getLocalName()); 140 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 141 142 /* 143 * attr in 3rd leaf, in empty/no namespace assertEquals(1, 144 * sr.getAttributeCount()); assertEquals("attr2", 145 * sr.getAttributeLocalName(0)); 146 * assertNoAttrNamespace(sr.getAttributeNamespace(0)); 147 * assertEquals(ATTR_VALUE2, sr.getAttributeValue(0)); 148 */ 149 assertTokenType(END_ELEMENT, sr.next(), sr); 150 Assert.assertEquals("leaf", sr.getLocalName()); 151 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 152 153 // closing root element 154 assertTokenType(END_ELEMENT, sr.next(), sr); 155 Assert.assertEquals("test", sr.getLocalName()); 156 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 157 158 assertTokenType(END_DOCUMENT, sr.next(), sr); 159 } catch (Exception e) { 160 e.printStackTrace(); 161 Assert.fail(e.toString()); 162 } 163 164 } 165 166 }