2011-02-25 57 views
0

我有簡單的類:春天 - XSLT,從Xalan的切換撒克遜

import org.apache.xalan.processor.TransformerFactoryImpl; 
public class HomePageXsltController extends AbstractXsltView { 

protected Source createXsltSource(Map model, String rootName, 
     HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 

    this.setTransformerFactoryClass(TransformerFactoryImpl.class); 
      ... 
    return new DOMSource(root); 
} 
} 

我試圖通過設置transformerFactoryClass

import net.sf.saxon.TransformerFactoryImpl; 
public class HomePageXsltController extends AbstractXsltView { 

protected Source createXsltSource(Map model, String rootName, 
     HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 

    this.setTransformerFactoryClass(TransformerFactoryImpl.class); 
      ... 
    return new DOMSource(root); 
} 
} 

一切正常,當我使用Xalan對使用撒克遜,但我得到的錯誤與撒克遜:

2011-02-25 14:45:06 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/MyApp] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 
    at net.sf.saxon.Controller.transform(Controller.java:1319) 
    at org.springframework.web.servlet.view.xslt.AbstractXsltView.doTransform(AbstractXsltView.java:496) 
    at org.springframework.web.servlet.view.xslt.AbstractXsltView.doTransform(AbstractXsltView.java:400) 
    at org.springframework.web.servlet.view.xslt.AbstractXsltView.renderMergedOutputModel(AbstractXsltView.java:349) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
2011-02-25 14:45:06 org.apache.catalina.core.ApplicationDispatcher invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/MyApp/home.xml 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) 
    at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireReader(ImportSupport.java:331) 
    at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:241) 
    at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:158) 
    at org.apache.jsp.WEB_002dINF.jsp.home_jsp._jspx_meth_c_005fimport_005f0(home_jsp.java:101) 
    at org.apache.jsp.WEB_002dINF.jsp.home_jsp._jspService(home_jsp.java:65) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:671) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:580) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:517) 
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:930) 
    at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:677) 
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:671) 
    at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103) 
    at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96) 
    at org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:62) 
    at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:336) 
    at org.apache.tiles.template.InsertAttributeModel.renderAttribute(InsertAttributeModel.java:210) 
    at org.apache.tiles.template.InsertAttributeModel.end(InsertAttributeModel.java:126) 
    at org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:311) 
    at org.apache.jsp.WEB_002dINF.jsp.templates.layoutTemplate_jsp._jspx_meth_tiles_005finsertAttribute_005f1(layoutTemplate_jsp.java:177) 
    at org.apache.jsp.WEB_002dINF.jsp.templates.layoutTemplate_jsp._jspService(layoutTemplate_jsp.java:109) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:671) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:462) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:401) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
    at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241) 
    at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222) 
    at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44) 
    at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:690) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:644) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:627) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321) 
    at org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:75) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
2011-02-25 14:45:06 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/MyApp] threw exception [Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/jsp/templates/layoutTemplate.jsp'.] with root cause 
java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/MyApp/home.xml 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) 
    at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireReader(ImportSupport.java:331) 
    at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:241) 
    at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:158) 
    at org.apache.jsp.WEB_002dINF.jsp.home_jsp._jspx_meth_c_005fimport_005f0(home_jsp.java:101) 
    at org.apache.jsp.WEB_002dINF.jsp.home_jsp._jspService(home_jsp.java:65) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:671) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:580) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:517) 
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:930) 
    at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:677) 
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:671) 
    at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103) 
    at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96) 
    at org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:62) 
    at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:336) 
    at org.apache.tiles.template.InsertAttributeModel.renderAttribute(InsertAttributeModel.java:210) 
    at org.apache.tiles.template.InsertAttributeModel.end(InsertAttributeModel.java:126) 
    at org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:311) 
    at org.apache.jsp.WEB_002dINF.jsp.templates.layoutTemplate_jsp._jspx_meth_tiles_005finsertAttribute_005f1(layoutTemplate_jsp.java:177) 
    at org.apache.jsp.WEB_002dINF.jsp.templates.layoutTemplate_jsp._jspService(layoutTemplate_jsp.java:109) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:671) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:462) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:401) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
    at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241) 
    at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222) 
    at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44) 
    at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:690) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:644) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:627) 
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321) 
    at org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:75) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 

我用的瓷磚,所以我回到Home.jsp文件的樣子:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8" %> 
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<c:import var="inputDocument" 
url="http://localhost:8080/MyApp/home.xml" /> 
<c:import var="stylesheet" url="/WEB-INF/xsl/stylesheets/htm/home.xsl" /> 
<x:transform xml="${inputDocument}" xslt="${stylesheet}"> 
</x:transform> 

我有撒克遜依賴關係:

<dependency> 
     <groupId>net.sf.saxon</groupId> 
     <artifactId>saxon</artifactId> 
     <version>8.7</version> 
    </dependency> 

我應該在其他的方式設定撒克遜?比在AbstractXsltView中設置轉換更好的解決方案嗎?

回答

1

當你在net.sf.saxon.Controller中得到一個NullPointerException時,你應該通過Saxon支持路由(SourceForge上的saxon-help列表)報告它。這樣你就不用等6周才能得到答覆。你還需要說出你正在使用的是什麼版本。我無法將您的堆棧跟蹤與9.1,9.2或9.3的行數匹配,因此看起來好像您可能使用的是舊版本,並且升級可能是個好主意。不過,不幸的是,當編寫應用程序以使用JAXP接口並僅使用Xalan進行測試時,您不能100%確定它們也可以與Saxon一起工作 - JAXP API尚未嚴格定義情況就是如此。

0

您表示您使用的是撒克遜8.7。我看到過類似的錯誤。您可能還需要將依賴項添加到saxon-dom中:

<dependency> 
     <groupId>net.sf.saxon</groupId> 
     <artifactId>saxon</artifactId> 
     <version>${saxon-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>net.sf.saxon</groupId> 
     <artifactId>saxon-dom</artifactId> 
     <version>${saxon-version}</version> 
    </dependency>