You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2010/09/20 21:43:26 UTC
svn commit: r999087 -
/karaf/trunk/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java
Author: jbonofre
Date: Mon Sep 20 19:43:26 2010
New Revision: 999087
URL: http://svn.apache.org/viewvc?rev=999087&view=rev
Log:
[KARAF-199] WarDeploymentListener doesn't handle the default Webapp-Context correct on a Windows system.
Modified:
karaf/trunk/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java
Modified: karaf/trunk/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java
URL: http://svn.apache.org/viewvc/karaf/trunk/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java?rev=999087&r1=999086&r2=999087&view=diff
==============================================================================
--- karaf/trunk/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java (original)
+++ karaf/trunk/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java Mon Sep 20 19:43:26 2010
@@ -18,28 +18,13 @@
package org.apache.karaf.deployer.war;
import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
/**
* A deployment listener that listens for war deployements.
@@ -48,11 +33,6 @@ public class WarDeploymentListener imple
private static final String PATH_SEPERATOR = "/";
- private static final Log LOGGER = LogFactory
- .getLog(WarDeploymentListener.class);
-
- private DocumentBuilderFactory dbf;
-
public boolean canHandle(File artifact) {
try {
JarFile jar = new JarFile(artifact);
@@ -80,79 +60,24 @@ public class WarDeploymentListener imple
String path = artifact.getPath();
String protocol = artifact.getProtocol();
+ int lastSlash = 0;
// match the last slash to retrieve the name of the archive
- int lastSlash = path.lastIndexOf(PATH_SEPERATOR);
+ if ("jardir".equalsIgnoreCase(protocol)) {
+ // just to make sure this works on all kinds of windows
+ File fileInstance = new File(path);
+ // with a jardir this is system specific
+ lastSlash = fileInstance.getAbsolutePath().lastIndexOf(File.separator);
+ } else {
+ // a standard file is not system specific, this is always a standardized URL path
+ lastSlash = path.lastIndexOf(PATH_SEPERATOR);
+ }
// match the suffix so we get rid of it for displaying
- int suffixPos = path.lastIndexOf(".war");
+ int suffixPos = path.length() - 4; // usually this should be a war but might also be a jar plus the colon makes 4 signs
- // Fall back if there is no display-name set in the web.xml or if the
- // web.xml can't be read.
+ // the display name for a web context is derived from the name of the archive
String displayName = path.substring(lastSlash + 1, suffixPos);
- try {
- // step through the jar to find the web.xml
- JarInputStream jar = new JarInputStream(artifact.openStream());
- JarEntry nextJarEntry = jar.getNextJarEntry();
- boolean found = false;
- while (nextJarEntry != null) {
- if (nextJarEntry.getName().indexOf("web.xml") != -1
- && !nextJarEntry.isDirectory()) {
- Document doc = parse(jar); // found the web.xml
- NodeList nodeList = doc.getDocumentElement()
- .getChildNodes(); // getElementsByTagName("display-name");
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node item = nodeList.item(i);
- String nodeName = item.getNodeName();
- if ("display-name".equalsIgnoreCase(nodeName)) {
- String nodeValue = item.getFirstChild()
- .getNodeValue();
- if (nodeValue != null) {
- displayName = nodeValue;
- }
- found = true;
- jar.close();
- break;
- }
- }
- }
- if (found)
- break;
- else
- nextJarEntry = jar.getNextJarEntry();
- }
- // alter the original URL artifact
- } catch (Exception e) {
- LOGGER.warn("Unable to create Webapp-Context from web.xml", e);
- }
- return new URL("war", null, protocol + ":" + path + "?Webapp-Context="
- + displayName);
- }
-
- private Document parse(InputStream inputStream)
- throws ParserConfigurationException, SAXException, IOException {
- if (dbf == null) {
- dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- }
-
- DocumentBuilder db = dbf.newDocumentBuilder();
- db.setErrorHandler(new ErrorHandler() {
-
- public void warning(SAXParseException exception)
- throws SAXException {
- // ignore waring
- }
-
- public void fatalError(SAXParseException exception)
- throws SAXException {
- throw exception;
- }
-
- public void error(SAXParseException exception) throws SAXException {
- throw exception;
- }
- });
-
- return db.parse(inputStream);
+
+ return new URL("war", null, protocol + ":" + path + "?Webapp-Context=" + displayName);
}
}