【发布时间】:2014-04-25 04:21:19
【问题描述】:
自从将服务器升级到 jaxb 2 后,我们遇到了 xsi:type 问题。当服务器运行 jaxb 1 时,有问题的 xml 客户端请求解析正常,但自从升级到 jaxb 2 后,我们看到了一个错误行:
Error::cvc-elt.4.2: Cannot resolve 'er-request' to a type definition for element 'er-request'
客户端将xsi:type 指定为xml 标记中的属性,但我认为它无效,因为所讨论的复杂类型没有这样的名称。
<?xml version="1.0" encoding="UTF-8"?>
<er-request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="100007" xsi:type="er-request">
<payload>
<!--some content-->
</payload>
</er-request>
这是xsd:
<xs:element name="er-request">
<xs:complexType>
<xs:sequence>
<xs:element name="payload" type="payloadType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:int"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:complexType name="payloadType">
<xs:sequence>
<xs:any processContents="skip" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
如您所见,complexType 中没有name 属性。我们可以通过添加它来解决该错误,但随后我们会看到一个验证错误,因为显然是本地 complexType 上的 name 属性:
Attribute 'name' cannot appear in element 'complexType'
我认为这在 jaxb1 中起作用的原因是它没有 jaxb 2 严格。
所以问题是:
- 客户端 xml 是否有效?
- 我们可以尝试使 jaxb2 更宽松的其他解决方法吗?
【问题讨论】:
标签: xml xml-parsing jaxb xsd jaxb2