How to select saxon TransformerFactory in Java

三世轮回 提交于 2019-11-29 21:43:57

The proper way to do this is by specifying the factory class when getting a new TransformerFactory.

I dont think calling a specific factory implementation will work - I believe the default system transformer might still be returned (at least thats what happened when I had xalan and saxon in the classpath).

example:

TransformerFactory tFactory = TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl",null);

or for saxon

TransformerFactory tFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);

Javadocs:

Obtain a new instance of a TransformerFactory from factory class name. This function is useful when there are multiple providers in the classpath. It gives more control to the application as it can specify which provider should be loaded. Once an application has obtained a reference to a TransformerFactory it can use the factory to configure and obtain transformer instances.

Can you try by setting the system property in your code like

System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

do this before getting an instance of TransformerFactory.

Note: this will force all the webapps on your Tomcat to use saxon - so you have to make sure any other webapps which were using the default are okay.

Create file META-INF/services/javax.xml.transform.TransformerFactory with content: net.sf.saxon.TransformerFactoryImpl. That's it.

If your application really requires saxon and won't work with another processor then it would probably be fine to instantiate the saxon TransformerFactory directly using new net.sf.saxon.TransformerFactoryImpl()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!