java-xjc:覆盖xs:simpleType定义
作者:互联网
我正在使用xjc将一组XSD编译为Java类.我希望能够为给定的简单类型覆盖数据类型定义. XSD片段是:
<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类型的元素在结果Java类中定义为String,例如
public class CcReportTrainInitialization {
...
@XmlElement(required = true)
protected String time;
...
public String getTime() {
return time;
}
public void setTime(String value) {
this.time = value;
}
...
我想要的是时间数据类型(在此示例中)为特定于日期时间的类型,例如XMLGregorianCalendar或类似的东西:
public class CcReportTrainInitialization {
...
@XmlElement(required = true)
protected XMLGregorianCalendar time;
...
public XMLGregorianCalendar getTime() {
return time;
}
public void setTime(XMLGregorianCalendar value) {
this.time = value;
}
...
这可能吗?
我一直在尝试绑定文件,但不确定是否可以这样做.建议?
解决方法:
其他选项包括:
> jaxb:baseType
> jaxb:javaType
> xjc:javaType
-与jaxb:javaType类似,但允许指定适配器类而不是unmarshal / marshal方法.
我实际上会认为jaxb:class / @ ref定制不适用于简单类型,因为这使它成为“类”类型.这对于内部XJC模型很重要,某些XJC插件可能无法正确处理您的类型.
我认为您应该在这里使用jaxb:javaType.尝试:
<?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>
标签:xjc,java,jaxb,xsd 来源: https://codeday.me/bug/20191011/1892789.html