You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2016/10/03 21:00:25 UTC
svn commit: r1763210 -
/uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java
Author: burn
Date: Mon Oct 3 21:00:25 2016
New Revision: 1763210
URL: http://svn.apache.org/viewvc?rev=1763210&view=rev
Log:
UIMA-5117 Added check for saxon9 since dd2spring and uima-as fail if it is the classpath
Modified:
uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java
Modified: uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java?rev=1763210&r1=1763209&r2=1763210&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java (original)
+++ uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java Mon Oct 3 21:00:25 2016
@@ -21,7 +21,6 @@ package org.apache.uima.adapter.jms.serv
import java.io.File;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
@@ -109,31 +108,33 @@ public class Dd2spring {
public void convertDd2Spring(File tempFile, String ddFilePath, String dd2SpringXsltFilePath,
URL saxonClasspathURL) throws Exception {
+ // UIMA-5117 Check for saxon9. If it is in the users's classpath an NPE is thrown in
+ // net.sf.saxon.event.ReceivingContentHandler.getNodeName while handling a getMeta request.
+ try {
+ Class<?> saxonVersionClass = Class.forName("net.sf.saxon.Version");
+ Method versionMethod = saxonVersionClass.getMethod("getProductVersion");
+ String version = (String) versionMethod.invoke(null);
+ if (version.startsWith("9")) {
+ UIMAFramework.getLogger(THIS_CLASS).logrb(Level.SEVERE, THIS_CLASS.getName(), "convertDD2Spring",
+ UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE, "UIMAEE_exception__SEVERE",
+ new Object[] { "saxon9 must not be in classpath" });
+ throw new Dd2springException("saxon9 found in classpath - dd2spring transformation and UIMA-AS do not support saxon9");
+ }
+ } catch (ClassNotFoundException e) {
+ // OK - saxon not in classpath
+ }
+
// UIMA-5117 - Add shutdown hook so can log when saxon gives up and calls exit :(
ShutdownHook shutdownHook = new ShutdownHook();
Runtime.getRuntime().addShutdownHook(shutdownHook);
- // In case the saxon jar is in the classpath first try without the special classloader
- Class<?> mainStartClass = null;
- try {
- mainStartClass = Class.forName("net.sf.saxon.Transform");
- } catch (ClassNotFoundException e1) {
- // Use a classloader with the bootstrap class loader as the parent
- if (null == saxonClassLoader) {
- URL[] classLoaderUrls = new URL[] { saxonClasspathURL };
- saxonClassLoader = new URLClassLoader(classLoaderUrls, Object.class.getClassLoader());
- }
- try {
- mainStartClass = Class.forName("net.sf.saxon.Transform", true, saxonClassLoader);
- } catch (ClassNotFoundException e) {
- System.err.println("Error - can't load Saxon jar from " + saxonClasspathURL + " for dd2spring transformation.");
- e.printStackTrace();
- UIMAFramework.getLogger(THIS_CLASS).logrb(Level.SEVERE, THIS_CLASS.getName(), "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
- "UIMA_dd2spring_saxon_missing_SEVERE");
- throw e;
- }
+ // Create a classloader with saxon8 that delegates to the user's classloader
+ ClassLoader currentClassloader = Thread.currentThread().getContextClassLoader();
+ if (null == saxonClassLoader) {
+ URL[] classLoaderUrls = new URL[] { saxonClasspathURL };
+ saxonClassLoader = new URLClassLoader(classLoaderUrls, currentClassloader);
}
-
+
// args for saxon
// -l -s deployment_descriptor} -o output_file_path dd2spring.xsl_file_path <-x sax_parser_class>
// If a custom framework includes a custom XML parser we may also need a custom parser for Saxon,
@@ -144,7 +145,7 @@ public class Dd2spring {
if (uimaFrameworkClass != null) {
String saxonParserClass = uimaFrameworkClass + "_SAXParser";
try {
- ClassLoader.getSystemClassLoader().loadClass(saxonParserClass);
+ saxonClassLoader.loadClass(saxonParserClass);
argsForSaxon.add("-x");
argsForSaxon.add(saxonParserClass);
} catch (ClassNotFoundException e) {
@@ -160,20 +161,30 @@ public class Dd2spring {
UIMAFramework.getLogger(THIS_CLASS).log(Level.INFO, "Saxon args: " + argsForSaxon);
+ // Set the thread classloader so that all classes are loaded from this
+ Thread.currentThread().setContextClassLoader(saxonClassLoader);
+ Class<?> mainStartClass = null;
try {
+ mainStartClass = Class.forName("net.sf.saxon.Transform", true, saxonClassLoader);
Method mainMethod = mainStartClass.getMethod("main", String[].class);
- mainMethod.invoke(null,
- new Object[] { argsForSaxon.toArray(new String[argsForSaxon.size()]) });
+ mainMethod.invoke(null, new Object[] { argsForSaxon.toArray(new String[argsForSaxon.size()]) });
+ } catch (ClassNotFoundException e) {
+ System.err.println("Error - can't load Saxon jar from " + saxonClasspathURL + " for dd2spring transformation.");
+ e.printStackTrace();
+ UIMAFramework.getLogger(THIS_CLASS).logrb(Level.SEVERE, THIS_CLASS.getName(), "convertDD2Spring",
+ JmsConstants.JMS_LOG_RESOURCE_BUNDLE, "UIMA_dd2spring_saxon_missing_SEVERE");
+ throw e;
} catch (Exception e) {
System.err.println("Error - dd2spring transformation failed:");
e.printStackTrace();
- UIMAFramework.getLogger(THIS_CLASS).logrb(Level.SEVERE, THIS_CLASS.getName(),
- "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
- "UIMA_dd2spring_internal_error_calling_saxon");
+ UIMAFramework.getLogger(THIS_CLASS).logrb(Level.SEVERE, THIS_CLASS.getName(), "convertDD2Spring",
+ JmsConstants.JMS_LOG_RESOURCE_BUNDLE, "UIMA_dd2spring_internal_error_calling_saxon");
throw e;
+ } finally {
+ // Restore original classloader and remove used shutdown hook
+ Thread.currentThread().setContextClassLoader(currentClassloader);
+ Runtime.getRuntime().removeShutdownHook(shutdownHook);
}
-
- Runtime.getRuntime().removeShutdownHook(shutdownHook);
return;
}