2011-01-18 17 views
5

Tôi có tệp WSDL nhập một vài Lược đồ XML, mỗi lược đồ có cùng một không gian tên (hãy gọi nó là A). Tôi đang cố gắng sử dụng một tập tin gắn kết bên ngoài JAXB để thay đổi tên gói được tạo ra (để nói B) cho các lược đồ đó. Dưới đây là ví dụ:CXF: Làm thế nào để thay đổi gói Lược đồ XML được nhập bằng WSDL bằng cách sử dụng tệp ràng buộc bên ngoài JAXB?

Tôi có tệp POM chứa cấu hình để tạo mã từ WSDL (sử dụng cxf-codegen-plugin).

WSDL của tôi:

<definitions ...> 
    <types> 
     <xsd:schema elementFormDefault="qualified" targetNamespace="C"> 
      <xsd:import namespace="A" schemaLocation="SCHEMA_REF"/> 
      <xsd:import namespace="A" schemaLocation="SCHEMA_REF"/> 
      ... 
     </xsd:schema> 
    </types> 
    ... 
</definitions> 

Đây là tập tin liên kết thực tế của tôi mà không làm việc ở tất cả, có vẻ như nó không được áp dụng tại tất cả (không có thông báo lỗi ...).

<jaxws:bindings wsdlLocation="WSDL_LOCATION" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" jaxb:version="2.0"> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='C']/xs:import[@namespace='A']">. 
     <jaxb:schemaBindings> 
      <jaxb:package name="B" /> 
     </jaxb:schemaBindings> 
    </jaxws:bindings> 
</jaxws:bindings> 

Như tôi không có bất kỳ thông báo lỗi trong thế hệ có lẽ đó là vì các biểu thức XPath sử dụng để truy cập vào các schema nhập khẩu là không tốt ...

Do you guys có bất kỳ đầu mối? Tôi bị kẹt ở đây ...

Cảm ơn trước về các yếu tố đầu vào của bạn!

Trả lời

0

Thật thú vị, bạn không có câu trả lời :) Rất tiếc, không thể lưu trữ nội dung bạn muốn. Cách duy nhất là xác định các tệp ràng buộc riêng biệt cho mỗi tệp lược đồ mà bạn có, điều đó sẽ hoạt động tốt.

+0

Cảm ơn câu trả lời của bạn, tôi hiện không làm việc về chủ đề này vì vậy tôi không thể kiểm tra giải pháp này. Tôi sẽ càng sớm càng tốt! – reef

+0

Một bổ sung - bạn sẽ phải sử dụng không gian tên "jaxb" thuần túy cho các tệp XSD, "jaxws" sẽ không hoạt động với chúng. – Stas

1

Cố gắng viết bindings của bạn như-nếu schema-nhập khẩu đã được sáp nhập vào tài liệu WSDL, bằng cách tham khảo không gian tên của nó trực tiếp:

<jaxws:bindings wsdlLocation="WSDL_LOCATION" 
     xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
     jaxb:version="2.0"> 
    <jaxws:bindings 
     node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='A']">. 
    <jaxb:schemaBindings> 
     <jaxb:package name="B" /> 
    </jaxb:schemaBindings> 
</jaxws:bindings> 

này đã làm việc cho tôi. Kudos đến this post thể hiện hoạt động với giản đồ đã nhập.

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