web-dev-qa-db-ja.com

CXF Webサービスクライアント:「安全なXMLInputFactoryを作成できません」

here の指示に従って、CXF Webサービスを作成してTomcatサーバーにデプロイしました。 WebブラウザでWSDLファイルを確認できるため、Webサービスは正常にデプロイされます。

私のスタンドアロンJavaクライアントプログラムは動作しません。ここにコードがあります。

System.out.println("Creating client");
Properties properties = System.getProperties();
properties.put("org.Apache.cxf.stax.allowInsecureParser", "1");
System.setProperties(properties);
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ExampleWebService.class);
factory.setAddress("http://X.X.X.X:9090/WebServices/ExampleWebService");
ExampleWebService exampleWebService = (ExampleWebService)factory.create();
System.out.println("Done creating client");
exampleWebService.method1("test");
System.out.println("After calling method1");

すべてのjarファイル(woodstox-core-asl-4.2.0.jarファイルを含む)をCXF 2.7.7ディストリビューションからクライアントプログラムのクラスパスにコピーしました。クライアントを実行すると、次の例外が発生します。

Creating client
Nov 20, 2013 8:05:26 PM org.Apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://webservices.server/}ExampleWebServiceService from class server.webservices.ExampleWebService
Done creating client
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
    at org.Apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.Java:157)
    at $Proxy38.printString(Unknown Source)
    at ExampleNmsWebServiceClient.printString(ExampleNmsWebServiceClient.Java:29)
    at ExampleNmsWebServiceClient.main(ExampleNmsWebServiceClient.Java:40)
Caused by: org.Apache.cxf.binding.soap.SoapFault: Cannot create a secure XMLInputFactory
    at org.Apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.Java:84)
    at org.Apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.Java:51)
    at org.Apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.Java:40)
    at org.Apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.Java:272)
    at org.Apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.Java:113)
    at org.Apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.Java:69)
    at org.Apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.Java:34)
    at org.Apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.Java:272)
    at org.Apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.Java:835)
    at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.Java:1606)
    at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.Java:1502)
    at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.Java:1309)
    at org.Apache.cxf.transport.AbstractConduit.close(AbstractConduit.Java:56)
    at org.Apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.Java:627)
    at org.Apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.Java:62)
    at org.Apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.Java:272)
    at org.Apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.Java:565)
    at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:474)
    at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:377)
    at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:330)
    at org.Apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.Java:96)
    at org.Apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.Java:135)
    ... 3 more

Org.Apache.cxf.stax.allowInsecureParserプロパティを「1」に設定することで「安全なXMLInputFactoryを作成できません」という問題を修正できるというページが見つかりました。そのため、システムプロパティで設定しようとしましたが、動作しません。また、-Dorg.Apache.cxf.stax.allowInsecureParser = 1をJavaクライアントを実行するコマンドに追加しようとしましたが、どちらも機能しませんでした。このエラーを解決する方法についてのアイデアはありますか?

25
pacoverflow

CXF 2.3.xから2.7.xにアップグレードするときにこの問題が発生しました

2.7.x CXFディストリビューションからstax2-apiおよびwoodstox-core-asl jarを追加し、Webサービスが再び機能するようになりました。

25
Lund Wolfe

バージョン2.7.4以降、CXFはXMLInputFactoryが保護され、woodstox(> = 4.2.xパッケージ、 StaxUtil実装 を参照)からロードされることを保証するための機能を追加しました- サービス拒否の脆弱性

ただし、J2EE環境では、デフォルトで、webservices-rt.jarがwar libs(およびwoodstock jar)よりも優先されます。そのため、非セキュアな実装がロードされ、例外がトリガーされます。

Org.Apache.cxf.stax.allowInsecureParserプロパティをオフにすると、はDOSの脆弱性を取り戻すため、オプションではありません。

