2012-03-05 5 views
5

jaxbでは、xsdの文字列をjava.util.UUIDにどのように変換しますか?組み込みのデータ型コンバータはありますか、独自のカスタムコンバータを作成する必要はありますか?xs:stringをjaxbのjava.util.UUIDに変換します。

+1

[Blaise DoughanのXMLアダプタに関する記事](http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html)をご覧ください。 –

+0

明らかに既定のコンバーターがなく、自分で作成する必要があります。私がしたことは、以下の回答とほぼ同じでした。私は既存のbindings.xjbを持っていたので、単にそれを変更するのが少し楽になりました。ノードxpathは複数のノードで問題を抱えていましたが、別の話です:)ありがとう。彼の努力のために@mwsltnを選択します。 –

答えて

10

を使用すると、Javaクラスで始まり、JAXB注釈を使用する場合、これは行うことが容易にずっとです。ただし、スキーマを使用してこれを行うには、カスタムバインディングファイルを使用する必要があります。次に例を示します。

スキーマ:(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.xjb)は(printMethodparseMethodで簡潔にするために、私はUuidConverterクラスがデフォルトのパッケージにあったと仮定していることに注意してください。これらは、現実には、完全修飾でなければなりません。だから、パッケージcom.foo.barで、値が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ようにする必要がありUuidConverter場合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(); 
    } 
} 

悲しいことに、私は良い参考にあなたを指すことはできません。どのようにすべての作品がブログ投稿に広がっているかのビットと部分があります。この作業を初めて行うには数時間かかりました。 :/

関連する問題