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>

主要部分 -- 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 依存関係を追加してください。

これが誰かに役立つことを願っています。

于 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

今のところ問題を解決できる唯一の方法は、春のコンテキストにそのような行を追加することです:

<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 に答える