2010-02-28 9 views
6

Tôi có WSDL chứa 3 lược đồ bên trong phần tử "loại" của nó. Các lược đồ không được định nghĩa trong các XSD bên ngoài mà bên trong phần tử types.Tùy chỉnh JAXB - Nhiều lược đồ bên trong WSDL và schemaLocation

Tôi muốn tùy chỉnh phần tử bên trong giản đồ số 2 và thay đổi tên của nó để tránh xung đột.

Vì vậy, trong schemaLocation tôi có thể làm điều đó như thế nào? Mặc dù đưa ra câu hỏi tôi có cách để làm điều này:

schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2"> 
    ... 
    <jxb:bindings node="some xpath 

nhưng tôi không phải là người tìm thấy nó mà là đồng nghiệp của tôi, người không làm việc với tôi nữa. Có một nguồn tài nguyên mà tôi có thể tìm thấy lời giải thích cho nó ngay cả khi tôi hiểu nó? Một liên kết hoặc một cuốn sách? Một nơi nào đó tôi cũng có thể tìm thấy các ví dụ khác.

Vấn đề của tôi là giá trị schemaLocation (../ wsdl-files/mywsdl.wsdl # types? Schema2) không phải là xpath. Tôi muốn biết tất cả các khả năng để tham chiếu một lược đồ bên trong một WSDL. Tôi cần một tài liệu cho điều này hoặc một cái gì đó.

Thank you very much

+0

Vấn đề của tôi là giá trị schemaLocation (../ wsdl-files/mywsdl.wsdl #types? schema2) không phải là xpath vv Tôi muốn biết tất cả các khả năng để tham chiếu một lược đồ bên trong một WSDL vv. Tôi cần một tài liệu cho điều này hoặc một cái gì đó. Cảm ơn bạn lần nữa – DaTroop

+0

Bạn đang sử dụng công cụ nào để ràng buộc WSDL? – skaffman

+0

bạn nên chỉnh sửa câu hỏi của mình và đặt nội dung nhận xét của bạn vào đó dưới dạng phần "Cập nhật:". Sau đó xóa nhận xét. –

Trả lời

2

Các JAXB Ri v2.1 thêm hỗ trợ cho [Schema Component ĐỊNH DANH] [1], mà về mặt lý thuyết cho phép bạn tham khảo thành phần lược đồ một cách tượng trưng, ​​chứ không phải theo vị trí tập tin và xpath họ vị trí . Về nguyên tắc, điều này là đẹp hơn nhiều để sử dụng, nhưng tôi chưa bao giờ sử dụng nó bản thân mình.

Tôi không chắc chắn mức độ hỗ trợ này được hỗ trợ rộng rãi như thế nào. Có rất ít đề cập đến nó ở bất kỳ nơi nào khác ngoài mục blog đó. Nó đề cập đến nó là một phần của thông số được đề xuất cho JAXB 2.1, vì vậy nếu điều đó được thông qua, nó sẽ được thực hiện bởi mọi triển khai JAXB 2.1, bao gồm Java6. Có thể, tuy nhiên, nó chưa bao giờ thực sự được thêm vào spec.

+0

Cảm ơn người đàn ông! Rằng sẽ rất tốt. Nhưng bạn có bất cứ điều gì mô tả những điều sau: #types? Schema2 Cảm ơn! – DaTroop

+1

@DaUltimateTrooper: Điểm của SCD là bạn không cần phải xác định vị trí lược đồ trong tùy chỉnh ràng buộc, bạn tham khảo các phần tử lược đồ theo tên. – skaffman

+1

Từ những gì tôi tìm thấy, SCD vẫn chưa được hỗ trợ chính thức, nhưng Xjc của Sun sẽ sử dụng nó nếu đưa ra tùy chọn '-extension', và các công cụ phụ thuộc như CXF cũng làm việc với nó.Cú pháp này thậm chí còn khó khăn hơn so với XPATH nhưng nó có thể được thực hiện để làm việc. –

1

Có vấn đề tương tự (năm lược đồ trong các loại có tên phổ biến) và bằng cách nào đó không nhận được SCD hoạt động chính xác. Giải pháp của tôi đã được như sau:

custombinding.xml:

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

    <jxb:bindings schemaLocation="file:wsdlfile.wsdl" node="*/xs:schema[1]"> 
     <jxb:schemaBindings> 
      <jxb:package name="my.custom.package"/> 
     </jxb:schemaBindings> 
    </jxb:bindings> 
</jxb:bindings> 

gọi XJC trong ant build file:

<target name="xjc_generate"> 
    <exec executable="xjc" > 
     <arg value="-wsdl" /> 
     <arg value="${wsdl.base}/service/wsdlfile.wsdl" /> 
     <arg value="-d" /> 
     <arg value="${dir.src}" /> 
     <arg value="-b" /> 
     <arg value="${wsdl.base}/service/custombinding.xjb" /> 
    </exec> 
</target>