2011-08-22 27 views
7

Tôi có dịch vụ web thông thường của Microsoft và CXF bình thường của phiên bản mới nhất với Java/JDK 1.6, Eclipse, v.v. Khi tôi chạy wsdl2java, phần JAXB ném lỗi "Bị đẩy bởi JAXB: khai yếu tố không xác định 's: schema"Máy khách webservice và CXF của Microsoft: JAXB không hiểu "s: schema"

phần Mà wsdl khiến nó trông giống như:

<s:element name="GetDepartmentsResponse"> 
<s:complexType> 
    <s:sequence> 
    <s:element minOccurs="0" maxOccurs="1" name="GetDepartmentsResult"> 
    <s:complexType> 
    <s:sequence> 
     <s:element ref="s:schema" /> 
     <s:any /> 
    </s:sequence> 
    </s:complexType> 
    </s:element> 
    </s:sequence> 
</s:complexType> 
</s:element> 

tôi có thể chỉ cần loại bỏ <s:element ref="s:schema" /> ở khắp mọi nơi và giữ <s:any/>? Có vẻ như trở ngại phổ biến đối với Java < -> Khả năng intreroperability của Microsoft webservices. Nhưng tôi không thể tìm thấy bất kỳ giải pháp nào cho CXF.

Cảm ơn bạn

Trả lời

7

Thông thường bạn có thể loại bỏ lược đồ lược đồ. Bạn có thể cần phải thay đổi <s:any> thành <s:any maxOccurs="2"> hoặc tương tự để đảm bảo có chỗ cho cả phần tử lược đồ và bất kỳ thứ gì theo sau nó.

0

Cá nhân, tôi sẽ không đề xuất sửa đổi WSDL của bạn. WSDL đang xác định hợp đồng được áp đặt bởi dịch vụ, và nó không thực sự là một cái gì đó bạn nên thay đổi trong khách hàng của bạn. Nếu bạn nhìn vào câu trả lời ở đây https://stackoverflow.com/a/19126124/1732319 nó mô tả cách bạn có thể nhận được wsdl2java để đối phó với s:schema đúng cách.

Tôi đang sử dụng codegen maven Plugin CXF trong dự án của tôi và có cấu hình như sau:

<configuration> 
    <fork>once</fork> 
    <additionalJvmArgs>-Djavax.xml.accessExternalDTD=all -Djavax.xml.accessExternalSchema=all</additionalJvmArgs> 
    <sourceRoot>${project.build.directory}/generated-sources</sourceRoot> 
    <wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot> 
    <defaultOptions> 
     <bindingFiles> 
      <bindingFile>http://www.w3.org/2001/XMLSchema.xsd</bindingFile> 
      <bindingFile>${basedir}/src/main/resources/customisation.xjb</bindingFile> 
     </bindingFiles> 
    </defaultOptions> 
</configuration> 

customisation.xjb được lấy từ câu trả lời tôi tham khảo ở trên.

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