Как сгенерировать 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;
}
});
}
}