我有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>
答案 0 :(得分:1)
只需为不同的模式使用不同的绑定文件。对于没有xs:dateTime自定义的schema1.xsd使用一个,而对另一个有它的模式使用另一个。