【问题标题】:java.lang.RuntimeException: Cannot create a secure XMLInputFactory when deploying on Glassfishjava.lang.RuntimeException:在 Glassfish 上部署时无法创建安全的 XMLInputFactory
【发布时间】:2016-05-23 17:35:49
【问题描述】:

我有一个使用 CXF 2.7.13 开发的 Web 服务应用程序。当我在本地 Tomcat 实例上进行部署时,一切正常,但在切换到 glassfish 4 实例时,出现以下异常:

java.lang.RuntimeException: Cannot create a secure XMLInputFactory
    at org.apache.cxf.staxutils.StaxUtils.createXMLInputFactory(StaxUtils.java:315)
    at org.apache.cxf.staxutils.StaxUtils.getXMLInputFactory(StaxUtils.java:265)
    at org.apache.cxf.staxutils.StaxUtils.createXMLStreamReader(StaxUtils.java:1701)
    at org.apache.cxf.interceptor.StaxInInterceptor.handleMessage(StaxInInterceptor.java:123)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
    at java.lang.Thread.run(Thread.java:722)]]

根据我的阅读,CXF 的 Woodstox api (woodstox-core-asl.jar) 依赖项似乎与 glassfish 自己的库版本冲突。 CXF 使用 Woodstox 4.4.1,而我的 glassfish 4 实例,我检查过,使用 4.1.2。

所以我的第一次尝试是尝试排除 CXF 的依赖项,并在我的 POM 上声明我自己的 Woodstox 4.1.2 依赖项,以便每个人都使用相同的版本。但这并没有解决问题。

我还尝试直接从我的 POM 中删除此依赖项,并在部署之前检查它是否未包含在 WAR 中,但也无济于事(同样的例外)。

我只能通过从服务器的模块目录中删除 .jar 来设法在 glassfish 上进行部署,但根据要求,这是我无法在生产服务器上执行的操作。

还有什么我可以尝试的吗?

【问题讨论】:

    标签: java maven glassfish cxf


    【解决方案1】:

    这太简单了,我很惭愧我花了 5 个小时尝试使用 maven 在官方文档页面 (http://cxf.apache.org/docs/application-server-specific-configuration-guide.html) 上解决它:

    如果没有这个 sun-web.xml,CXF 拦截器将无法在 Glassfish 中工作 文件来配置类加载器。默认情况下,Glassfish 将使用 Metro 用于 JAX-WS 服务,因此需要将类加载器配置为 允许 CXF 库提供 JAX-WS 服务。以下 sun-web.xml xml 源已添加到 /WEB-INF 以解决此问题:

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sun-web-app PUBLIC
    '-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet
     2.5//EN' 'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd>
     <sun-web-app> <class-loader delegate="false"/> </sun-web-app>
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但将其部署到 web sphere,经过几个小时的研究,我找到了 woodstox 的确切版本,即下面

      <dependency>
          <groupId>org.codehaus.woodstox</groupId>
          <artifactId>woodstox-core-asl</artifactId>
          <version>4.2.0</version>
      </dependency>
      

      这个https://bugs.eclipse.org/bugs/show_bug.cgi?id=409070 链接也有助于解决这个问题。

      【讨论】:

        【解决方案3】:

        请优先使用kelmers answer 以免打开安全漏洞!

        根据应用程序的安全要求,您可以使用org.apache.cxf.stax.allowInsecureParser 选项。

        来自documentation

        有一个“org.apache.cxf.stax.allowInsecureParser”系统属性 可以设置为 true 以允许使用不安全的解析器,但那是 强烈不推荐

        但我认为您最好查阅 glassfish 文档,了解如何为特定部署覆盖/排除系统库。

        【讨论】:

          猜你喜欢
          • 2014-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-05
          • 1970-01-01
          • 2018-12-24
          • 1970-01-01
          • 2015-11-18
          相关资源
          最近更新 更多