7

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

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

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

提前致谢。

4

3 回答 3

6

嗯,终于有办法了。首先,我要感谢 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>

和主要部分 - weblogic-application.xml 位于 resources/META-INF/ :

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

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

希望这可以帮助某人。

于 2013-07-10T07:57:38.903 回答
4

没有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>
于 2013-07-16T14:39:19.327 回答
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>
于 2013-06-04T08:58:59.653 回答