2013-06-03 8 views
7

W dokumentacji CXF mówi się, że wersja 2.7.x wymaga, aby słoiki Woodstox nie w wersji 4.2.0 były dostępne w ścieżce klas.CXF 2.7.x Kompatybilność z Woodstoxem za pośrednictwem Maven

Czy ktoś może zaproponować zależności Maven dla Woodstox do pracy z CXF?

Głównym problemem jest to, kiedy próbuję użyć klienta cxf, generowany jest wyjątek "Nie można utworzyć bezpiecznego XMLInputFactory". Według różnych forów (for example), możliwe jest użycie właściwości systemowej "org.apache.cxf.stax.allowInsecureParser" w celu rozwiązania problemu, ale wydaje się, że nie jest to dobry sposób. Tak więc zależności między użytkownikami to ...

Z góry dziękuję.

+0

Dlaczego nie chcesz zaktualizować do Woodstox 4.2.0? Ma takie same identyfikatory grup i artefaktów jak w wersji 4.0 i 4.1. – StaxMan

+0

Tak, próbuję dodać zależność woodstox-core-asl 4.2.0 oraz woodstox stax2-api, ale wyjątek "Nie można utworzyć bezpiecznego XMLInputFactory" jest tak czy inaczej – Dmitry

+2

Czy to możliwe, że w jakiś sposób wiele implementacji Stax? może być dołączony jako zależności (np. implementacja referencyjna BEA, lub Sun SJSXP jawnie dodane)? – StaxMan

Odpowiedz

6

Cóż, w końcu mam rozwiązanie. Przede wszystkim chciałbym podziękować StaxManowi za pomoc.

Moje środowisko jest: WebLogic 11g, CXF 2.7.5

Problemem jest WLS zawiera już implementacje dla Stax API i XML parserami dlatego aplikacja nie widzi parser Woodstox przy użyciu CXF.

Oto 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> 

i główną część - WebLogic-application.xml się w zasobach/META-INF /:

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

Bądź świadomy fakt, że jeśli to zrobi, mogą wystąpić błędy "NoClassDefinition". Jeśli tak, dodajmy zależności, które zawierają brakujące klasy.

Mam nadzieję, że to pomoże komuś.

+0

Mój przyjaciel , to jest piękne. To bardzo dużo :) – Neron

+0

I myślę, że nie jest to opcja dla weblogic 10 – Neron

+0

@Neron, Myślę, że wciąż są jakieś pakiety w twoim WLS, które hamują konfigurację.Zobacz ten http://stackoverflow.com/questions/12716673/override-jax-ws-version-used-by-weblogic-10-dynamic-wsdl-with-inline-schemas post. – Dmitry

3

Jedynym sposobem na teraz mogę rozwiązać tego problemu jest dodanie takich linii w kontekście sprężyny:

<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> 
+0

Dzięki Dmitry, miałem ten sam problem, a teraz jest rozwiązany http://stackoverflow.com/questions/38366024/apache-cxf-client-in-weblogic-throwing-cannot-create-a-secure-xmlinputfactory – ravi

4

ten pracował dla mnie bez preferują-application-pakietów 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> 
+0

Ładne rozwiązanie !! – Dmitry

Powiązane problemy