Support compilation using JDK 1.4 compiler
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@579694 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-obr-plugin/pom.xml b/maven-obr-plugin/pom.xml
index 6f8e3e7..6bef516 100644
--- a/maven-obr-plugin/pom.xml
+++ b/maven-obr-plugin/pom.xml
@@ -59,7 +59,7 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>2.4.0</version>
+ <version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ObrUpdate.java b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ObrUpdate.java
index a3de7b2..017fe08 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ObrUpdate.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ObrUpdate.java
@@ -337,7 +337,7 @@
m_logger.error("the obr.xml file seems to be invalid in a \"require\" tag (one or more attributes are missing)");
// e.printStackTrace();
}
- newRequireNode.setValue(node.getTextContent());
+ newRequireNode.setValue(XmlHelper.getTextContent(node));
m_resourceBundle.addRequire(newRequireNode);
} else if (node.getNodeName().compareTo("capability") == 0) {
Capability newCapability = new Capability();
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/PathFile.java b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/PathFile.java
index 1f516f2..ec2f890 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/PathFile.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/PathFile.java
@@ -255,8 +255,8 @@
if (!this.isValid()) { return null; }
String path = PathFile.uniformSeparator(getAbsoluteFilename());
if (File.separatorChar == '\\') {
- path = path.replace("\\", "/");
- path = path.replace(" ", "%20");
+ path = path.replace('\\', '/');
+ path = path.replaceAll(" ", "%20");
}
URI uri = null;
@@ -467,6 +467,8 @@
}
+ private static final String REGEXP_BACKSLASH = "\\\\";
+
/**
* replace all '\' by '\\' in the given string.
* @param path string where replace the search pattern
@@ -475,7 +477,7 @@
public static String doubleSeparator(String path) {
// double the '\' in the path
if (path != null && File.separatorChar == '\\') {
- return path.replace("\\", "\\\\");
+ return path.replaceAll(REGEXP_BACKSLASH, REGEXP_BACKSLASH + REGEXP_BACKSLASH);
} else {
return null;
}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/Require.java b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/Require.java
index d46e463..8e90d47 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/Require.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/Require.java
@@ -167,7 +167,7 @@
require.setAttribute("extend", this.getExtend());
require.setAttribute("multiple", this.getMultiple());
require.setAttribute("optional", this.getOptional());
- require.setTextContent(this.getValue());
+ XmlHelper.setTextContent(require,this.getValue());
return require;
}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ResourcesBundle.java b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ResourcesBundle.java
index 7a3744c..29a164d 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ResourcesBundle.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/ResourcesBundle.java
@@ -265,24 +265,24 @@
resource.setAttribute("uri", this.getUri());
resource.setAttribute("version", this.getVersion());
- description.setTextContent(this.getDescription());
+ XmlHelper.setTextContent(description,this.getDescription());
resource.appendChild(description);
- size.setTextContent(this.getSize());
+ XmlHelper.setTextContent(size,this.getSize());
resource.appendChild(size);
if (this.getDocumentation() != null) {
- documentation.setTextContent(this.getDocumentation());
+ XmlHelper.setTextContent(documentation,this.getDocumentation());
resource.appendChild(documentation);
}
if (this.getSource() != null) {
- source.setTextContent(this.getSource());
+ XmlHelper.setTextContent(source,this.getSource());
resource.appendChild(source);
}
if (this.getLicense() != null) {
- license.setTextContent(this.getLicense());
+ XmlHelper.setTextContent(license, this.getLicense());
resource.appendChild(license);
}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/XmlHelper.java b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/XmlHelper.java
new file mode 100644
index 0000000..78ae9ad
--- /dev/null
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/sandbox/obr/plugin/XmlHelper.java
@@ -0,0 +1,104 @@
+/*
+ * 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 org.apache.felix.sandbox.obr.plugin;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Provide XML helper methods to support pre-Java5 runtimes
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class XmlHelper
+{
+ /**
+ * based on public Java5 javadoc of org.w3c.dom.Node.getTextContent method
+ */
+ public static String getTextContent( Node node )
+ {
+ switch( node.getNodeType() ) {
+ case Node.ELEMENT_NODE:
+ case Node.ATTRIBUTE_NODE:
+ case Node.ENTITY_NODE:
+ case Node.ENTITY_REFERENCE_NODE:
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ return mergeTextContent( node.getChildNodes() );
+ case Node.TEXT_NODE:
+ case Node.CDATA_SECTION_NODE:
+ case Node.COMMENT_NODE:
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ return node.getNodeValue();
+ case Node.DOCUMENT_NODE:
+ case Node.DOCUMENT_TYPE_NODE:
+ case Node.NOTATION_NODE:
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * based on the following quote from public Java5 javadoc of org.w3c.dom.Node.getTextContent method:
+ *
+ * "concatenation of the textContent attribute value of every child node, excluding COMMENT_NODE and
+ * PROCESSING_INSTRUCTION_NODE nodes. This is the empty string if the node has no children"
+ */
+ private static String mergeTextContent( NodeList nodes )
+ {
+ StringBuffer buf = new StringBuffer();
+ for( int i = 0; i < nodes.getLength(); i++ )
+ {
+ Node n = nodes.item( i );
+ final String text;
+
+ switch( n.getNodeType() ) {
+ case Node.COMMENT_NODE:
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ text = null;
+ break;
+ default:
+ text = getTextContent( n );
+ break;
+ }
+
+ if( text != null )
+ {
+ buf.append( text );
+ }
+ }
+ return buf.toString();
+ }
+
+ /**
+ * based on public Java5 javadoc of org.w3c.dom.Node.setTextContent method
+ */
+ public static void setTextContent( Node node, final String text )
+ {
+ while( node.hasChildNodes() )
+ {
+ node.removeChild( node.getFirstChild() );
+ }
+
+ if( text != null && text.length() > 0 )
+ {
+ Node textNode = node.getOwnerDocument().createTextNode( text );
+ node.appendChild( textNode );
+ }
+ }
+}