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 * @bug 6675332 40 * @summary Test XMLStreamWriter writeAttribute when IS_REPAIRING_NAMESPACES is true. 41 */ 42 @Listeners({jaxp.library.BasePolicy.class}) 43 public class Bug6675332Test extends BaseStAXUT { 44 45 private static final XMLOutputFactory XML_OUTPUT_FACTORY = XMLOutputFactory.newInstance(); 46 47 @Test 48 public void test() { 49 final String URL_P1 = "http://p1.org"; 50 final String URL_DEF = "urn:default"; 51 final String ATTR_VALUE = "'value\""; 52 final String ATTR_VALUE2 = "<tag>"; 53 54 final String TEXT = " some text\n"; 55 XML_OUTPUT_FACTORY.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE); 56 57 final String EXPECTED_OUTPUT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root></root>"; 58 XMLStreamWriter w = null; 59 StringWriter strw = new StringWriter(); 60 try { 61 w = XML_OUTPUT_FACTORY.createXMLStreamWriter(strw); 62 63 w.writeStartDocument(); 64 65 /* 66 * Calling this method should be optional; but if we call it, 67 * exceptation is that it does properly bind the prefix and URL as 68 * the 'preferred' combination. In this case we'll just try to make 69 * URL bound as the default namespace 70 */ 71 w.setDefaultNamespace(URL_DEF); 72 w.writeStartElement(URL_DEF, "test"); // root 73 74 /* 75 * And let's further make element and attribute(s) belong to that 76 * same namespace 77 */ 78 w.writeStartElement("", "leaf", URL_DEF); // 1st leaf 79 w.writeAttribute("", URL_DEF, "attr", ATTR_VALUE); 80 w.writeAttribute(URL_DEF, "attr2", ATTR_VALUE); 81 w.writeEndElement(); 82 83 // w.writeEmptyElement("", "leaf"); // 2nd leaf; in empty/no 84 // namespace! 85 86 w.writeStartElement(URL_DEF, "leaf"); // 3rd leaf 87 // w.writeAttribute("", "attr2", ATTR_VALUE2); // in empty/no 88 // namespace 89 w.writeEndElement(); 90 91 w.writeEndElement(); // root elem 92 w.writeEndDocument(); 93 w.close(); 94 System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\\n"); 95 System.out.println(strw.toString()); 96 97 // And then let's parse and verify it all: 98 // System.err.println("testAttributes: doc = '"+strw+"'"); 99 100 XMLStreamReader sr = constructNsStreamReader(strw.toString()); 101 assertTokenType(START_DOCUMENT, sr.getEventType(), sr); 102 103 // root element 104 assertTokenType(START_ELEMENT, sr.next(), sr); 105 Assert.assertEquals("test", sr.getLocalName()); 106 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 107 108 // first leaf: 109 assertTokenType(START_ELEMENT, sr.next(), sr); 110 Assert.assertEquals("leaf", sr.getLocalName()); 111 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 112 System.out.println(sr.getAttributeLocalName(0)); 113 System.out.println(sr.getAttributeLocalName(1)); 114 Assert.assertEquals(2, sr.getAttributeCount()); 115 Assert.assertEquals("attr", sr.getAttributeLocalName(0)); 116 117 String uri = sr.getAttributeNamespace(0); 118 if (!URL_DEF.equals(uri)) { 119 Assert.fail("Expected attribute 'attr' to have NS '" + URL_DEF + "', was " + valueDesc(uri) + "; input = '" + strw + "'"); 120 } 121 Assert.assertEquals(ATTR_VALUE, sr.getAttributeValue(0)); 122 assertTokenType(END_ELEMENT, sr.next(), sr); 123 Assert.assertEquals("leaf", sr.getLocalName()); 124 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 125 126 // 2nd/empty leaf 127 /** 128 * assertTokenType(START_ELEMENT, sr.next(), sr); 129 * assertEquals("leaf", sr.getLocalName()); assertNoNsURI(sr); 130 * assertTokenType(END_ELEMENT, sr.next(), sr); assertEquals("leaf", 131 * sr.getLocalName()); assertNoNsURI(sr); 132 */ 133 // third leaf 134 assertTokenType(START_ELEMENT, sr.next(), sr); 135 Assert.assertEquals("leaf", sr.getLocalName()); 136 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 137 138 /* 139 * attr in 3rd leaf, in empty/no namespace assertEquals(1, 140 * sr.getAttributeCount()); assertEquals("attr2", 141 * sr.getAttributeLocalName(0)); 142 * assertNoAttrNamespace(sr.getAttributeNamespace(0)); 143 * assertEquals(ATTR_VALUE2, sr.getAttributeValue(0)); 144 */ 145 assertTokenType(END_ELEMENT, sr.next(), sr); 146 Assert.assertEquals("leaf", sr.getLocalName()); 147 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 148 149 // closing root element 150 assertTokenType(END_ELEMENT, sr.next(), sr); 151 Assert.assertEquals("test", sr.getLocalName()); 152 Assert.assertEquals(URL_DEF, sr.getNamespaceURI()); 153 154 assertTokenType(END_DOCUMENT, sr.next(), sr); 155 } catch (Exception e) { 156 e.printStackTrace(); 157 Assert.fail(e.toString()); 158 } 159 160 } 161 162 }