0

I am not getting name as tag name for @XmlElementRef.

Element declaration in parent elemnet:

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

Declaration of class ArrayOfGeneralAgent:

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

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

...
}

From Above code expecting below xml:

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

But getting XML like this:

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

Instead of "Agents" getting "ArrayOfGeneralAgent".

I tried to many things but nothing found.

paril
  • 1,850
  • 2
  • 14
  • 26
  • Did you try to add @XmlRootElement(name = "Agents") as an annotation above public class ArrayOfGeneralAgent – dirbacke Oct 29 '19 at 12:29
  • Yes, I added @XmlRootElement(name = "Agents") annotation above public class ArrayOfGeneralAgent. But getting same output. – paril Oct 29 '19 at 12:32
  • Try removing name attribute from @XmlElementRef(name... and add @XmlRootElement(name = "Agents") to ArrayOfGeneralAgent. Does this work? – dirbacke Oct 29 '19 at 12:40

1 Answers1

1

Your problem is that @XmlElementRef.name does not work for @XmlRootElement, read about this here.

What you have to do is to remove the attribute name from XmlElementRef on your xml element.

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

and add @XmlRootElement to your class.

@XmlRootElement(name="Agents")
public class ArrayOfGeneralAgent{...}
dirbacke
  • 2,861
  • 21
  • 25