【问题标题】:How to generate xsd from custom Java class which extends from java.util.Date by JAXB Schemagen如何通过 JAXB Schemagen 从扩展自 java.util.Date 的自定义 Java 类生成 xsd
【发布时间】:2023-03-21 17:40:01
【问题描述】:

我有一个自定义 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>

乔伊

【问题讨论】:

    标签: soap jaxb wsdl schemagen


    【解决方案1】:

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

    领域模型

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

    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;
                }
    
            });
        }
    
    }
    

    【讨论】:

    • 嗯,谢谢你的回复,虽然这不是一个直接的方式问题,但仍然是解决我的问题的一种方式。谢谢。
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多