PDF解析器在生产环境中不起作用

时间:2019-01-29 15:31:32

标签: weblogic-10.x flying-saucer

我有一个生成一些PDF的应用程序。在预生产系统中有效,但在生产系统中无效。我们在weblogic 10.3.6中进行部署,这两个环境应该具有相同的配置

在非生产性环境中进行了所有功能测试之后,我们已经确定可以部署Web应用程序。问题是该应用程序必须创建的最终PDF在生产中不起作用(但在测试环境中有效)。 我们正在使用:

<dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>core-renderer</artifactId>
            <version>R8</version>
            <scope>compile</scope>
        </dependency>


public static void crearPDFHTML(String htmlPlantilla, OutputStream pdf)
    throws Exception {
        try
        {
            ITextRenderer renderer = new ITextRenderer();
            //String plantillaLimpia = makeTidy(htmlPlantilla);
            LOG.info("Antes de limpiar caracteres especiales");
            String limpio = quitarCaracteresEspeciales(htmlPlantilla);
            LOG.info("Antes de poner el documento en el render");
            LOG.info(limpio);
            renderer.setDocumentFromString(limpio);
            LOG.info("antes del layout");
            renderer.layout();//HERE FAILS IN PRODUCTIVE ENVIRONEMENT
            LOG.info("antes de crear PDF");
            renderer.createPDF(pdf);
            LOG.info("PDF creado con éxito");

        }catch(Throwable e)
    {
        e.printStackTrace();
        throw new Exception(e);
    }
}

如果该Web应用程序在前环境下运行良好,则应在前环境下运行相同,并生成PDF。

堆栈跟踪:

java.lang.Exception: java.lang.NullPointerException 
        at es.msssi.gepsa.utils.PDFUtils.crearPDFHTML(PDFUtils.java:47) 
        at es.msssi.gepsa.utils.PlantillaPSA.rellenarPlantilla(PlantillaPSA.java:456) 
        at es.msssi.gepsa.web.controller.DocumentoPSAController.generaDocumentoPSA(DocumentoPSAController.java:269) 
        at es.msssi.gepsa.web.controller.PsaController.generaDocumentoPSA(PsaController.java:454) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:821) 
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301) 
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:61) 
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:89) 
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:61) 
        at es.msssi.common.seguridad.GenericExisteAtributoFilter.doFilter(GenericExisteAtributoFilter.java:158) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:61) 
        at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119) 
        at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171) 
        at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:61) 
        at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:163) 
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714) 
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182) 
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491) 
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 
    Caused by: java.lang.NullPointerException 
        at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:459) 
        at weblogic.net.http.SOAPHttpURLConnection.getInputStream(SOAPHttpURLConnection.java:37) 
        at java.net.URL.openStream(URL.java:1017) 
        at org.xhtmlrenderer.swing.NaiveUserAgent.resolveAndOpenStream(NaiveUserAgent.java:122) 
        at org.xhtmlrenderer.pdf.ITextUserAgent.getImageResource(ITextUserAgent.java:54) 
        at org.xhtmlrenderer.pdf.ITextReplacedElementFactory.createReplacedElement(ITextReplacedElementFactory.java:57) 
        at org.xhtmlrenderer.render.BlockBox.calcDimensions(BlockBox.java:674) 
        at org.xhtmlrenderer.render.BlockBox.calcDimensions(BlockBox.java:628) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:763) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:732) 
        at org.xhtmlrenderer.layout.InlineBoxing.layoutInlineBlockContent(InlineBoxing.java:393) 
        at org.xhtmlrenderer.layout.InlineBoxing.layoutContent(InlineBoxing.java:290) 
        at org.xhtmlrenderer.render.BlockBox.layoutInlineChildren(BlockBox.java:938) 
        at org.xhtmlrenderer.render.BlockBox.layoutChildren(BlockBox.java:919) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:802) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:732) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutBlockChild0(BlockBoxing.java:293) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutBlockChild(BlockBoxing.java:271) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutContent(BlockBoxing.java:89) 
        at org.xhtmlrenderer.render.BlockBox.layoutChildren(BlockBox.java:922) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:802) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:732) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutBlockChild0(BlockBoxing.java:293) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutBlockChild(BlockBoxing.java:271) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutContent(BlockBoxing.java:89) 
        at org.xhtmlrenderer.render.BlockBox.layoutChildren(BlockBox.java:922) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:802) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:732) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutBlockChild0(BlockBoxing.java:293) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutBlockChild(BlockBoxing.java:271) 
        at org.xhtmlrenderer.layout.BlockBoxing.layoutContent(BlockBoxing.java:89) 
        at org.xhtmlrenderer.render.BlockBox.layoutChildren(BlockBox.java:922) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:802) 
        at org.xhtmlrenderer.render.BlockBox.layout(BlockBox.java:732) 
        at org.xhtmlrenderer.pdf.ITextRenderer.layout(ITextRenderer.java:209) 
        at es.msssi.gepsa.utils.PDFUtils.crearPDFHTML(PDFUtils.java:37) 
        at es.msssi.gepsa.utils.PlantillaPSA.rellenarPlantilla(PlantillaPSA.java:456) 
        at es.msssi.gepsa.web.controller.DocumentoPSAController.generaDocumentoPSA(DocumentoPSAController.java:269) 
        at es.msssi.gepsa.web.controller.PsaController.generaDocumentoPSA(PsaController.java:454) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301) 
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60) 
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60) 
        at es.msssi.common.seguridad.GenericExisteAtributoFilter.doFilter(GenericExisteAtributoFilter.java:158) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60) 
        at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119) 
        at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:324) 
        at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460) 
        at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103) 
        at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171) 
        at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60) 
        at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:163) 
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60) 
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748) 
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714) 
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283) 
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182) 
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491) 
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263) 
        ... 1 more

1 个答案:

答案 0 :(得分:0)

好吧,终于解决了这个问题。这是一个非常奇怪的情况,我认为这不会帮助任何人,但是....

问题在于,在DES和PRE(非生产性环境)中,您可以使用两个URL(http或https)获取PDF所需的图像,并且可以很好地使用它们。但是在PRO中,安全配置不允许Itext使用http来请求图像。它必须使用https

仅此而已,只需更改URL配置,PDF即可正常工作,并且所有人再次开心。

感谢您的解答和耐心