Как сгенерировать xsd из пользовательского класса Java, который расширяется от java.util.Date от JAXB Schemagen

У меня есть пользовательский Java-класс "CustomDate1", который расширяет java.util.Date, и я хочу сгенерировать для него XSD-файл с помощью Schemagen. но, кажется, в файле XSD, "customDate1" не с элементом расширения, я не знаю почему, может быть, JAXB не поддерживает класс, который расширяет Date?

Класс Java:

public class CustomDate1 extends java.util.Date {

}

XSD файл:

<xs:complexType name="customDate1">

<xs:sequence/>

</xs:complexType>

детеныш

1 ответ

Решение

Нужно ли расширять ваш домен? 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 можно использовать для генерации схемы XML из модели JAXB.

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

        });
    }

}
Другие вопросы по тегам