JAXB为没有内容的标记设置值

时间:2012-04-24 09:09:22

标签: java xml jaxb xsd javabeans

我正在使用JAXB从XML模式生成bean模型。模式中的一个构造是可以存在或不存在某个标记。例如下面的sniplet中的ping:

   <buildtime-behavior>
        <ping/>
    </buildtime-behavior>

在XSD中,我将其映射为:

<xs:element name="buildtime-behavior">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="ping" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

在JAXB生成的BuildtimeBehavior类中,这导致:

public void setPing(Object value) 

现在我想设置或清除该标签。但是我不能简单地执行“new Object()”,因为这将导致“java.lang.Object无法转换为org.w3c.dom.Element”。但是我没有Document来创建Element。由JAXB生成的ObjectFactory没有createPing()方法......

如何设置ping?

1 个答案:

答案 0 :(得分:0)

您可以按如下方式创建ping元素:

package forum10294935;

import javax.xml.parsers.*;
import org.w3c.dom.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.newDocument();
        Element pingElement = document.createElement("ping");
    }

}

在您的问题中,您声明您是从XML架构生成模型的。如果您可以修改模型或从Java类开始,则下面是您可以尝试使用XmlAdapter的方法的链接。