JAXB 编组 @XmlElementRef 名称 属性 不是名称

JAXB marshalling @XmlElementRef name property not coming as Name

我没有将名称作为@XmlElementRef 的标记名称。

父 elemnet 中的元素声明:

@XmlElementRef(name = "Agents",  type = JAXBElement.class, required = false)
protected JAXBElement<ArrayOfGeneralAgent> agents;

classArrayOfGeneralAgent 的声明:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Agents", propOrder = {
    "generalAgent"
})
public class ArrayOfGeneralAgent {

@XmlElement(name = "GeneralAgent", nillable = true)
        protected List<GeneralAgent> generalAgent;

...
}

来自上面的代码期望低于 xml:

<Agents>
  <GeneralAgent>
    <ComPerc>1.5</ComPerc>
    <CustID>abc</CustID>
    <SharePerc>123</SharePerc>
  </GeneralAgent>
</Agents>

但是 XML 是这样的:

<ArrayOfGeneralAgent>
  <GeneralAgent>
    <ComPerc>1.5</ComPerc>
    <CustID>abc</CustID>
    <SharePerc>123</SharePerc>
  </GeneralAgent>
</ArrayOfGeneralAgent>

而不是 "Agents" 得到 "ArrayOfGeneralAgent"。

我尝试了很多东西,但没有找到。

您的问题是 @XmlElementRef.name 不适用于 @XmlRootElement,阅读此 here

您需要做的是从 xml 元素的 XmlElementRef 中删除属性 name

@XmlElementRef(type = JAXBElement.class, required = false)
protected JAXBElement<ArrayOfGeneralAgent> agents;

并将 @XmlRootElement 添加到您的 class。

@XmlRootElement(name="Agents")
public class ArrayOfGeneralAgent{...}