大家都知道使用JAXB的xjc工具可以把schema自动生成对应的java类,这仔细对比了一下不同schema的结构生成的java类,有一些不明白的地方
如果schema定义如下
<xs:element name="PhysicalAddress">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element minOccurs="0" maxOccurs="1" ref="addressLine1" />
<xs:element minOccurs="0" maxOccurs="1" ref="addressLine2" />
<xs:element minOccurs="0" maxOccurs="1" ref="addressLine3" />
<xs:element minOccurs="0" maxOccurs="1" ref="cityName" />
<xs:element minOccurs="0" maxOccurs="1" ref="GlobalCountryCode" />
<xs:element minOccurs="0" maxOccurs="1" ref="GlobalLocationIdentifier" />
<xs:element minOccurs="0" maxOccurs="1" ref="NationalPostalCode" />
<xs:element minOccurs="0" maxOccurs="1" ref="postOfficeBoxIdentifier" />
<xs:element minOccurs="0" maxOccurs="1" ref="regionName" />
</xs:sequence>
</xs:complexType>
</xs:element>
生成的java类结果如下
引用
public class PhysicalAddress {
protected AddressLine1 addressLine1;
protected AddressLine2 addressLine2;
protected AddressLine3 addressLine3;
protected CityName cityName;
protected String globalCountryCode;
protected String globalLocationIdentifier;
protected String nationalPostalCode;
protected PostOfficeBoxIdentifier postOfficeBoxIdentifier;
protected RegionName regionName;
}
但是,如下的schema结构
<xs:element name="PartnerBusinessIdentification">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ProprietaryBusinessIdentifier" />
<xs:element ref="ProprietaryDomainIdentifier" />
<xs:element minOccurs="0" maxOccurs="1" ref="ProprietaryIdentifierAuthority" />
</xs:sequence>
</xs:complexType>
</xs:element>
生成的java类却如下所示,可以忽略@XMLElementRef(s)的注释暂时不用管
引用
public class PartnerBusinessIdentification {
@XmlElementRefs({
@XmlElementRef(name = "ProprietaryBusinessIdentifier", type = JAXBElement.class),
@XmlElementRef(name = "ProprietaryDomainIdentifier", type = JAXBElement.class),
@XmlElementRef(name = "ProprietaryIdentifierAuthority", type = JAXBElement.class)
})
protected List<JAXBElement<String>> proprietaryBusinessIdentifierAndProprietaryDomainIdentifierAndProprietaryIdentifierAuthority;
}
我就不明白为什么不是生成以下这样的类结构呢?
引用
public class PartnerBusinessIdentification {
protected ProprietaryBusinessIdentifier proprietaryBusinessIdentifier;
protected ProprietaryDomainIdentifier proprietaryDomainIdentifier;
protected ProprietaryIdentifierAuthority proprietaryIdentifierAuthority;
}
后来比较多个类似结构的schema发现,问题应该是在<xs:sequence>上,
如果它加上了maxOccurs="unbounded"属性的话,就只会在此元素对应的java类中生成一个List<?>类型的元素,而不管里面<xs:sequence>究竟有一个还是多个子元素,这样一来生成的java类就非常难处理了。我正在想对策中
分享到:
相关推荐
2. **jaxb-xjc.jar**:XJC(XML Java Compiler)是JAXB的代码生成工具,可以将XML Schema(XSD)转换为对应的Java类。当你有XML Schema定义时,使用xjc工具可以自动生成符合该Schema的Java类,使得处理XML数据更为...
2. **XSD到Java**: JAXB提供了工具(如`xjc`)将XML Schema(XSD)文件转换为Java类。这使得基于XSD定义的XML结构可以轻松地在Java应用中使用。 3. **Marshalling和Unmarshalling**: Marshalling是将Java对象转换为...
JAXB(Java Architecture for XML Binding)是Java平台上的一个标准,它提供了一种在Java对象和XML文档之间进行映射的机制。这个技术是JSR(Java Specification Request)的一部分,具体来说,JSR 222定义了JAXB 2.0...
Java Architecture for XML Binding (JAXB) 是Java平台中用于XML到Java对象绑定的标准技术,它允许开发者在Java程序中直接操作XML数据,而无需编写大量的XML解析和序列化代码。JAXB 2.3.0是该技术的一个版本,包含了...
Java Architecture for XML Binding (JAXB) 是一个Java标准,它提供了在Java对象和XML文档之间...在提供的压缩包文件`JAXB_tests`中,可能包含了一些示例代码和测试用例,这将有助于更深入地理解JAXB的工作机制和用法。
JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,用于将XML文档与Java对象之间进行绑定,实现XML数据的解析和序列化。在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) ...
Java Architecture for XML Binding (JAXB) 是Java平台上的一个重要标准,它提供了一种机制,能够将XML文档与Java对象之间进行映射,实现XML数据和Java对象的无缝转换。JAXB允许开发者在Java应用中方便地处理XML数据...
当你需要在XML与Java类之间进行数据交换时,JAXB提供了一种自动化的机制,可以将XML Schema (XSD) 文件转换为Java类,反之亦然。这个过程被称为“绑定”或“反绑定”。 标题“用jaxb自动生成xsd对像”指的是利用...
2. **生成XML Schema(可选)**:如果你有预先定义的XML Schema(XSD),你可以使用JAXB的`xjc`工具将其转换为对应的Java类。 3. **创建Unmarshaller和Marshaller对象**:这两个对象分别用于反序列化和序列化。可以...
JAXB提供了一种机制,使得开发者能够方便地在Java对象与XML表示之间进行转换,这种转换可以是双向的,即可以从Java对象生成XML文档,也可以从XML文档反序列化生成Java对象。 #### 三、JAXB XML转Java步骤 根据提供...
本篇文章将深入探讨JAXB注解解析XML的相关知识。 ### JAXB概述 JAXB允许开发者通过在Java类上使用注解来定义XML结构,从而简化了XML处理。这种映射机制使得XML序列化和反序列化过程变得更加直观和高效。JAXB的核心...
JAXB(Java Architecture for XML Binding)是Java平台标准的一部分,它提供了一种将Java对象转换为XML文档以及从XML数据恢复Java对象的机制。本篇将详细讲解如何利用JAXB根据XSD(XML Schema Definition)文件生成...
Java Architecture for XML Binding (JAXB) 是一种Java标准,它为XML数据和Java对象之间的绑定提供了自动化的转换机制。在Java程序中,配置文件通常用于存储应用的设置和参数,以便用户可以根据自己的需求进行定制。...
2. **生成Java类**:如果已有XML Schema(XSD),可以使用JAXB的`xjc`工具自动生成符合Schema的Java类。 3. **绑定上下文(Context)**:创建`JAXBContext`对象,它是整个JAXB操作的核心,负责管理和维护Java类型与...
JAXB提供了一种从XML Schema(XSD)到Java类的自动转换机制,这在处理XML数据时极大地提高了开发效率。 在Java开发中,JAXB工具是处理XML文档的强大助手。它的工作原理主要分为两个部分:XML到Java对象的绑定...
5. **定制化处理**:JAXB提供了一些扩展机制,如事件监听器、类型转换器等,以便进行更复杂的对象XML映射。 "JAXB介绍.ppt"可能包含更直观的演示,通过幻灯片的形式展示JAXB的基本概念、工作原理以及实际应用案例。...
2. 生成Java类:使用JAXB工具(如`xjc`命令行工具或Maven插件)对XSD文件进行编译,自动生成对应的Java类。这些类包含了XML元素和属性的映射。 3. 解析XML:有了Java类,我们就可以使用JAXB提供的`Unmarshaller`...
1. **JAXB架构**:了解JAXB的基本架构,包括绑定编译器(`xjc`),它将XML Schema(XSD)转换为Java类,以及Unmarshaller和Marshaller接口,它们分别负责将XML解析为Java对象和将Java对象转换为XML。 2. **注解驱动...
无论是在构建Web服务、解析配置文件还是处理XML文档时,JAXB2都是一个值得信赖的选择。了解和掌握JAXB2的使用,能够极大地提高开发效率和代码质量。通过实践`jaxb2-demo`项目,可以进一步巩固这些概念并提升实际操作...
Java Architecture for XML Binding (JAXB) 是 Java 平台标准版 (Java SE) 和企业版 (Java EE) 的一部分,它提供了一种将 XML 文档和 Java 对象之间进行互相转换的机制。通过 JAXB,开发者可以轻松地在 XML 文档和 ...