Trong jaxb, làm thế nào để bạn chuyển đổi một chuỗi trong xsd sang java.util.UUID? Có trình chuyển đổi loại dữ liệu tích hợp hay tôi phải tạo trình chuyển đổi tùy chỉnh của riêng mình?Chuyển đổi xs: string thành java.util.UUID trong jaxb
Trả lời
Đây là nhiều dễ dàng hơn để làm gì nếu bạn bắt đầu với lớp Java và sử dụng các chú thích JAXB. Tuy nhiên, để làm điều này bằng cách sử dụng lược đồ, bạn phải sử dụng một tập tin ràng buộc tùy chỉnh. Dưới đây là một ví dụ:
Schema: (example.xsd)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com"
xmlns="http://www.example.com"
elementFormDefault="qualified">
<xs:simpleType name="uuid-type">
<xs:restriction base="xs:string">
<xs:pattern value=".*"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="example-type">
<xs:all>
<xs:element name="uuid" type="uuid-type"/>
</xs:all>
</xs:complexType>
<xs:element name="example" type="example-type"/>
</xs:schema>
Bindings: (bindings.xjb) (Lưu ý rằng cho ngắn gọn trong printMethod
và parseMethod
Tôi cho rằng lớp UuidConverter
là trong gói mặc định . những nên có đủ điều kiện trong thực tế. Vì vậy, nếu UuidConverter
nơi trong gói com.foo.bar
sau đó các giá trị nên được như thế com.foo.bar.UuidConverter.parse
và com.foo.bar.UuidConverter.print
<!-- Modify the schema location to be a path or url -->
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
node="/xs:schema"
schemaLocation="example.xsd">
<!-- Modify this XPATH to suit your needs! -->
<jxb:bindings node="//xs:simpleType[@name='uuid-type']">
<jxb:javaType name=" java.util.UUID"
parseMethod="UuidConverter.parse"
printMethod="UuidConverter.print"/>
</jxb:bindings>
</jxb:bindings>
UuidConver ter.java:
import java.util.UUID;
public class UuidConverter {
public static UUID parse(String xmlValue) {
return UUID.fromString(xmlValue);
}
public static String print(UUID value) {
return value.toString();
}
}
Đáng buồn là tôi không thể chỉ cho bạn một tham khảo tốt vì nó thực sự không được ghi nhận. Có các bit và phần của cách tất cả các công trình trải ra trong bài viết trên blog. Đã cho tôi một vài giờ để làm cho công việc này lần đầu tiên. : -/
Tạo một chuyển đổi đơn giản tự hỏi:
UUID.fromString(String uuid);
http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html
- 1. Java: JAXB: So sánh JAXBElement <Calendar> thành xs: ngày không chính xác
- 2. Python: Chuyển đổi từ Tuple thành String?
- 3. Chuyển đổi std :: string thành số nguyên
- 4. Chuyển đổi QString thành std :: string
- 5. chuyển đổi Rcpp :: CharacterVector thành std :: string
- 6. Chuyển đổi một void * thành std :: string
- 7. Jaxb: cách unmarshall xs: bất kỳ phần chuỗi XML nào?
- 8. chuyển đổi std :: string thành basic_ostream?
- 9. Chuyển đổi uint64_t thành std :: string
- 10. Chuyển đổi đối tượng XMLDocument thành String trong Javascript
- 11. C# Chuyển đổi Danh sách <string> thành Từ điển <string, string>
- 12. Chuyển đổi chuỗi bị xóa thành từ điển <string, string> trong C#
- 13. String để chuyển đổi enum trong C#
- 14. `dirname ': không thể chuyển đổi nil thành String (TypeError)
- 15. Chuyển đổi chuỗi C thành kiểu C++ std :: string
- 16. Chuyển đổi std :: string thành std :: vector <char>
- 17. Làm thế nào để chuyển đổi/cast dài thành String?
- 18. Chuyển đổi mảng chuỗi thành Danh sách <string>
- 19. chuyển đổi Object [] từ một keyset hashmap thành String []?
- 20. type = "xs: string" HOẶC type = "xsd: string" trong giao thức SOAP
- 21. Chuyển đổi String để Integer
- 22. MATLAB: Java String [] chuyển đổi
- 23. Làm thế nào để chuyển đổi std :: string thành NSString?
- 24. Loại mảngError: không thể chuyển đổi Fixnum thành String
- 25. Chuyển đổi kết quả Java thành mảng String
- 26. Làm thế nào để chuyển đổi ActiveSupport :: SafeBuffer thành String?
- 27. thể không mặc nhiên chuyển đổi loại 'string' thành 'bool'
- 28. không thể chuyển đổi từ 'string' thành 'char []' cho chia
- 29. Làm thế nào để chuyển đổi Platform :: String thành char *?
- 30. Tùy biến javaType JAXB trên xs: integer tạo @XmlElement với "type = String.class"
Hãy xem [bài đăng của Blaise Doughan về các bộ điều hợp XML] (http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html). –
Rõ ràng không có trình chuyển đổi mặc định và tôi phải tạo công cụ chuyển đổi của riêng mình. Những gì tôi đã làm khá giống với các câu trả lời được cung cấp bên dưới. Tôi đã có một bindings.xjb hiện có để nó dễ dàng hơn một chút khi sửa đổi nó. Điều xpath nút có vấn đề trên nhiều nút nhưng đó là một câu chuyện khác :) Cảm ơn các bạn. Tôi sẽ chọn @mwsltn cho nỗ lực của anh ấy. –