< 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 >