如何从JAXB Schemagen从java.util.Date扩展的自定义Java类生成xsd

时间:2013-02-18 06:34:19

标签: soap jaxb wsdl schemagen

我有一个自定义的java类“CustomDate1”扩展了java.util.Date,我想通过Schemagen为它生成XSD文件。但似乎在XSD文件中,“customDate1”没有扩展项,我不知道为什么,也许JAXB不支持扩展Date的类?

Java类:

public class CustomDate1 extends java.util.Date {

}

XSD文件:

<xs:complexType name="customDate1">

<xs:sequence/>

</xs:complexType>

乔伊

1 个答案:

答案 0 :(得分:0)

您的域对象是否需要扩展java.util.Date?下面是一个域类,它将生成您正在寻找的XML模式,可能更适合您。

域名模型

我们将在@XmlValue类型的属性上使用java.util.Date注释。

import java.util.Date;
import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    @XmlValue
    private Date value;

    @XmlAttribute
    private String bar;

}

XML架构

在下面的架构中,我们看到有一种扩展xsd:dateTime的类型。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="foo">
    <xs:simpleContent>
      <xs:extension base="xs:dateTime">
        <xs:attribute name="bar" type="xs:string"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>

架构生成代码

以下JAXB代码可用于从JAXB模型生成XML模式。

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Foo.class);

        jc.generateSchema(new SchemaOutputResolver() {

            @Override
            public Result createOutput(String namespace, String suggestedFileName)
                    throws IOException {
                StreamResult result = new StreamResult(System.out);
                result.setSystemId(suggestedFileName);
                return result;
            }

        });
    }

}