You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2013/10/24 16:03:49 UTC
svn commit: r1535385 - in
/karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring:
SpringDeploymentListener.java SpringTransformer.java
Author: cschneider
Date: Thu Oct 24 14:03:49 2013
New Revision: 1535385
URL: http://svn.apache.org/r1535385
Log:
KARAF-2526 Improved parsing so it does not already fail in canHandle on incorrect files
Modified:
karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java
karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java
Modified: karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java
URL: http://svn.apache.org/viewvc/karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java?rev=1535385&r1=1535384&r2=1535385&view=diff
==============================================================================
--- karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java (original)
+++ karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java Thu Oct 24 14:03:49 2013
@@ -18,37 +18,35 @@
package org.apache.karaf.deployer.spring;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
import java.net.URL;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+import org.apache.felix.fileinstall.ArtifactUrlTransformer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-
-import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.SAXException;
/**
* A deployment listener that listens for spring xml applications
* and creates bundles for these.
*/
public class SpringDeploymentListener implements ArtifactUrlTransformer {
+ private static final QName SPRING_DM_ROOT = new QName("http://www.springframework.org/schema/beans", "beans");
private final Logger logger = LoggerFactory.getLogger(SpringDeploymentListener.class);
-
- private DocumentBuilderFactory dbf;
-
+ private XMLInputFactory factory;
+
public boolean canHandle(File artifact) {
try {
if (artifact.isFile() && artifact.getName().endsWith(".xml")) {
- Document doc = parse(artifact);
- String name = doc.getDocumentElement().getLocalName();
- String uri = doc.getDocumentElement().getNamespaceURI();
- if ("beans".equals(name) && "http://www.springframework.org/schema/beans".equals(uri)) {
+ StartElement element = getRootElement(artifact);
+ if (element != null && SPRING_DM_ROOT.equals(element.getName())) {
return true;
}
}
@@ -67,22 +65,30 @@ public class SpringDeploymentListener im
}
}
- protected Document parse(File artifact) throws Exception {
- if (dbf == null) {
- dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- }
- DocumentBuilder db = dbf.newDocumentBuilder();
- db.setErrorHandler(new ErrorHandler() {
- public void warning(SAXParseException exception) throws SAXException {
- }
- public void error(SAXParseException exception) throws SAXException {
- }
- public void fatalError(SAXParseException exception) throws SAXException {
- throw exception;
- }
- });
- return db.parse(artifact);
+ protected StartElement getRootElement(File artifact) throws Exception {
+ XMLEventReader parser = null;
+ InputStream in = null;
+ try {
+ if (factory == null) {
+ factory = XMLInputFactory.newInstance();
+ }
+ in = new FileInputStream(artifact);
+ parser = factory.createXMLEventReader(in);
+ while (parser.hasNext()) {
+ XMLEvent event = parser.nextEvent();
+ if (event.isStartElement()) {
+ return event.asStartElement();
+ }
+ }
+ return null;
+ } finally {
+ if (parser != null) {
+ parser.close();
+ }
+ if (in != null) {
+ in.close();
+ }
+ }
}
}
Modified: karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java
URL: http://svn.apache.org/viewvc/karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java?rev=1535385&r1=1535384&r2=1535385&view=diff
==============================================================================
--- karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java (original)
+++ karaf/trunk/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java Thu Oct 24 14:03:49 2013
@@ -31,8 +31,6 @@ import java.util.TreeSet;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import javax.xml.parsers.DocumentBuilder;
@@ -46,11 +44,12 @@ import javax.xml.transform.stream.Stream
import javax.xml.transform.stream.StreamSource;
import org.apache.karaf.util.DeployerUtils;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
-
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
import org.osgi.framework.Constants;
public class SpringTransformer {
@@ -90,7 +89,7 @@ public class SpringTransformer {
String text = e.getTextContent();
Properties props = new Properties();
props.load(new ByteArrayInputStream(text.trim().getBytes()));
- Enumeration en = props.propertyNames();
+ Enumeration<?> en = props.propertyNames();
while (en.hasMoreElements()) {
String k = (String) en.nextElement();
String v = props.getProperty(k);
@@ -179,6 +178,15 @@ public class SpringTransformer {
dbf.setNamespaceAware(true);
}
DocumentBuilder db = dbf.newDocumentBuilder();
+ db.setErrorHandler(new ErrorHandler() {
+ public void warning(SAXParseException exception) throws SAXException {
+ }
+ public void error(SAXParseException exception) throws SAXException {
+ }
+ public void fatalError(SAXParseException exception) throws SAXException {
+ throw exception;
+ }
+ });
return db.parse(url.toString());
}