/** * There is no way to enumerate inscope namespaces for XMLStreamReader. That means * namespaces declared in envelope, and body tags need to be computed using their * {@link TagInfoset}s. * * @return array of the even length of the form { prefix0, uri0, prefix1, uri1, ... } */ private String[] getInscopeNamespaces() { NamespaceSupport nss = new NamespaceSupport(); nss.pushContext(); for(int i=0; i < envelopeTag.ns.length; i+=2) { nss.declarePrefix(envelopeTag.ns[i], envelopeTag.ns[i+1]); } nss.pushContext(); for(int i=0; i < bodyTag.ns.length; i+=2) { nss.declarePrefix(bodyTag.ns[i], bodyTag.ns[i+1]); } List<String> inscope = new ArrayList<String>(); for( Enumeration en = nss.getPrefixes(); en.hasMoreElements(); ) { String prefix = (String)en.nextElement(); inscope.add(prefix); inscope.add(nss.getURI(prefix)); } return inscope.toArray(new String[inscope.size()]); }
private void buildNamespaceSupport(NamespaceSupport nss, Node node) { if (node==null || node.getNodeType()!=Node.ELEMENT_NODE) { return; } buildNamespaceSupport( nss, node.getParentNode() ); nss.pushContext(); NamedNodeMap atts = node.getAttributes(); for( int i=0; i<atts.getLength(); i++ ) { Attr a = (Attr)atts.item(i); if( "xmlns".equals(a.getPrefix()) ) { nss.declarePrefix( a.getLocalName(), a.getValue() ); continue; } if( "xmlns".equals(a.getName()) ) { nss.declarePrefix( "", a.getValue() ); //continue; } } }
/** * Adds inscope namespaces as attributes to <xsd:schema> fragment nodes. * * @param nss namespace context info * @param elem that is patched with inscope namespaces */ private @Nullable void patchDOMFragment(NamespaceSupport nss, Element elem) { NamedNodeMap atts = elem.getAttributes(); for( Enumeration en = nss.getPrefixes(); en.hasMoreElements(); ) { String prefix = (String)en.nextElement(); for( int i=0; i<atts.getLength(); i++ ) { Attr a = (Attr)atts.item(i); if (!"xmlns".equals(a.getPrefix()) || !a.getLocalName().equals(prefix)) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.log(Level.FINE, "Patching with xmlns:{0}={1}", new Object[]{prefix, nss.getURI(prefix)}); } elem.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns:"+prefix, nss.getURI(prefix)); } } } }
/** * Recursively visit ancestors and build up {@link NamespaceSupport} oject. */ private void buildNamespaceSupport(NamespaceSupport nss, Node node) { if(node==null || node.getNodeType()!=Node.ELEMENT_NODE) return; buildNamespaceSupport( nss, node.getParentNode() ); nss.pushContext(); NamedNodeMap atts = node.getAttributes(); for( int i=0; i<atts.getLength(); i++ ) { Attr a = (Attr)atts.item(i); if( "xmlns".equals(a.getPrefix()) ) { nss.declarePrefix( a.getLocalName(), a.getValue() ); continue; } if( "xmlns".equals(a.getName()) ) { nss.declarePrefix( "", a.getValue() ); continue; } } }
/** * Creates a new instance of XMLDOMwriterImpl * @param result DOMResult object @javax.xml.transform.dom.DOMResult */ public XMLDOMWriterImpl(DOMResult result) { node = result.getNode(); if( node.getNodeType() == Node.DOCUMENT_NODE){ ownerDoc = (Document)node; currentNode = ownerDoc; }else{ ownerDoc = node.getOwnerDocument(); currentNode = node; } getDLThreeMethods(); stringBuffer = new StringBuffer(); needContextPop = new boolean[resizeValue]; namespaceContext = new NamespaceSupport(); }
@Test public void testProcessName() { NamespaceSupport nssupport = new NamespaceSupport(); nssupport.pushContext(); nssupport.declarePrefix("", "http://www.java.com"); nssupport.declarePrefix("dc", "http://www.purl.org/dc"); String[] parts = new String[3]; nssupport.processName("dc:name1", parts, false); Assert.assertTrue(parts[0].equals("http://www.purl.org/dc")); Assert.assertTrue(parts[1].equals("name1")); Assert.assertTrue(parts[2].equals("dc:name1")); nssupport.processName("name2", parts, false); Assert.assertTrue(parts[0].equals("http://www.java.com")); Assert.assertTrue(parts[1].equals("name2")); Assert.assertTrue(parts[2].equals("name2")); }
@Test public void testPopContext() { String[] parts = new String[3]; NamespaceSupport nssupport = new NamespaceSupport(); nssupport.pushContext(); nssupport.declarePrefix("dc", "http://www.purl.org/dc"); Assert.assertEquals(nssupport.getPrefix("http://www.purl.org/dc"), "dc"); nssupport.popContext(); Assert.assertNull(nssupport.getPrefix("http://www.purl.org/dc")); nssupport.processName("dc:name1", parts, false); Assert.assertNull(parts[0]); Assert.assertNull(parts[1]); Assert.assertNull(parts[2]); }
@Test public void testPrefixAndUri4() { NamespaceSupport nssupport = new NamespaceSupport(); nssupport.pushContext(); nssupport.declarePrefix("dc", "http://www.purl.org/dc"); nssupport.pushContext(); nssupport.declarePrefix("dc1", "http://www.purl.org/dc"); nssupport.declarePrefix("dc2", "http://www.purl.org/dc2"); nssupport.declarePrefix("dcnew", "http://www.purl.org/dcnew"); AssertJUnit.assertTrue(nssupport.getURI("dc").equals("http://www.purl.org/dc")); AssertJUnit.assertTrue(nssupport.getURI("dc1").equals("http://www.purl.org/dc")); AssertJUnit.assertTrue(nssupport.getURI("dc2").equals("http://www.purl.org/dc2")); AssertJUnit.assertTrue(nssupport.getURI("dcnew").equals("http://www.purl.org/dcnew")); // Negative test Assert.assertNull(nssupport.getURI("wrong_prefix")); Assert.assertNull(nssupport.getURI("")); }
/** * Test for NamespaceSupport.getDeclaredPrefixes(). */ @Test public void testcase01() { String[] prefixes = new String[2]; NamespaceSupport support = new NamespaceSupport(); support.pushContext(); support.declarePrefix(EMPTY_PREFIX, W3_URI); support.declarePrefix(DC_PREFIX, PURL_URI); Enumeration e = support.getDeclaredPrefixes(); int i = 0; while(e.hasMoreElements()) { prefixes[i++] = e.nextElement().toString(); } support.popContext(); assertEquals(prefixes, new String[]{EMPTY_PREFIX, DC_PREFIX}); }
/** * Copy the namespace declarations from the NamespaceSupport object. * Take care to call resolveInheritedNamespaceDecls. * after all namespace declarations have been added. * * @param nsSupport non-null reference to NamespaceSupport from * the ContentHandler. * @param excludeXSLDecl true if XSLT namespaces should be ignored. * * @throws TransformerException */ public void setPrefixes(NamespaceSupport nsSupport, boolean excludeXSLDecl) throws TransformerException { Enumeration decls = nsSupport.getDeclaredPrefixes(); while (decls.hasMoreElements()) { String prefix = (String) decls.nextElement(); if (null == m_declaredPrefixes) m_declaredPrefixes = new ArrayList(); String uri = nsSupport.getURI(prefix); if (excludeXSLDecl && uri.equals(Constants.S_XSLNAMESPACEURL)) continue; // System.out.println("setPrefixes - "+prefix+", "+uri); XMLNSDecl decl = new XMLNSDecl(prefix, uri, false); m_declaredPrefixes.add(decl); } }
@SuppressWarnings("unchecked") @TestTargetNew( level = TestLevel.COMPLETE, method = "getPrefixes", args = {String.class} ) public void testGetPrefixesLjava_lang_String() { ArrayList<String> prefixes; prefixes = Collections.list(ns.getPrefixes(marketUri)); assertTrue("Test 1: Incorrect set of prefixes returned.", expected.containsAll(prefixes) && prefixes.containsAll(expected)); prefixes = Collections.list(ns.getPrefixes(defaultUri)); assertTrue("Test 2: Default namespace prefix should not be returned.", prefixes.size() == 0); prefixes = Collections.list(ns.getPrefixes(NamespaceSupport.XMLNS)); assertTrue("Test 3: xml prefix is missing.", prefixes.contains("xml") && prefixes.size() == 1); prefixes = Collections.list(ns.getPrefixes(defaultUri + "/42")); assertTrue("Test 4: Non-empty enumeration returned for an unassigned URI.", prefixes.size() == 0); }
@TestTargets ({ @TestTargetNew( level = TestLevel.COMPLETE, method = "getURI", args = {String.class} ), @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, method = "popContext", args = {} ) }) public void testGetUri() { assertEquals("Test 1: Incorrect URI returned;", marketUri, ns.getURI("bk")); assertEquals("Test 2: Incorrect URI returned;", defaultUri, ns.getURI("")); assertNull("Test 3: Null expected for not-existing prefix.", ns.getURI("ck")); ns.popContext(); assertNull("Test 4: Null expected for not-existing prefix.", ns.getURI("bk")); assertEquals("Test 5: Incorrect URI returned;", NamespaceSupport.XMLNS, ns.getURI("xml")); }