2010-02-01 19 views
21

Tôi có vấn đề sau: Tôi đang sử dụng tác vụ kiến ​​wsimport để tạo ứng dụng khách webservice (cho salesforce.com). Mọi thứ đều hoạt động tốt nhưng các lớp được tạo ra đều sử dụng lớp JAXBElement kỳ lạ này cho tất cả các thuộc tính bean.Loại bỏ JAXBElement trong các lớp được tạo bởi wsimport gọi là ant

Ví dụ:

public void setLastName(JAXBElement<String> value) { 
    this.lastName = ((JAXBElement<String>) value); 
} 

public JAXBElement<String> getCountry() { 
    return country; 
} 

Thay vì gói tất cả các lớp trong JAXBElement Tôi muốn có những phương pháp đơn giản như setLastName (String newLastName). Đó là cách tôi gọi nhiệm vụ wsimport.

<wsimport debug="false" verbose="false" keep="${keep}" 
    extension="${extension}" destdir="${tmp.metro}" 
    wsdl="${licensing.wsdl}" 
    sourcedestdir="${licensingws.generated.src}" 

    > 

    <binding dir="${basedir}/etc" includes="${client.binding}" 
    /> 
    <arg value="-B-XautoNameResolution" /> 

    </wsimport> 

Nhiệm vụ được định nghĩa theo cách này:

Không ai biết những gì tôi phải thiết lập để wsimport mà tạo ra các lớp học theo cách tôi muốn? Cảm ơn rất nhiều trước !!!

Trả lời

25

Lý do sử dụng trình bao bọc JAXBElement trong các bean được tạo có lẽ là WSDL tuyên bố trường là cả hai tùy chọn và không có. Để phân biệt giữa "không hiện diện" và "hiện tại, nhưng không", loại Chuỗi không thể được sử dụng trực tiếp, vì Chuỗi trong cả hai trường hợp sẽ là rỗng.

Nếu bạn không cần phải phân biệt giữa hai tình huống, bạn có thể configure the code generator để sử dụng loại Chuỗi thay thế. Tôi không chắc chắn 100% làm thế nào để làm điều này với nhiệm vụ kiến, nhưng có thể bạn sẽ tìm thấy thông tin liên quan trong tài liệu tác vụ kiến.

+7

cảm ơn, tôi giải quyết nó bằng cách sử tập tin liên kết này: khai báo trong build.xml như sau: \t \t \t \t \t \t \t \t \t \t \t MisterY

+0

cảm ơn, lưu lại cho tôi rất nhiều thời gian –

+1

Để cấu hình các tập tin jaxws bindings, xem liên kết này: http : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

Tôi đã gặp phải sự cố tương tự.

Tôi đã sử dụng dưới đây ràng buộc XML trong khi trần wsimport: với tham chiếu đến số link này.

Binding tập tin

<jaxb:bindings version="2.1" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:globalBindings generateElementProperty="false"/> 
</jaxb:bindings> 

mẫu wsimport lệnh:

wsimport -keep <WSDL_location> -b employerServiceWSD 
L_binding.xjb 

Lưu ý: employerServiceWSDL_binding.xjb chứa của trên ràng buộc nhập xml.

Hy vọng nó cũng sẽ hoạt động cho các ứng dụng khác.