首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xjc:覆盖xs:simpleType定义

xjc:覆盖xs:simpleType定义
EN

Stack Overflow用户
提问于 2014-12-01 23:38:46
回答 2查看 2.1K关注 0票数 2

我正在使用xjc将一组XSD编译成Java类。我希望能够重写给定简单类型的数据类型定义。XSD片段是:

代码语言:javascript
复制
<xs:simpleType name="CPT-DateTime">
    <xs:annotation>
        <xs:appinfo>Can be specified as a integer number or as xs:dateTime</xs:appinfo>
    </xs:annotation>
    <xs:union memberTypes="xs:unsignedLong xs:dateTime"/>
</xs:simpleType>

这将导致(毫不奇怪)在结果的CPT-DateTime类中将String类型的元素定义为String

代码语言:javascript
复制
public class CcReportTrainInitialization {
...
    @XmlElement(required = true)
    protected String time;
...
    public String getTime() {
        return time;
    }

    public void setTime(String value) {
        this.time = value;
    }
...

我希望time的数据类型(在本例中)是特定于日期的类型,例如XMLGregorianCalendar或类似的类型:

代码语言:javascript
复制
public class CcReportTrainInitialization {
...
    @XmlElement(required = true)
    protected XMLGregorianCalendar time;
...
    public XMLGregorianCalendar getTime() {
        return time;
    }

    public void setTime(XMLGregorianCalendar value) {
        this.time = value;
    }
...

这个是可能的吗?

我一直在尝试一个绑定文件,但我不确定它是否可能实现。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-02 07:41:15

进一步的备选办法是:

实际上,我认为jaxb:class/@ref定制不适合简单类型,因为这使得它成为“类”类型。这对于内部XJC模型很重要,一些XJC插件可能不正确地处理您的类型。

我认为你应该在这里使用jaxb:javaType。尝试:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings jxb:version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:your-target-namespace">
  <jxb:bindings node="/xs:schema" schemaLocation="../TCIP_4_0_0_Final.xsd">
    <jxb:globalBindings>
      <jxb:javaType name="javax.xml.datatype.XMLGregorianCalendar" xmlType="tns:CPT-DateTime"/>
    </jxb:globalBindings>
  </jxb:bindings>
</jxb:bindings>
票数 1
EN

Stack Overflow用户

发布于 2014-12-02 01:23:37

一旦找到正确的咒语,这实际上是非常容易的;以下是绑定文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings jxb:version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <jxb:bindings node="/xs:schema" schemaLocation="../TCIP_4_0_0_Final.xsd">
    <jxb:bindings node="//xs:simpleType[@name='CPT-DateTime']">
      <jxb:class ref="javax.xml.datatype.XMLGregorianCalendar"/>
    </jxb:bindings>
  </jxb:bindings>
</jxb:bindings>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27239406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档