1

我有 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>
4

1 回答 1

1

只需为不同的模式使用不同的绑定文件。将一个用于没有 xs:dateTime 自定义的 schema1.xsd,另一个用于确实包含它的另一个架构。

于 2012-05-16T16:35:38.100 回答