< prev index next >

src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java

Print this page
rev 959 : 8162598: XSLTC transformer swallows empty namespace declaration which is needed to undeclare default namespace

*** 1,27 **** /* ! * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * ! * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ - /* - * $Id: LiteralElement.java,v 1.2.4.1 2005/09/13 12:38:33 pvedula Exp $ - */ package com.sun.org.apache.xalan.internal.xsltc.compiler; import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen; import com.sun.org.apache.bcel.internal.generic.InstructionList; --- 1,24 ---- /* ! * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * ! * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sun.org.apache.xalan.internal.xsltc.compiler; import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen; import com.sun.org.apache.bcel.internal.generic.InstructionList;
*** 56,67 **** // True if all attributes of this LRE are unique, i.e. they all have // different names. This flag is set to false if some attribute // names are not known at compile time. private boolean _allAttributesUnique = false; - private final static String XMLNS_STRING = "xmlns"; - /** * Returns the QName for this literal element */ public QName getName() { return _qname; --- 53,62 ----
*** 138,149 **** String prefix = qname.getPrefix(); // Treat default namespace as "" and not null if (prefix == null) prefix = Constants.EMPTYSTRING; ! else if (prefix.equals(XMLNS_STRING)) ! return(XMLNS_STRING); // Check if we must translate the prefix final String alternative = stable.lookupPrefixAlias(prefix); if (alternative != null) { stable.excludeNamespaces(prefix); --- 133,144 ---- String prefix = qname.getPrefix(); // Treat default namespace as "" and not null if (prefix == null) prefix = Constants.EMPTYSTRING; ! else if (prefix.equals(XMLNS_PREFIX)) ! return(XMLNS_PREFIX); // Check if we must translate the prefix final String alternative = stable.lookupPrefixAlias(prefix); if (alternative != null) { stable.excludeNamespaces(prefix);
*** 262,272 **** } else { // Ignore special attributes (e.g. xmlns:prefix and xmlns) final String prefix = qname.getPrefix(); if (prefix != null && prefix.equals(XMLNS_PREFIX) || ! prefix == null && qname.getLocalPart().equals("xmlns") || uri != null && uri.equals(XSLT_URI)) { continue; } --- 257,267 ---- } else { // Ignore special attributes (e.g. xmlns:prefix and xmlns) final String prefix = qname.getPrefix(); if (prefix != null && prefix.equals(XMLNS_PREFIX) || ! prefix == null && qname.getLocalPart().equals(XMLNS_PREFIX) || uri != null && uri.equals(XSLT_URI)) { continue; }
*** 335,384 **** il.append(new PUSH(cpg, _name)); il.append(DUP2); // duplicate these 2 args for endElement il.append(methodGen.startElement()); // The value of an attribute may depend on a (sibling) variable ! int j=0; while (j < elementCount()) { ! final SyntaxTreeNode item = (SyntaxTreeNode) elementAt(j); if (item instanceof Variable) { item.translate(classGen, methodGen); } j++; } // Compile code to emit namespace attributes if (_accessedPrefixes != null) { - boolean declaresDefaultNS = false; - for (Map.Entry<String, String> entry : _accessedPrefixes.entrySet()) { final String prefix = entry.getKey(); final String uri = entry.getValue(); - - if (uri != Constants.EMPTYSTRING || - prefix != Constants.EMPTYSTRING) - { - if (prefix == Constants.EMPTYSTRING) { - declaresDefaultNS = true; - } - il.append(methodGen.loadHandler()); - il.append(new PUSH(cpg,prefix)); - il.append(new PUSH(cpg,uri)); - il.append(methodGen.namespace()); - } - } - - /* - * If our XslElement parent redeclares the default NS, and this - * element doesn't, it must be redeclared one more time. - */ - if (!declaresDefaultNS && (_parent instanceof XslElement) - && ((XslElement) _parent).declaresDefaultNS()) - { il.append(methodGen.loadHandler()); ! il.append(new PUSH(cpg, Constants.EMPTYSTRING)); ! il.append(new PUSH(cpg, Constants.EMPTYSTRING)); il.append(methodGen.namespace()); } } // Output all attributes --- 330,356 ---- il.append(new PUSH(cpg, _name)); il.append(DUP2); // duplicate these 2 args for endElement il.append(methodGen.startElement()); // The value of an attribute may depend on a (sibling) variable ! int j = 0; while (j < elementCount()) { ! final SyntaxTreeNode item = elementAt(j); if (item instanceof Variable) { item.translate(classGen, methodGen); } j++; } // Compile code to emit namespace attributes if (_accessedPrefixes != null) { for (Map.Entry<String, String> entry : _accessedPrefixes.entrySet()) { final String prefix = entry.getKey(); final String uri = entry.getValue(); il.append(methodGen.loadHandler()); ! il.append(new PUSH(cpg, prefix)); ! il.append(new PUSH(cpg, uri)); il.append(methodGen.namespace()); } } // Output all attributes
< prev index next >