【问题标题】:CXF 2.7.x Woodstox Compatibility via Maven通过 Maven 的 CXF 2.7.x Woodstox 兼容性
【发布时间】:2013-06-03 18:18:24
【问题描述】:

在 CXF 的文档中,据说 2.7.x 版本要求不在 4.2.0 版本下的 Woodstox jar 在类路径中可用。

有人可以建议 Woodstox 使用 CXF 的 Maven 依赖项吗?

主要问题是当我尝试使用 cxf 的客户端时,会引发异常“无法创建安全的 XMLInputFactory”。根据不同的论坛(for example),可以使用“org.apache.cxf.stax.allowInsecureParser”系统属性来解决问题,但这似乎不是一个好方法。所以maven依赖是要走的路......

提前致谢。

【问题讨论】:

  • 您为什么不想更新到 Woodstox 4.2.0?它具有与 4.0 和 4.1 相同的组和工件 ID。
  • 是的,我尝试添加 woodstox-core-asl 4.2.0 maven 依赖项以及 woodstox stax2-api,但无论如何都会引发“无法创建安全的 XMLInputFactory”异常跨度>
  • 是否有可能以某种方式将多个 Stax 实现作为依赖项包含在内(如 BEA 的参考实现,或明确添加的 Sun SJSXP)?
  • 嗯,我认为这是可能的。您是否知道如何排除这些依赖关系,或者如何在 .pom 文件中为 cxf 设置首选(Woodstox)实现?
  • 这实际上是 CXF 特定的。但是你可以明确排除在 pom 中包含其他人;首先需要看看他们是否进入(使用“mvn dependency:tree”)。问题在于,如果 CXF 使用 SPI 样式的 stax impl 检测,则未指定选择之间的优先顺序。但它可能有特定的覆盖。

标签: java web-services cxf woodstox


【解决方案1】:

嗯,终于有办法了。首先,我要感谢 StaxMan 的帮助。

我的环境是: Weblogic 11g,CXF 2.7.5

问题是 WLS 已经包含 StAX API 和 xml 解析器的实现,这就是为什么应用程序在使用 CXF 时看不到 Woodstox 解析器的原因。

这里是 pom.xml:

        <!-- CXF -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
        </dependency>

以及主要部分——位于 resources/META-INF/ 中的 weblogic-application.xml:

    <prefer-application-packages>
        <package-name>com.ctc.wstx.*</package-name>
        <package-name>org.apache.*</package-name>
    </prefer-application-packages>

请注意,如果这样做可能会出现“NoClassDefinition”错误。如果是这样,请添加包含缺失类的 maven 依赖项。

希望这对某人有所帮助。

【讨论】:

  • 我的朋友,这很漂亮。非常感谢:)
  • 而且我认为这不是 weblogic 10 的选项
  • @Neron,我认为您的 WLS 中仍有一些包会影响配置。请参阅此stackoverflow.com/questions/12716673/… 帖子。
  • 我已经添加了你在解决方案中给出的必要的,但它没有帮助。这不应该那么痛苦:(
  • 很遗憾,但是对于 CXF,除了基本示例之外,总是很难让某些东西正常工作。有些人建议排除“javax.xml.*”包(带有“prefer-application-packages”)。你试过这个吗?上面的帖子中也给出了这种方法。
【解决方案2】:

这对我有用,没有 prefer-application-packages impl:

<dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-impl</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <!-- Jetty is needed if you're using the CXFServlet -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>${cxf.version}</version>
        </dependency>

【讨论】:

    【解决方案3】:

    目前我可以解决问题的唯一方法是在 spring 的上下文中添加这样的行:

    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject">
            <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
                <property name="targetClass" value="java.lang.System" />
                <property name="targetMethod" value="getProperties" />
            </bean>
        </property>
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
            <util:properties>
                <prop key="org.apache.cxf.stax.allowInsecureParser">true</prop>
            </util:properties>
        </property>
    </bean>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多