2014-12-15 13 views
10

Tôi đang sử dụng ant wsimport để tạo sơ khai khách hàng từ các wsdls. Ngoài ra, tôi muốn tạo ra các lớp khách hàng thực hiện Serializable. Tôi muốn tạo một khác nhau serialVersionUID cho mỗi lớp học. Tôi đã thử với tệp ràng buộc được hiển thị bên dưới. Nhưng nó tạo ra cùng một serialVersionUID cho tất cả các lớp. Có cách nào tôi có thể tự mình cung cấp serialVersionUID cho mỗi lớp học không?Tạo id tuần tự duy nhất cho mỗi lớp được tạo trong JAXB

<wsimport xendorsed="true" binding="binding.xml" debug="true" keep="true" 
verbose="false" sourcedestdir="${generated}" wsdl="${src}${wsdl.file}" 
wsdlLocation="${wsdl.file}"> 
</wsimport> 

cấu hình ràng buộc

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <globalBindings> 
     <serializable uid="1" />   
    </globalBindings>  
</bindings> 
+0

Waitaminute ... Nếu bạn triển khai 'Serializable', bạn đang ràng buộc bản thân để có hợp đồng cho cuộc sống; tạo ra _random_ UUID? – fge

+0

@fge OP không nói rằng anh ta muốn ngẫu nhiên 'uid', OP muốn 'khác nhau' cho các lớp khác nhau (tức là không phải lúc nào cũng giống nhau/'1'). Về mặt lý thuyết, có thể tạo ra một 'uid' dựa trên nội dung của lớp. Nội dung khác nhau - khác nhau 'uid' s. Vì vậy, câu hỏi có ý nghĩa với tôi. – lexicore

+0

'' chỉ có thể xảy ra trong '' [xem tại đây] (https://jaxb.java.net/jaxb20-ea/docs/vendorCustomizations. html). Dù sao bạn có thể thêm một công việc xung quanh bằng cách sử dụng ràng buộc cho mỗi phần tử được tạo ra. – Xstian

Trả lời

1

Đây là tập tin ràng buộc chúng tôi sử dụng, mà hiện các trick cho chúng tôi.

<xs:schema elementFormDefault="qualified" version="1.0" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.0" 
jaxb:extensionBindingPrefixes="xjc"> 
<xs:annotation> 
    <xs:appinfo> 
     <jaxb:globalBindings> 
      <xjc:serializable /> 
     </jaxb:globalBindings> 
    </xs:appinfo> 
</xs:annotation> 

+0

Đây không phải là một lược đồ hoàn chỉnh ... – markthegrea

+0

Không, nó không phải là một lược đồ hoàn chỉnh, mà là bit có liên quan để chèn vào lược đồ của bạn. Ít nhất, nó đã làm thủ thuật để chèn những dòng này vào tập tin WSDL của tôi. –

2

Chỉ cần cho các hồ sơ, không có cách nào để tạo ra một độc đáo serialVersionUID cho mỗi lớp được tạo ra vì nó không có ý nghĩa để làm như vậy.

Hãy để tôi giải thích: A serialVersionUID đại diện cho phiên bản của lớp học tại một thời điểm cụ thể. Nếu bạn sửa đổi lớp học, serialVersionUID của bạn sẽ thay đổi. Vì vậy, khi JDK deserialize các đối tượng của cùng một lớp, nó biết phiên bản nào của lớp của bạn để deserialize nó.

Trong trường hợp của JAXB, vì bạn tạo tất cả các lớp học cùng một lúc mỗi lần không có ý nghĩa đối với phiên bản tất cả các lớp riêng lẻ. Đơn giản vì chúng chỉ có thể thay đổi thành một nhóm. (Trừ khi bạn đưa chúng ra khỏi thư mục đích của mình ..)

Tôi hy vọng điều đó có ý nghĩa hơn một chút.

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