2012-03-05 21 views
5

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

+1

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). –

+0

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. –

Trả lời

10

Đâ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 printMethodparseMethod 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.parsecom.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. : -/

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