jAXB学习 (二)类型绑定_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > jAXB学习 (二)类型绑定

jAXB学习 (二)类型绑定

 2013/7/20 12:56:49  Josh_Persistence  程序员俱乐部  我要评论(0)
  • 摘要:上面一节简单介绍了怎么入门JAXB,这节介绍怎么自定义绑定类型。JAXB会有一些默认的类型匹配,以下是一张匹配表:XMLSchemaTypeJavaDataTypexsd:stringjava.lang.Stringxsd:integerjava.math.BigIntegerxsd:intintxsd.longlongxsd:shortshortxsd:decimaljava.math.BigDecimalxsd:floatfloatxsd:doubledoublexsd
  • 标签:学习

上面一节简单介绍了怎么入门JAXB,这节介绍怎么自定义绑定类型。

?

?

?

JAXB会有一些默认的类型匹配,以下是一张匹配表:

?

?

XML Schema Type?????????? Java Data Type

?

class="cCode">xsd:string java.lang.String xsd:integer java.math.BigInteger xsd:int int xsd.long long xsd:short short xsd:decimal java.math.BigDecimal xsd:float float xsd:double double xsd:boolean boolean xsd:byte byte xsd:QName javax.xml.namespace.QName xsd:dateTime javax.xml.datatype.XMLGregorianCalendar xsd:base64Binary byte[] xsd:hexBinary byte[] xsd:unsignedInt long xsd:unsignedShort int xsd:unsignedByte short xsd:time javax.xml.datatype.XMLGregorianCalendar xsd:date javax.xml.datatype.XMLGregorianCalendar xsd:g javax.xml.datatype.XMLGregorianCalendar xsd:anySimpleType java.lang.Object xsd:anySimpleType java.lang.String xsd:duration javax.xml.datatype.Duration xsd:NOTATION javax.xml.namespace.QName

?

可以看到dateTime对应的类为"

?

javax.xml.datatype.XMLGregorianCalendar",通常这不会是我们想要的,可能我们更希望是java.util.Calendar。

?

要实现这种绑定,就需要我们自定义了。

在JAXB中,可能通过定义一个binding文件来实现自定义绑定类型,例如要匹配dateTime到"java.util.Calendar

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0"
     xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <globalBindings>
        <javaType name="java.util.Calendar" xmlType="xs:date"
         parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
         printMethod="javax.xml.bind.DatatypeConverter.printDate" />
    </globalBindings>
</bindings>

?

要使用自定义的解析方法也可以,例如:

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
 version="2.0"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <globalBindings>
    <javaType name="java.util.Date" xmlType="xs:date"
      parseMethod="com.liulutu.jaxb.DateAadpter.parseDate"
      printMethod="com.liulutu.jaxb.DateAdapter.printDate"
    />
  </globalBindings>
</binding>

?

这里你需要行在src下定义一个com.liulutu.jaxb.DateAadpter类,并提供printDate和parseDate方法。如下:package?com.liulutu.jaxb;?

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
 version="2.0"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <globalBindings>
    <javaType name="java.util.Date" xmlType="xs:date"
      parseMethod="com.liulutu.jaxb.DateAadpter.parseDate"
      printMethod="com.liulutu.jaxb.DateAdapter.printDate"
    />
  </globalBindings>
</binding>

?

?

然后运行命令时加 -b 参数指定binding文件:

xjc.bat?students.xsd?-d?src?-p?com.liulutu.student.model?-b?bindings.xml

?

?

?

?

?

?

?

?

?

发表评论
用户名: 匿名