2011-11-29 26 views
9

tôi có các loại dữ liệu sau đây được định nghĩa trong một wsdl:thay đổi gói tạo ra lớp jaxb

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> 
    <wsdl:types> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0"> 
      <xs:simpleType name="MyEnum"> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="one"/> 
        <xs:enumeration value="two"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <!-- SNIP other data types --> 
     </xs:schema> 
    </wsdl:types> 
</wsdl:definitions> 

Tôi muốn MyEnum rơi vào gói riêng của mình. Vì vậy, tôi đã sử dụng một jaxws tập ràng buộc, và đã qua sử dụng XPath để đi qua các lược đồ và jaxb bindings để thiết lập các gói như sau:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']"> 
     <jxb:schemaBindings> 
      <jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace--> 
     </jxb:schemaBindings> 
     <jxb:bindings node="//xs:simpleType[@name='MyEnum']"> 
      <jxb:package name="a.b.c"/> <!-- this does not work --> 
     </jxb:bindings> 
    </jaxws:bindings> 
    <!-- SNIP - other functional jaxws bindings --> 
</jaxws:bindings> 

Bây giờ, con đường thiết lập trong schemaBindings mất - và đặt tất cả các loại dữ liệu từ schema/targetnamespace vào gói abra.ca.dabra. Tuy nhiên, tôi dường như không thể đặt gói của MyEnum - đó là những gì tôi muốn.

Tôi sử dụng wsdl2java của cxf để cung cấp tệp liên kết. Tui bỏ lỡ điều gì vậy?

+0

tôi gặp phải cùng vấn đề. Bạn đã giải quyết của bạn? – Rudy

+0

Tệp ràng buộc không đúng: tiền tố không gian tên 'jaxws' không bị ràng buộc với bất kỳ không gian tên nào. – whaefelinger

+0

Tương tự, tiền tố 'xs' không bị ràng buộc. – whaefelinger

Trả lời

0

Bạn đã cố thêm một lược đồ thứ hai vào WSDL chỉ chứa MyEnum, với một không gian tên khác? Định nghĩa lược đồ ban đầu sau đó sẽ nhập loại đó từ không gian tên mới.

2

tôi sẽ thử nó với một cái gì đó likethis:

<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 

<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 

<!-- set default package structure --> 
<jaxws:package name="abra.ca.dabra" /> 

<!-- set package structure for complex schema types --> 
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:simpleType[@name='MyEnum']"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="a.b.c" /> 
    </jaxb:schemaBindings> 
</jaxws:bindings> 

Để được chính xác hơn, bạn nên làm cho toàn bộ wsdl sẵn

Hope this helps ...

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