2013-06-03 9 views
7

In der CXF-Dokumentation heißt es, dass die Version 2.7.x die Verfügbarkeit von Woodstox-Jars, die nicht unter der Version 4.2.0 stehen, im Klassenpfad erfordert.CXF 2.7.x Woodstox-Kompatibilität über Maven

Kann jemand bitte Maven-Abhängigkeiten für Woodstox vorschlagen, um mit CXF zu arbeiten?

Das Hauptproblem ist, wenn ich versuche, den CXF-Client zu verwenden, eine Ausnahme "Kann eine sichere XMLInputFactory erstellen" ausgelöst wird. Laut verschiedenen Foren (for example) ist es möglich, die Systemeigenschaft "org.apache.cxf.stax.allowInsecureParser" zu verwenden, um das Problem zu lösen, aber es scheint kein guter Weg zu sein. So dass Maven Abhängigkeiten sind der Weg zu gehen ...

Vielen Dank im Voraus.

+0

Warum gehst du nicht zu Woodstox 4.2.0 aktualisieren? Es hat die gleiche Gruppe und Artefakt-IDs wie 4.0 und 4.1. – StaxMan

+0

Ja, ich habe versucht, die Woodstox-Core-Asl 4.2.0 Maven-Abhängigkeit und auch die Woodstox Stax2-API hinzuzufügen, aber die "Kann keine sichere XMLInputFactory" Ausnahme wird trotzdem ausgelöst – Dmitry

+2

Ist es möglich, dass irgendwie mehrere Stax-Implementierungen können als Abhängigkeiten enthalten sein (wie die Referenzimplementierung von BEA oder explizit hinzugefügtes Sun SJSXP)? – StaxMan

Antwort

6

Nun, endlich habe ich eine Lösung. Zuallererst möchte ich StaxMan für eine Hilfe danken.

Meine Umgebung ist: 11g Weblogic, CXF 2.7.5

Das Problem ist WLS enthält bereits Implementierungen für StAX API und XML-Parser, deshalb ist eine Anwendung nicht die Woodstox Parser nicht sehen, wenn CXF verwenden.

ist die 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> 

und der Hauptteil - der WebLogic-application.xml in den Ressourcen gelegen/META-INF /:

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

Beachten die Tatsache, dass dann die "NoClassDefinition" -Fehler auftreten können. Wenn ja, fügen Sie bitte maven-Abhängigkeiten hinzu, die fehlende Klassen enthalten.

Hoffe, das hilft jemandem.

+0

Mein Freund , Das ist schön. Vielen Dank :) – Neron

+0

Und ich denke, es ist keine Option für Weblogic 10 – Neron

+0

@Neron, ich denke, es gibt noch einige Pakete in Ihrem WLS, die die Konfiguration zu bremsen.Bitte beachten Sie diese http://stackoverflow.com/questions/12716673/override-jax-ws-version-use-by-weblogic-10-dynamic-wsdl-with-inline-schemas Beitrag. – Dmitry

3

Der einzige Weg, jetzt habe ich das Problem lösen kann, ist eine solche Linien im Frühjahr Kontext hinzuzufügen:

<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

Danke Dmitry, ich hatte das gleiche Problem und jetzt ist es gelöst http://stackoverflow.com/questions/38366024/apache-cxf-client-in-weblogic-throwing-cannot-create-a-secure-xmlinputfactory – ravi

4

für mich Dies funktionierte ohne bevorzugen-application-Pakete 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

Schöne Lösung !! – Dmitry

Verwandte Themen