有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajaxb在嵌套节点中生成xmlns:xsi声明

我希望控制JAXB在编组为XML时在何处生成xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"声明。我见过像this这样的解决方案,使用JAXB_SCHEMA_LOCATION属性将它添加到根元素,但是我不希望它位于根节点上,我希望它位于两者之间。以下是我得到的:

@XmlRootElement(name = "RootNode")
@XmlAccessorType(XmlAccessType.NONE)
public class RootNode {
    @XmlElement(name = "IntermediateNode")
    private IntermediateNode intermediateNode;

    //getter & setter
}

@XmlAccessorType(XmlAccessType.NONE)
public class IntermediateNode {
    @XmlElement(name = "MyEntity")
    private MyEntity myEntity;

    //getter and setter
}

@XmlAccessorType(XmlAccessType.NONE)
public class MyEntity {
    @XmlElement(name = "Name")
    private String name;

    @XmlElement(name = "Title", nillable = true)
    private String title;

    //getters and setters
}

像这样序列化:

MyEntity myEntity = new MyEntity();
myEntity.setName("George");
myEntity.setTitle(null);

IntermediateNode intNode = new IntermediateNode();
intNode.setMyEntity(myEntity);

RootNode rootNode = new RootNode();
rootNode.setIntermediateNode(intNode);

JAXBContext context = JAXBContext.newInstance(RootNode.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(rootNode, System.out);

生成类似以下内容的XML:

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

但我想要的是:

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

我甚至尝试将我的IntermediateNode和MyEntity类移动到它们自己的包中,并带有包信息。java是这样的,但这只是将xmlns:xsi滚动到根元素

@javax.xml.bind.annotation.XmlSchema(
  xmlns = {
    @javax.xml.bind.annotation.XmlNs(prefix = "xsi", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")
  },
  elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

package com.example.intermediate;

有可能得到我想要的吗


共 (0) 个答案