2009-04-24 21 views
34

Tôi đang cố gắng tạo một ứng dụng khách cho một số dịch vụ web SOAP bằng công cụ JD2 6 wsimport. WSDL được tạo bởi ứng dụng .NET 2.0. Đối với các ứng dụng .NET 3.X, nó hoạt động tốt.Sự cố tạo trình khách dịch vụ web Java SOAP bằng công cụ JDK của công cụ JDK từ WSDL được tạo bởi ứng dụng .NET 2.0

Khi tôi chạy

wsimport -keep -p mypackage http://myservice?wsdl 

nó cho thấy một số thông báo lỗi như thế này:

[LỖI] Một lớp/giao diện có cùng tên "mypackage.SomeClass" đã được sử dụng. Sử dụng tùy chỉnh lớp để giải quyết xung đột này. hàng ?? của http://myservice?wsdl

Khi tôi tạo ứng dụng khách dịch vụ web bằng Axis 1.4 (sử dụng trình cắm thêm WebTools Eclipse).

Có ai biết tôi có thể làm gì để sử dụng công cụ wsimport không? Tôi thực sự không hiểu những gì "tùy biến lớp" là điều.

Trả lời

81

Tôi không biết nếu điều này đã được giải quyết chưa, nhưng tôi đã dành thời gian để giải quyết vấn đề này.

Tôi tìm thấy một sửa chữa ở đây - https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228

Giải pháp là để chạy wsimport với -B-XautoNameResolution (không có khoảng trắng)

+0

Sự cố được giải quyết bằng cách thêm mã này vào sau lệnh 'wsimport'. Nhưng gốc của vấn đề này đối với tôi, có hai loại khác nhau với 'XResponse' liền kề và với dấu gạch dưới' X_Response' để nó xảy ra xung đột tên, nếu đặt tên sẽ dễ hiểu như 'XResponse' và' XResponseDefinition', sẽ không có vấn đề gì . – fiskra

0

Bạn có thể tạo tất cả các lớp từ tệp WSDL trong cùng một gói. Nếu đúng như vậy, hãy thử xác định một gói đích khác cho mỗi tệp WSDL bằng tùy chọn -p của wsimport.

+0

Đây thực sự không phải là vấn đề, tôi đã sử dụng tùy chọn -p khác. – razenha

19

Đối với bất cứ ai đọc bài viết này sử dụng maven, đây là làm thế nào để thêm nó vào tập tin .pom . Lưu ý các arg trong phần cấu hình. Điều này không dễ tìm thấy trong tài liệu. Rất cám ơn Isaac Stephens vì đã giúp đỡ anh.

<!-- definition for ERPStandardWork service --> 
<execution> 
    <id>ERPStandardWorkService</id> 
    <goals> 
    <goal>wsimport</goal> 
    </goals> 
    <configuration> 
    <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. --> 
    <args> 
     <arg>-B-XautoNameResolution</arg> 
    </args> 
    <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory> 
    <wsdlFiles> 
     <wsdlFile>ERPStandardWork.wsdl</wsdlFile> 
    </wsdlFiles> 
     <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl 
    </wsdlLocation> 
    <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag 
    </staleFile> 
    </configuration> 
</execution> 
+0

Im sử dụng Maven. Điều này đã giải quyết được vấn đề của tôi! Cảm ơn! – GabrielBB

0

Câu trả lời được chấp nhận ở trên sẽ giải quyết được vấn đề của bạn nhưng sẽ không khắc phục được nguyên nhân cơ bản.

Sự cố xảy ra do thao tác trong tệp wsdl của bạn có cùng tên với xsd: complexType trong tệp xsd của bạn - như ví dụ bên dưới. Tất cả các loại và hoạt động phải có tên duy nhất.

<xsd:complexType name="SearchDocuments"> 
     <xsd:sequence> 
     <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/> 
     </xsd:sequence> 
</xsd:complexType> 

<operation name="SearchDocuments"> 
     <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/> 
     <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/> 
</operation> 

Vì vậy, hãy kiểm tra hoạt động và loại của bạn. Đảm bảo không có tên nào trong số họ có cùng tên, nghĩa là không có tên trùng lặp.

Các vấn đề liên quan