我有一个无法修改的简单XSD(由第三方提供)。我正在尝试使用XJC为XSD生成java类。非常简化的XSD是:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="receive" nillable=true />
</xs:schema>
我想将一个对象编组为XML,因此该元素设置为nil。当我使用XJC生成java类时,我得到一个ObjectFactory
方法JAXBElement<Object> createReceive(Object)
。但是,没有@XmlElementRoot
注释。我看到this question and answer,但我也无法访问第三方插件。是否有可能通过绑定或任何其他本机解决方案解决方案?
答案 0 :(得分:1)
弄清楚这比我制作它要容易得多,或者比链接的问题暗示的要容易得多。我被挂在了没有@XmlElementRoot
的事实上,但事实证明这是不必要的。
simple.xsd
:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="receive" nillable="true" />
</xs:schema>
在命令行上,运行生成.../jdk1.8/bin/xjc simple.xsd
的{{1}}。 ObjectFactory
中的一种方法具有签名ObjectFactory
。
创建了以下实现代码:
public JAXBElement<Object> createReceive(Object value)
根据需要生成以下输出:
package aTest;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import generated.ObjectFactory;
public class start {
public static void main(final String[] args) {
final ObjectFactory factory = new ObjectFactory();
final JAXBElement<Object> element = factory.createReceive(null);
try {
final JAXBContext jaxbContext = JAXBContext.newInstance(JAXBElement.class);
final Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(element, System.out);
} catch (final JAXBException e) {
e.printStackTrace();
}
}
}