尝试将Saxon与Web服务一起使用时的TransformerFactoryConfigurationError

时间:2013-04-17 20:19:20

标签: java wso2 saxon transformer wso2wsas

我的Web服务,位于WSO2 WSAS应用程序服务器内的Axis2上,包含以下代码:

String prop = "javax.xml.transform.TransformerFactory";
String val = "net.sf.saxon.TransformerFactoryImpl";

public static TransformerFactory getTransformerFactory() {
    System.setProperty(prop, val); // This line executes normally
    return TransformerFactory.newInstance(); // Error occurs inside this call
}

运行时,服务会产生此错误:

[2013-04-15 12:22:41,263] ERROR
  {org.apache.axis2.transport.base.threads.NativeWorkerPool} -  Uncaught
  exception
javax.xml.transform.TransformerFactoryConfigurationError: Provider
  net.sf.saxon.TransformerFactoryImpl not found
        at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
        at com.example.Setup.getTransformerFactory(Setup.java:40)
        at com.example.ProcessFiles.init(ProcessFiles.java:336)
        at com.example.TorgApp.incoming(TorgApp.java:229)
        ...

我的类路径中有Saxon-HE-9.4.jar,并且可读。它也可用于Axis2(/foo/bar/wso2as/wso2as-4.0.0/tmp/axis2-tmp-6436419317930731973.tmp/axis67573163200472779114Saxon-HE-9.4.jar)。

根据the Javadoc for newInstance(),我设置的系统属性应该否决所有其他识别使用TransformerFactory的方法,因此优先级不是问题。

可能导致此错误的原因是什么?我该怎样做才能获得我想要的Saxon变压器工厂?

2 个答案:

答案 0 :(得分:2)

如果将axis2(似乎是异常的原因)放在您的Web应用程序之外,那么您也必须在那里使用Saxon。

大多数应用程序服务器都有一个预定义的位置,可以放置jar文件以实现此目的。仅在Web应用程序中部署它是不够的。

答案 1 :(得分:0)

这似乎是一个类加载问题。你有没有遵循这个文档。 http://docs.wso2.org/wiki/display/AS510/Webapp+ClassLoading