2011-08-11 26 views
12

Tiện ích "wsimport" Java 6 JAX-WS thực hiện một công việc tuyệt vời khi tạo một bộ xương dịch vụ (giao diện) cho một tệp WSDL nhưng với một ngoại lệ gây phiền nhiễu cá nhân.Java SOAP "wsimport" - ép buộc ràng buộc từ tài liệu/chữ bọc WSDL?

Khi được đưa ra một WSDL mà sử dụng SOAP Document/literal wrapped style (also described here) nó tạo ra một giao diện dịch vụ với một "trần" SOAP binding parameter style (với nhiều đối số và trả lại giá trị mở rộng như "holder" objects trong chữ ký phương pháp) thay vì các tham số và trả lại đơn giản quấn giá trị được chỉ định bởi WSDL. Các công cụ khác, chẳng hạn như Axis2 wsdl2java chỉ cần sử dụng các phần tử trình bao bọc làm tham số đầu vào và giá trị trả về thay vì tự động "unwrapping" chúng.

Có thể nói "wsimport" để giữ các thông số liên kết SOAP là "được gói" thay vì "trần" không?

Trả lời

31

AFAIK, bạn cần phải xác định một tập tin tùy chỉnh ràng buộc để vô hiệu hóa các wrapper phong cách:

<bindings 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    wsdlLocation="OperationService.wsdl" 
    xmlns="http://java.sun.com/xml/ns/jaxws"> 
     <!-- Disable default wrapper style --> 
     <enableWrapperStyle>false</enableWrapperStyle> 
</bindings> 

và sau đó gọi wsimport

$ wsimport -b binding.xml OperationService.wsdl 
+2

+110 nhờ chỉ cho tôi đi đúng hướng! – maerics

14

Câu trả lời từ @ beny23 là đi đúng hướng ; Tuy nhiên, nó chỉ ra rằng bạn có thể embed the JAX-WS binding instructions into the WSDL file itself, loại bỏ sự cần thiết phải thêm "-b binding.xml" chuyển sang lệnh "wsimport":

<wsdl:portType name="HelloPortType"> 
    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 
    </jaxws:bindings> 
    <wsdl:operation name="sayHello">...</wsdl:operation> 
</wsdl:portType> 
+0

Nhưng điều đó không ảnh hưởng đến tất cả người dùng WSDL? Vì vậy, nếu bạn không muốn trình bao bọc bên cạnh bạn (hoặc máy khách hoặc máy chủ), nhưng đối tác của bạn làm ở phía bên kia, bạn đã cản trở chúng? – dbreaux

+1

@dbreaux vâng, có vẻ như vậy, đối với người dùng JAX-WS ít nhất; Tôi chỉ muốn chỉ ra một tùy chọn khác trong trường hợp nó phù hợp hơn với một số người dùng (chẳng hạn như bản thân tôi = P) – maerics