我们可以强制限制jaxb globalbindings将xs:dateTime映射到java.util.Date

时间:2012-05-16 16:33:11

标签: java jaxb

我有3个模式,每个模式都有xs:dateTime。要在java jaxb对象中将xs:dateTime表示为java.util.Date,我使用的是binding.xjb,如下所示

<bindings schemaLocation="schema1.xsd">
    <schemaBindings>
        <package name="com.mycompany.ims.schema1" />
    </schemaBindings>
</bindings> 
<bindings schemaLocation="schema2.xsd">
    <schemaBindings>
        <package name="com.mycompany.ims.schema2" />
    </schemaBindings>
</bindings> 
<bindings schemaLocation="schema3.xsd">
    <schemaBindings>
        <package name="com.mycompany.ims.schema3" />
    </schemaBindings>
</bindings>     

 <globalBindings>
    <javaType name="java.util.Date" xmlType="xs:dateTime"
      parseMethod="com.mycompany.ims.utils.JaxbDateAdapter.parseDateTime"
      printMethod="com.mycompany.ims.utils.JaxbDateAdapter.printDateTime"
    />
    <javaType name="java.util.Date" xmlType="xs:date"
      parseMethod="com.mycompany.ims.utils.JaxbDateAdapter.parseDate"
      printMethod="com.mycompany.ims.utils.JaxbDateAdapter.printDate"
    />
</globalBindings> 

如果我生成jaxb对象,则所有xs:dateTime元素都被表示为java.util.Date。 我有一个要求,其中一个模式(比如schema1.xsd)我不想将xs:dateTime元素表示为java.util.Date。

有什么方法可以配置为限制特定架构或基于节点名称?任何人都可以提供帮助。

我通过添加以下xjb配置解决了这个问题,我编辑了帖子以帮助那些遇到像我一样的问题的人

<bindings schemaLocation="schema1.xsd">
    <bindings node="//xs:complexType[@name='ApplicationHeader1']">
        <bindings node=".//xs:element[@name='CreDt']">
          <javaType name="java.util.Date" 
          parseMethod="com.mycompany.ims.utils.JaxbDateAdapter.parseUTCDateTime"
          printMethod="com.mycompany.ims.utils.JaxbDateAdapter.printUTCDateTime"
            />
        </bindings>
    </bindings> 
    <bindings node="//xs:complexType[@name='ApplicationHeaderV01']">
        <bindings node=".//xs:element[@name='CreDt']">
          <javaType name="java.util.Date" 
          parseMethod="com.mycompany.ims.utils.JaxbDateAdapter.parseUTCDateTime"
          printMethod="com.mycompany.ims.utils.JaxbDateAdapter.printUTCDateTime"
            />
        </bindings>
    </bindings>
</bindings>

1 个答案:

答案 0 :(得分:1)

只需为不同的模式使用不同的绑定文件。对于没有xs:dateTime自定义的schema1.xsd使用一个,而对另一个有它的模式使用另一个。