gpt4 book ai didi

java - 具有可为 nillable 根的 JAXB

转载 作者:行者123 更新时间:2023-12-01 09:06:57 25 4
gpt4 key购买 nike

我有一个无法修改的简单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 ,但是我也无法访问第三方插件。是否有通过绑定(bind)或任何其他 native 解决方案可能的解决方案?

最佳答案

发现这比我做的要容易得多,或者比链接的问题所暗示的要容易得多。我对没有 @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生成 ObjectFactoryObjectFactory中的一种方法有签名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();
}
}
}

这会根据需要生成以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<receive xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>

关于java - 具有可为 nillable 根的 JAXB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com