`
kjkhi
  • 浏览: 184805 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

由xml文件动态生成Java类

阅读更多
      JAXB(Java Architecture for XML Binding)是一种特殊的序列化/反序列化工具。它可以使XML数据以Java Objects的形式直接应用于Java程序之中,使Java Objects与XML数据之间的转换成为可能。在JAXB中将Java Objects到XML数据的转换称为marshal;XML数据到Java Objects的转换称为unmarshal。
      使用JAXB分两步,首先利用xjc命令行程序编译DTD或Schema文件生成与XML数据结构相对应的JavaBeans类,再通过JAXB API中的marshal与unmarshal操作完成JavaBeans对象与XML数据之间的互换。
      JAXB使用了最新的元数据技术,故而只能在JDK 1.5以上版本使用,JAXB的官方网站如下:
  • https://jaxb.dev.java.net/

1. 通过命令行编译
命令行程序xjc用于编译DTD或Schema生成与XML数据结构对应的JavaBeans类。操作方法如下:
xjc [-xmlschema|-dtd] [–d 保存java文件的目录] [–p java文件所在的包] <编译文件>

-xmlschema  指定编译文件的格式为Schema格式,此参数是默认值,可以不用提供。
                    如果不提供此参数,编译文件必须是Schema文件。
-dtd  指定编译文件的格式为DTD格式,如果编译文件是DTD文件则必须提供此参数。
-d  指定了保存java文件的目录
-p  指定了生成的java文件所在的包

例如编译当前目录下的schema.xls文件,java文件保存在src目录,包名为generate,其命令如下:
xjc –d src –p generate schema.xsd
如果编译文件是schema.dta,则命令如下:
xjc –dtd –d src –p generate schema.dtd

2. 通过ANT编译
在/JAXB-HOME/lib目录中的jaxb-xjc.jar包中包含了XJCTask.class文件,可以依据该类定义一个ant task,通过执行该task生成java文件,这种方法我暂时没有测试!

其中我测试了一个比较复杂的xml文件,其xsd文件如:
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="ShippingOrder">
    <xs:sequence>
      <xs:element minOccurs="0" name="acceptTime" type="xs:dateTime" />
      <xs:element minOccurs="0" name="agencyPrice" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="billId" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="billingPersonName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="branchName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="chargeType" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="checkTime" type="xs:dateTime" />
      <xs:element minOccurs="0" name="consigneeCardNO" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consigneeInfomation" nillable="true" type="tns:ConsigneeInfomation" />
      <xs:element minOccurs="0" name="consigneeName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consigneeSignName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consignorInfomation" nillable="true" type="tns:ConsignorInfomation" />
      <xs:element minOccurs="0" name="consignorName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="endStationName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsInfomations" nillable="true" type="tns:ArrayOfGoodsInfomation" />
      <xs:element minOccurs="0" name="isInsurance" type="xs:boolean" />
      <xs:element minOccurs="0" name="isRouteRecord" type="xs:boolean" />
      <xs:element minOccurs="0" name="labelId" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="limitTime" type="xs:dateTime" />
      <xs:element minOccurs="0" name="packageBillId" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="prepayPrice" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="procedureCharge" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="remark" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="route" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="routePersonName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="sendStationName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="stationName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="totalCharge" type="xs:float" />
      <xs:element minOccurs="0" name="totalCount" type="xs:int" />
      <xs:element minOccurs="0" name="totalWeight" type="xs:float" />
      <xs:element minOccurs="0" name="transferName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="travelTime" type="xs:dateTime" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ShippingOrder" nillable="true" type="tns:ShippingOrder" />
  <xs:complexType name="ConsigneeInfomation">
    <xs:sequence>
      <xs:element minOccurs="0" name="addressTel" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consigneeCode" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consigneeUserID" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consignmentStatus" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="gatheringAmount" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="gatheringType" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsReceiptPlace" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="isReturn" type="xs:boolean" />
      <xs:element minOccurs="0" name="linkManName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="originalEnterprise" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="originalNumber" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="remark" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="requestedUnloadedDateTime" type="xs:dateTime" />
      <xs:element minOccurs="0" name="telephoneNumber" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ConsigneeInfomation" nillable="true" type="tns:ConsigneeInfomation" />
  <xs:complexType name="ConsignorInfomation">
    <xs:sequence>
      <xs:element minOccurs="0" name="addressTel" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="consignorCode" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="linkManName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="loadingPlace" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="telephoneNumber" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ConsignorInfomation" nillable="true" type="tns:ConsignorInfomation" />
  <xs:complexType name="ArrayOfGoodsInfomation">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="GoodsInfomation" nillable="true" type="tns:GoodsInfomation" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfGoodsInfomation" nillable="true" type="tns:ArrayOfGoodsInfomation" />
  <xs:complexType name="GoodsInfomation">
    <xs:sequence>
      <xs:element minOccurs="0" name="chargeType" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="excursionFreight" type="xs:float" />
      <xs:element minOccurs="0" name="freight" type="xs:float" />
      <xs:element minOccurs="0" name="goodsBar" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsBatchNumber" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsGuid" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsName" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsSpecification" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsType" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="goodsTypeCode" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="grossWeightUnitCode" type="xs:float" />
      <xs:element minOccurs="0" name="grossWeightValue" type="xs:float" />
      <xs:element minOccurs="0" name="insurancePrice" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="isInsurance" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="packageType" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="packageTypeCode" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="packagesNumber" type="xs:int" />
      <xs:element minOccurs="0" name="remart" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="volumeUnitCode" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="volumeValue" type="xs:float" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="GoodsInfomation" nillable="true" type="tns:GoodsInfomation" />
</xs:schema>

这个目标期望可以生成的类有:ShippingOder,GoodsInformation,ConsigneeInformation和ConsignorInformation
但测试生成的类有除了上面那四个外,还有三个:package-info,ObjectFactory,ArrayOfGoodsInfomation
如ShippingOrder这个类中部分代码如下:
public class ShippingOrder {

    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar acceptTime;
    @XmlElementRef(name = "agencyPrice", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> agencyPrice;
    @XmlElementRef(name = "billId", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> billId;
    @XmlElementRef(name = "billingPersonName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> billingPersonName;
    @XmlElementRef(name = "branchName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> branchName;
    @XmlElementRef(name = "chargeType", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> chargeType;
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar checkTime;
    @XmlElementRef(name = "consigneeCardNO", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> consigneeCardNO;
    @XmlElementRef(name = "consigneeInfomation", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<ConsigneeInfomation> consigneeInfomation;
    @XmlElementRef(name = "consigneeName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> consigneeName;
    @XmlElementRef(name = "consigneeSignName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> consigneeSignName;
    @XmlElementRef(name = "consignorInfomation", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<ConsignorInfomation> consignorInfomation;
    @XmlElementRef(name = "consignorName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> consignorName;
    @XmlElementRef(name = "endStationName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> endStationName;
    @XmlElementRef(name = "goodsInfomations", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<ArrayOfGoodsInfomation> goodsInfomations;
    protected Boolean isInsurance;
    protected Boolean isRouteRecord;
    @XmlElementRef(name = "labelId", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> labelId;
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar limitTime;
    @XmlElementRef(name = "packageBillId", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> packageBillId;
    @XmlElementRef(name = "prepayPrice", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> prepayPrice;
    @XmlElementRef(name = "procedureCharge", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> procedureCharge;
    @XmlElementRef(name = "remark", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> remark;
    @XmlElementRef(name = "route", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> route;
    @XmlElementRef(name = "routePersonName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> routePersonName;
    @XmlElementRef(name = "sendStationName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> sendStationName;
    @XmlElementRef(name = "stationName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> stationName;
    protected Float totalCharge;
    protected Integer totalCount;
    protected Float totalWeight;
    @XmlElementRef(name = "transferName", namespace = "http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject", type = JAXBElement.class, required = false)
    protected JAXBElement<String> transferName;
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar travelTime;
    //getter,setter

2
1
分享到:
评论

相关推荐

    解析xml,生成java类

    2. SAX解析:SAX(Simple API for XML)是一种事件驱动的解析方式,它不创建完整的文档对象模型,而是按顺序读取XML文件,遇到元素、属性等时触发相应的事件回调。SAX解析适用于处理大型XML文件,因为它占用的内存较...

    JAXB 利用xsd文件生成java类

    - 在JAXB中,XSD文件是生成Java类的基础。XSD元素、属性和复杂类型将映射为Java类的字段和方法。 2. **JAXB绑定过程**: - **编译XSD到Java类**:使用JAXB的`xjc`工具,可以将XSD文件转换为Java源代码。`xjc`...

    java_动态生成XML文件

    本教程将深入讲解如何使用Java动态生成XML文件,并涉及相关的类和方法。 首先,我们需要了解两个核心的Java API:`javax.xml.transform`和`javax.xml.parsers`。前者主要用于XML文档的转换,后者则用于处理XML的...

    java生成xsd,xml示例

    同样,Java也可以反向操作,从XML生成Java对象或XSD。使用Unmarshaller可以将XML数据解析为Java对象,而使用工具如JAXB或XML Schema Tools则可以生成XSD文件。 在提供的压缩包文件`xml_test`中,可能包含了用于演示...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    xml文件自动转成java对象工具

    2. **生成Java类结构**:根据XSD中的元素和属性,工具自动生成对应的Java类,每个元素变成类的一个字段,属性则作为类的getter和setter方法。 3. **处理复杂类型**:如果XSD中定义了复杂类型,工具会创建相应的Java...

    使用Java自动生成Java类和XML文件

    本篇将深入探讨如何使用Java来自动生成Java类和XML文件,以及它在实际开发中的应用。 首先,我们要理解Java类和XML文件在软件工程中的角色。Java类是面向对象编程的基础,用于封装数据和行为,构建程序的结构。而...

    java 通过模板生成 xml,发送报文

    在Java编程中,生成XML文件并发送报文是一项常见的任务,尤其在系统间的数据交换、API调用或者网络通信中。XML(eXtensible Markup Language)是一种结构化数据表示语言,具有良好的可读性和可扩展性,是数据传输的...

    java文件生成xml文档

    如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;jdom2 &lt;version&gt;2.0.6 ``` 然后,我们可以按照以下步骤创建一个简单的XML文档: 1. **创建元素**:使用...

    根据XML模版自动生成

    - XMLStreamWriter提供一种流式写入方式,可以逐步构建XML文档,适合构建大型或者动态生成的XML文件。 4. **文件输出**:生成的XML文件会按照指定的路径和命名规则保存到本地文件系统。在此过程中,可能需要考虑...

    java XML解析方式实现自动生成word文档

    在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...

    根据XML生成JAVA类-freemarker

    根据xml批量生成java类,可自定义模版 例子可读取单个xml文件,也可读取指定目录下的多个xml文件 默认输出目录:D:\test_file\genrate_java 可在工具类CommonUtil中修改 关于freemarker的更多介绍,可以查看相匹配...

    java读取xml文件生成文件

    Java语言在处理XML文件时,提供了丰富的API和库,使得我们可以轻松地读取、解析、修改和生成XML文档。在给定的场景中,我们主要关注如何使用Java来读取XML文件并根据需求生成新的文件。以下是关于这个主题的详细说明...

    xml自动生成java代码(改)

    "xml自动生成java代码(改)"这个主题指的是通过解析XML文件来生成对应的Java类,以便于简化开发过程,提高效率。通常,这涉及到XML解析技术,如DOM解析,以及Java文件的读写操作。 DOM解析是处理XML文档的一种方法...

    Java解析和生成XML.pdf

    同样地,若`@XmlAccessorType`的访问权限设置为`XmlAccessType.NONE`,则可以在私有属性上使用`@XmlElement`或`@XmlAttribute`注解,这些属性依然会被映射到生成的XML文件中。 在实际应用中,开发者应当根据实际...

    JAVA对象序列化保存为XML文件的工具类

    【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...

    JaxbContext生成xml文件或java类对象转化注解

    JAXBContext 生成 XML 文件或 Java 类对象转换注解 JAXB(Java API for XML Binding)是一种将 Java 对象与 XML 进行转换的技术。JAXB 提供了一个快速便捷的方式将 Java 对象与 XML 进行转换。在 JAX-WS(Java 的 ...

    xml生成javabean工具

    在已经有xml的情况下,快速生成javabean代码,不需要自己再手打大量无聊的代码。

    使用java把数据库数据导出生成xml文件

    使用java把数据库数据导出生成xml文件 使用java把数据库数据导出生成xml文件

Global site tag (gtag.js) - Google Analytics