@XmlRootElement(name = "resultat")
@XmlType(propOrder = { "state", "content" })
public class Result {
protected State state;
protected Content content;
}
content.java:
@XmlRootElement(name = "content")
@XmlSeeAlso({ Job.class })
public class Content {
}
和job.java扩展内容:
@XmlType(name = "job", propOrder = { "status" })
@XmlRootElement(name = "job")
public class JobStatus extends Content {
protected String status;
}
我正在将一个作业实例设置为result类的content成员的值,但是我得到了以下生成的xml文件:
<result>
<state>
<tag>value</tag>
</state>
<content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="job">
<status>ok</status>
</content>
</result>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="result">
<xs:complexType>
<xs:sequence>
<xs:element name="state">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="tag"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="content">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="status"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我如何更改我的JAXB配置来避免这个问题?
谢谢!
问题不在于JAXB配置,而在于模式与Java类的设计。
Java类content
不符合您的模式,因为元素status
是在模式中定义的,而不是在Java类中定义的。此外,您没有在架构中定义job
。
属性xsi:type
用于继承。由于JobStatus类继承自Content,因此在XML中它显示为job
类型的Content
。
<complexType name="job">
<complexContent>
<extension base="content">
<sequence>
<xs:element type="xs:string" name="status"/>
</sequence>
</extension>
</complexContent>
</complexType>
我有情况, 有一个sample.xsd(旧版本-没有命名空间)。为同一个XSD文件使用XJC生成JAXB类。我得到了一个使用JAXB类基于XSD解封XML数据文件的示例。sample.xsd文件已更改(新版本-添加的命名空间)。再次为新的XSD文件使用XJC生成JAXB类。该示例已更新,现在可以用于新的XSD文件 现在我有一个情况,我正在获取基于旧XSD的XML数据文件,我想使用更新的示例文件来解
我试图从通过JAXB生成的类序列化XML。 班级: 文件“package-info.java”: 编组器(简化,无需错误处理): 此代码生成: 我期待这样的事情: 我有一个类似的代码并且工作正常,但是我不明白为什么这个代码不显示命名空间。有线索吗?谢谢!
供应商提供的XML如下: 请注意,没有声明,供应商也没有提供模式。这不能更改,供应商将来会继续这样发布XML。 为了生成JAXB绑定,我创建了如下模式: 请注意,我已经声明了一个或多或少有意义的命名空间(“http://acme.com/schema”),以便它可以用于元素引用等。XJC 生成以下: 然后,我尝试解组XML文档: 我得到的例外是: 显然,这是因为XML元素属于一个空的名称空间,而J
我有一个XML要与JAXB解组。如果我从元素中删除所有名称空间属性,代码运行良好,但是如果我保留名称空间属性的话,在解组后会得到一个空对象。 XML是这样的: 我的动物豆是这样的: 猫豆就像: 在运行时,我得到一个空对象。我试图从属性中删除< code>"z:",得到了这个异常: 如果我从猫和动物中删除命名空间,我会得到这个例外: 下面是解组的最终代码。最后一行给出了一个空指针异常 我不确定如何处
我的web服务有一个很大的问题。 贝斯特,杰彭
我遇到过这样一种情况,JAXB拒绝解组XML元素,除非相应的Java字段有名称空间注释。这种行为仅始于JDK 1.8.0_111(也可能始于102)。JDK 1.8的早期版本可以工作。 测试案例: Java类(缩写): XML: package-info.java: 取消编组代码: 使用 JDK 1.8.0_101(及更早版本),可以打印以下内容: 分析结果:MyElement [subEl=su