Подтвердить что ты не робот

Клиент веб-сервиса CXF: "Невозможно создать безопасный XMLInputFactory"

Я написал и развернул веб-службу CXF на сервере Tomcat, используя инструкции здесь. Веб-служба отлично развертывается, так как я вижу WSDL файл в веб-браузере.

Моя автономная клиентская программа 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

Я нашел страницу с сообщением о том, что "Невозможно создать безопасный XMLInputFactory" можно устранить, установив для свойства org.apache.cxf.stax.allowInsecureParser значение "1", поэтому я попытался установить его в свойствах системы, но это не сработало. Я также попытался добавить -Dorg.apache.cxf.stax.allowInsecureParser = 1 в команду java, которая запускает клиент, но это тоже не сработало. (Не устанавливал его как "true", а не 1.) Любые идеи о том, как решить эту ошибку?

4b9b3361

Ответ 1

Если эта проблема возникает при обновлении с CXF 2.3.x до 2.7.x

Добавлены банки stax2-api и woodstox-core-asl из 2.7.x CXF-дистрибутива, и веб-сервис снова работает.

Ответ 2

Начиная с версии 2.7.4, CXF добавил функцию, чтобы гарантировать, что XMLInputFactory защищен и загружен из woodstox ( >= 4.2.x пакетов, см. Внедрение StaxUtil), чтобы справиться с уязвимостью в службе отказа в обслуживании

Но дело в том, что в среде J2EE по умолчанию webservices-rt.jar имеет приоритет над военными библиотеками (а затем над банком древесного инвентаря). Вот почему небезопасная реализация загружается, вызывая исключение.

Отключив свойство org.apache.cxf.stax.allowInsecureParser, не является параметром, поскольку он возвращает уязвимость DOS.

Чтобы сделать загрузчик классов предпочтительнее woodstox (ear/war lib) над webservices-rt.jar (j2ee lib), решение зависит от вашего сервера приложений и описано в Руководство по конфигурации сервера приложений CXF

Ответ 3

У меня была аналогичная проблема

После добавления этого -Dorg.apache.cxf.stax.allowInsecureParser=1 в JAVA_OPTIONS в setDomainEnv.sh, теперь он работает нормально.

Ответ 4

У меня была эта проблема в weblogic и исправлена ​​проблема, добавив это в мой weblogic-application.xml

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

Ответ 5

Проверьте наличие каких-либо других версий древесного покрова, которые можно найти на пути к классам или в jre lib/, одобренном или аналогичным. Похоже, что более старая версия 4.1 может быть поднята.

Ответ 6

У меня была та же проблема, когда я обновил 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>

Ответ 7

Я попал в эту проблему, и это произошло потому, что, когда я обновлялся из более старой версии cxf, я не изменял stax-api - *. jar в stax2-api - *. jar в моем клиенте classpath.

Ответ 8

Если вы обновляетесь до версии 3.0.0 или новее, вы не должны добавлять woodstock зависимости

Ответ 9

Здесь не было ответа, в котором описывается основная причина этого сообщения об ошибке для моей проблемы. У нас были транзитивные зависимости как от новой версии Woodstox-ядро-ASL-4.2.0.jar и wstx-ASL-3.2.1.jar

Исключая старую версию нашей сборки, сделал трюк.

Если вы копаетесь в недрах старой версии, вы обнаружите, что это не удается с исключением, которое заканчивается тем, что завершается в другом исключении с этим общим сообщением, которое не очень информативно.

Ответ 10

Проблема заключалась в том, что некоторые отсутствующие файлы флагов CXF в развертывании веб-службы на сервере. Это было сложно отладить, поскольку на сервере не было ошибок.

Ответ 11

В моем случае были две банки (Cxf 3.0.1, Jboss 7.1.1)

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

org.codehaus.woodstox: stax2-апи: баночка: 3.1.4: компилировать

Я удалил 1-й и начал работать

Ответ 12

с моего конца, мне пришлось сделать оба раза: удалить 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>

Ответ 13

У меня была эта проблема в weblogic, Application get Deployed Successfully, но когда я уволил запрос на мыло, я получил эту ошибку: не могу создать безопасный XMLInputFactory.

исправлена ​​проблема, добавив этот пакет в weblogic-application.xml

com.ctc.wstx. *

Ответ 14

Я просмотрел свои зависимости, чтобы найти конфликт версий с woodstox или stax-api.

Оказывается, что axis2-transport-http ввел эти конфликты.

Если у вас также есть эта зависимость, добавьте следующее исключение в вашу зависимость pom, которая ввела его

<exclusions>
            <exclusion>
                <groupId>org.apache.axis2</groupId>
                <artifactId>axis2-transport-http</artifactId>
            </exclusion>
        </exclusions>

Ответ 15

Я могу решить эту проблему, добавив weblogic.xml в папку WEB-INF моего приложения со следующим кодом:

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

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

Ответ 16

1: -Dorg.apache.cxf.stax.allowInsecureParser = 1 для JAVA_OPTIONS
или
2: переименовать woodstox-core-asl-4.4.1.jar → awoodstox-core-asl-4.4.1.jar