クラスローダーがwebservices-rt.jar(j2ee lib)よりもwoodstox(ear/war lib)を優先するようにするため、ソリューションはアプリケーションサーバーに依存し、 CXFアプリケーションサーバー特定の構成ガイド

18
yunandtidus

同様の問題がありました

これを追加した後-Dorg.Apache.cxf.stax.allowInsecureParser=1からJava_OPTIONS in setDomainEnv.sh、今は問題なく動作しています。

17
Krish

私はweblogicでこの問題を抱えていて、これをweblogic-application.xmlに追加して問題を修正しました

<prefer-application-packages>
       <package-name>com.ctc.wstx.*</package-name>
</prefer-application-packages>
13
ghost_1989

クラスパスまたはjreのlib/endorsedまたは同様のもので見つかる他のバージョンのwoodstoxを確認してください。古い4.1バージョンがピックアップされているようです。

9
Daniel Kulp

CXFを2.7.xにアップグレードしたときに同じ問題が発生しました。 POMに次の依存関係を追加することでこれを解決しました

<dependency>
    <groupId>org.codehaus.woodstox</groupId>
    <artifactId>stax2-api</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.codehaus.woodstox</groupId>
    <artifactId>woodstox-core-asl</artifactId>
    <version>4.4.1</version>
</dependency>
4
Vaibhav

私の問題に対するこのエラーメッセージの根本的な原因を説明する回答はありませんでした。新しいバージョンwoodstox-core-asl-4.2.0.jarと古いwstx-asl-3.2.1.jarの両方に推移的な依存関係がありました

私たちのビルドから古いバージョンを除外することは、トリックをしました。

古いバージョンの腸を掘り下げると、非常に有益ではないこの一般的なメッセージで別の例外にラップされる例外で失敗することがわかります。

4
Tom Hartwell

この問題に遭遇したのは、古いバージョンのcxfからアップグレードしたときに、クライアントクラスパスでstax-api-*。jarをstax2-api-*。jarに変更しなかったためです。

2
Peter Jamieson

3.0.0以降にアップグレードする場合、should n't add woodstock依存関係

2
Jad B.

私の場合、2つのjarがありました(Cxf 3.0.1、Jboss 7.1.1)

javax.xml.stream:stax-api:jar:1.0-2:compile

org.codehaus.woodstox:stax2-api:jar:3.1.4:compile

私は最初のものを削除し、それが動作し始めました

0
Praveen

私の最後から、stax-api-1.0-2.jarを削除し(stax2-api-3.1.4.jarとwoodstock 4.4 jarを残して)、最後にweblogic-application.xmlで指定する必要がありました。 :

     .
     .
     <package-name>com.ctc.wstx.*</package-name>  
     <package-name>org.codehaus.stax2.*</package-name>
 </prefer-application-packages>
0
Carlos Guizar

問題は、サーバー上のWebサービスのデプロイメントでCXF jarファイルが欠落していたことです。サーバーにエラーがなかったため、これはデバッグが困難でした。

0
pacoverflow

依存関係を調べて、woodstoxまたはstax-apiとのバージョンの競合を見つけました。

Axis2-transport-httpがこれらの競合を引き起こしたことがわかりました。

この依存関係がある場合は、それを導入したpom依存関係に次の除外を追加してください

<exclusions>
            <exclusion>
                <groupId>org.Apache.axis2</groupId>
                <artifactId>axis2-transport-http</artifactId>
            </exclusion>
        </exclusions>
0
Yoozzii

この問題を解決するには、次のコードでアプリのWEB-INFフォルダーにweblogic.xmlを追加します。

<prefer-web-inf-classes>false</prefer-web-inf-classes>

<prefer-application-packages>
    <package-name>com.ctc.*</package-name>
</prefer-application-packages>
0

私はweblogicでこの問題を抱えていましたが、アプリケーションが正常にデプロイされましたが、soap-requestを起動したときにこの障害が発生しました:安全なXMLInputFactoryを作成できません。

このパッケージをweblogic-application.xmlに追加して問題を修正

com.ctc.wstx。*

0
Megha