2011-04-13 13 views
9

Jestem nowy w CXF i próbuję utworzyć klienta z WSDL. Używałem Metro i Axis w przeszłości. Pobrałem apache-cxf-2.3.3 i użyłem wsdl2java do wygenerowania kodu pośredniczącego klienta. Używam Maven i ustawić go mój pom z tym:Ustaw poziom zgodności Java w CXF wsdl2java

<properties> 
    <cxf.version>2.3.3</cxf.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-security</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <inherited>true</inherited> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.5</source> 
       <target>1.5</target> 
       <optimize>true</optimize> 
       <debug>true</debug> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Kiedy budować projektu, otrzymuję te błędy:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project client-cxf: Compilation failure: Compilation failure: 
[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\webservice\ServiceRuntimeException.java:[38,149] cannot find symbol 
[ERROR] symbol : method required() 

i

[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\snmpv2\MyService.java:[76,8] cannot find symbol 
[ERROR] symbol : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[]) 
[ERROR] location: class javax.xml.ws.Service 

Wydaje się, że problemy związane są z faktem, że wygenerowany kod wykorzystuje funkcje Java 6 ("wymagany" element dla XmlElementRef, nowe konstruktory dla usługi), ale zależności CXF Maven są dla języka Java 5.

Czy istnieje sposób na określenie, że wygenerowany kod powinien być zgodny z Java 5?

Odpowiedz

24

Właściwie kod wsdl2java narzędzia wiersza poleceń CXF za jest kompatybilny z Javą 5, prawdopodobnie nie jest kompatybilny z Javą 6. Powodem jest to, że generuje kod zgodny z JAX-WS 2.2 i JAXB 2.2. Jednak wersje tych API zawarte w Javie 6 to tylko 2.1.

Istnieje kilka opcji:

1) Najłatwiej jest dodanie "-FE jaxws21" do komendy wsdl2java mieć generuje kod zgodny JAXWS 2.1 zamiast 2.2

2) Dodać 2,2 api słoiki z zatwierdzonym katalogu JDK

3) Konfiguracja wtyczki kompilatora w Maven do „poparcia” 2,2 słoiki

+0

Dziękujemy za wyjaśnienie zgodności i użycie opcji -fe. Opis na http://cxf.apache.org/docs/wsdl-to-java.html nie wyjaśnia tego dobrze i można wskazać, której wersji jax-ws należy użyć. – sdoca

+0

Doskonały, działa teraz dla mnie. – Dax

0

W obiekcie wsdl2java documentation nie podano żadnych opcji określających wersję Java.

Możesz spróbować użyć Maven cxf-codegen-plugin do wygenerowania kodu pośredniczącego klienta, który powinien respektować wersję źródłową i docelową kompilatora Maven.

Jeśli to nie zadziała, można skonfigurować Maven używać Java 6 zmieniając źródłowe i docelowe linie w pom, tak:

   <source>1.6</source> 
       <target>1.6</target> 
+0

nie sądziłem GlassFish ma wersję wsdl2java. Użyłem wsimport podczas generowania klientów Metro. Oś ma wsdl2java, ale nie mam jej aktualnie zainstalowanej. Korzystanie z wtyczki cxf-codegen tworzy ten sam kod Java 6. – sdoca

+0

Przykro mi, masz rację. To 'wsimport' dla wersji Metro. – Powerlord

Powiązane problemy