2011年6月9日 星期四

客製化Sun的JAXB implemtation--XJC

使用Sun的XJC建立Java code時,預設遇xml schema中有fixed attribute時,不會自動把它轉成Java的constant,要達到這個目的,必需客製化XJC的 binding方式。作法如下(XJC提供inline及external的customization,其中inline的客製化是直接把客製化設定寫在要進行轉換的xml schema中;而exetrnal的customization則是另外寫在一個外部檔案,這裡使用external customization為例子)

  1. 撰寫customization檔案(xjc根目錄下的 samples/external-customize 子目錄有更詳細的例子)
       <jxb:bindings version="1.0"
                xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <jxb:bindings schemaLocation="ExercisePrescription - reference - 20110530 hugang.xsd" node="/*">
      <jxb:globalBindings
        fixedAttributeAsConstantProperty="true"/>
      </jxb:bindings>
    </jxb:bindings>
  2. 執行轉換指令
    xjc   xml_schema_to_convert     -b   customization_file_name
  3. 如此一來,xjc在轉換java code時,會把fixed value轉成java constant