2011-04-13 9 views
9

Tôi là người mới sử dụng CXF và đang cố tạo khách hàng từ WSDL. Tôi đã sử dụng Metro và Axis trong quá khứ. Tôi đã tải về apache-cxf-2.3.3 và sử dụng wsdl2java để tạo ra các cuống máy khách. Tôi sử dụng Maven và thiết lập nó pom của tôi với điều này:Đặt mức tuân thủ Java trong 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> 

Khi tôi xây dựng dự án, tôi nhận được các lỗi này:

[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() 

[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 

Dường như những vấn đề có liên quan đến thực tế là mã được tạo ra sử dụng các tính năng Java 6 (phần tử "require" cho XmlElementRef, các hàm tạo mới cho Dịch vụ) nhưng các phụ thuộc CXF Maven là dành cho Java 5.

Có cách nào để chỉ định rằng mã được tạo nên tuân thủ Java 5 không?

Trả lời

24

Trên thực tế, mã mà công cụ dòng lệnh WSDL2Java CXF của tương thích với Java 5, nó có khả năng không tương thích với Java 6. Lý do là nó tạo mã tương thích JAX-WS 2.2 và JAXB 2.2. Tuy nhiên, các phiên bản của các API này được bao gồm trong Java 6 chỉ là 2.1.

Có một vài lựa chọn:

1) dễ nhất là thêm "jaxws21 -fe" vào lệnh WSDL2Java để có nó tạo jaxws 2.1 mã thích hợp thay vì 2,2

2) Thêm 2,2 api lọ vào thư mục xác nhận của JDK bạn

3) Cấu hình plugin trình biên dịch trong maven để "ủng hộ" 2,2 lọ

+0

Cảm ơn bạn đã làm rõ về tính tương thích và sử dụng tùy chọn -fe. Mô tả trên http://cxf.apache.org/docs/wsdl-to-java.html không giải thích rõ ràng và người dùng có thể chỉ định phiên bản jax-ws nào cần sử dụng. – sdoca

+0

Tuyệt vời, nó hoạt động ngay bây giờ cho tôi. – Dax

0

wsdl2java documentation không đề cập đến bất kỳ tùy chọn nào để chỉ định phiên bản Java.

Bạn có thể thử sử dụng Maven cxf-codegen-plugin để tạo sơ đồ khách hàng, nên tôn trọng các phiên bản đích và nguồn của trình biên dịch Maven.

Nếu điều đó không làm việc, bạn có thể cấu hình Maven để sử dụng Java 6 bằng cách thay đổi các đường nguồn và mục tiêu trong pom, như vậy:

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

tôi không nghĩ Glassfish có một phiên bản của WSDL2Java. Tôi đã sử dụng wsimport khi tạo khách hàng Metro. Axis có một wsdl2java, nhưng tôi không có nó hiện đang được cài đặt. Sử dụng cxf-codegen-plugin sẽ tạo cùng một mã Java 6. – sdoca

+0

Tôi xin lỗi, bạn nói đúng. Đó là 'wsimport' cho phiên bản Metro. – Powerlord