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

父元素网中的元素声明:

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


ArrayOfGeneralAgent类的声明:

@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>


而不是“代理商”得到“ ArrayOfGeneralAgent”。

我尝试了很多事情,但一无所获。

最佳答案

您的问题是@XmlElementRef.name@XmlRootElement不起作用,请阅读有关此here的信息。

您要做的是从xml元素上的XmlElementRef中删除​​属性名称。

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


并将@XmlRootElement添加到您的班级。

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

09-26 10:55