以下JAXB绑定文件按预期创建Adapter类,但Eclipse和XMLSpy说它无效:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" version="2.1">
<jxb:globalBindings>
<jxb:javaType name="java.util.Calendar" xmlType="xs:date" parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
printMethod="javax.xml.bind.DatatypeConverter.printDate" />
<jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
<jxb:javaType name="java.util.Calendar" xmlType="xs:time" parseMethod="javax.xml.bind.DatatypeConverter.parseTime"
printMethod="javax.xml.bind.DatatypeConverter.printTime" />
</jxb:globalBindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)
错误是这样的:
cvc-complex-type.2.4.b: The content of element 'jxb:globalBindings' is not complete. One of '{"http://java.sun.com/xml/ns/jaxb":javaType, "http://java.sun.com/xml/ns/jaxb":serializable, WC[##other:"http://java.sun.com/xml/ns/jaxb"]}' is expected.
Run Code Online (Sandbox Code Playgroud)
请注意,JAXB绑定模式文件使用前缀"jaxb"引用顶级元素.
如何创建有效的JAXB绑定文件?
http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd错了,但没有人可以做任何事情:(
问题在于globalBindings全局元素的定义.它看起来像这样:
<xs:element name="globalBindings">
<xs:annotation>
<xs:documentation>Customization values defined in global scope.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element ref="jaxb:javaType" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="jaxb:serializable" minOccurs="0" />
<xs:any namespace="##other" processContents="lax">
<xs:annotation>
<xs:documentation>allows extension binding declarations to be specified.</xs:documentation>
</xs:annotation>
</xs:any>
</xs:sequence>
...
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
但它应该是这样的:
<xs:element name="globalBindings">
<xs:annotation>
<xs:documentation>Customization values defined in global scope.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element ref="jaxb:javaType" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="jaxb:serializable" minOccurs="0" />
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>allows extension binding declarations to be specified.</xs:documentation>
</xs:annotation>
</xs:any>
</xs:sequence>
...
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
介意minOccurs="0" maxOccurs="unbounded"的<xs:any />元素.
所以正式版强制你使用其他(比JAXB的)元素insinde globalBindings.你可以看一下[ http://jaxb.java.net/nonav/2.0/binding-customization/http.java.sun.com.xml.1306680588/index.html](http://java.sun.com/ xml/ns/jaxb/xjc namespace)包含Sun对JAXB的扩展.
作为解决方法,只需添加<xsd:any/>为最后一个孩子<globalBindings>
这是一个示例:
<globalBindings>
<javaType name="java.util.Calendar" xmlType="xsd:time"
parseMethod="javax.xml.bind.DatatypeConverter.parseTime"
printMethod="javax.xml.bind.DatatypeConverter.printTime" />
<xsd:any/>
</globalBindings>
Run Code Online (Sandbox Code Playgroud)
这在验证期间在 STS 3.7.3 xml 编辑器中适用于我。
| 归档时间: |
|
| 查看次数: |
7478 次 |
| 最近记录: |