with jaxb, i try to read an xml file only a few element in xml file are interesting, so i would like to skip many element
xml i try to read
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)-->
<flx:ModeleREP xsi:schemaLocation="urn:test:mod_rep.xsd mod_rep.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flx="urn:test:mod_rep.xsd">
<flx:DocumentHeader>
<flx:Identification v="04489"/>
</flx:DocumentHeader>
<flx:TimeSeries>
<flx:Identification v="test1a"/>
<flx:BusinessType v="A01"/>
<flx:Product v="123a"/>
<flx:ResourceObject codingScheme="N" v="testa"/>
<flx:Period>
<flx:TimeInterval v="2011-07-02T00:00/2011-07-16T00:00"/>
<flx:Resolution v="PT2H"/>
<flx:Pt>
<flx:P v="1"/>
<flx:Q unitCode="String" v="1.0"/>
<flx:A currencyIdentifier="String" v="195.0"/>
</flx:Pt>
</flx:Period>
</flx:TimeSeries>
<flx:TimeSeries>
<flx:Identification v="test2a"/>
<flx:BusinessType v="A01"/>
<flx:Product v="a123b"/>
<flx:ResourceObject codingScheme="N" v="test2"/>
<flx:Period>
<flx:TimeInterval v="2011-07-02T00:00/2011-07-16T00:00"/>
<flx:Resolution v="PT2H"/>
<flx:Pt>
<flx:P v="1"/>
<flx:Q unitCode="String" v="1.0"/>
<flx:A currencyIdentifier="String" v="195.0"/>
</flx:Pt>
<flx:Pt>
<flx:P v="2"/>
<flx:Q unitCode="String" v="1.0"/>
<flx:A currencyIdentifier="String" v="195.0"/>
</flx:Pt>
</flx:Period>
</flx:TimeSeries>
</flx:ModeleREP>
my class
@XmlRootElement(name="ModeleREP", namespace="urn:test:mod_rep.xsd")
public class ModeleREP {
@XmlElement(name="TimeSeries")
protected List<TimeSeries> timeSeries;
public List<TimeSeries> getTimeSeries() {
if (this.timeSeries == null) {
this.timeSeries = new ArrayList<TimeSeries>();
}
return this.timeSeries;
}
public void setTimeSeries(List<TimeSeries> timeSeries) {
this.timeSeries = timeSeries;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "TimeSeries")
public class TimeSeries {
@XmlElement(name="ResourceObject")
protected RessourceObject resourceObject;
@XmlElement(name = "Period")
protected Period period;
public RessourceObject getResourceObject() {
return this.resourceObject;
}
public void setResourceObject(RessourceObject resourceObject) {
this.resourceObject = resourceObject;
}
public Period getPeriod() {
return this.period;
}
public void setPeriod(Period period) {
this.period = period;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ResourceObject")
public class RessourceObject {
@XmlAttribute(name = "codingScheme")
protected String codingScheme;
@XmlAttribute(name = "v")
protected String v;
public String getCodingScheme() {
return this.codingScheme;
}
public void setCodingScheme(String codingScheme) {
this.codingScheme = codingScheme;
}
public String getV() {
return this.v;
}
public void setV(String v) {
this.v = v;
}
}
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "Period")
public class Period {
@XmlElement(name = "TimeInterval")
protected TimeInterval timeInterval;
@XmlElement(name = "Pt")
protected List<Pt> pt;
public TimeInterval getTimeInterval() {
return this.timeInterval;
}
public void setTimeInterval(TimeInterval timeInterval) {
this.timeInterval = timeInterval;
}
public List<Pt> getPt() {
if (this.pt == null) {
this.pt = new ArrayList<Pt>();
}
return this.pt;
}
public void setPt(List<Pt> pt) {
this.pt=pt;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "TimeInterval")
public class TimeInterval {
@XmlAttribute(name = "v")
private String timeIntervalPeriod;
public String getTimeIntervalPeriod() {
return this.timeIntervalPeriod;
}
public void setTimeIntervalPeriod(String timeIntervalPeriod) {
this.timeIntervalPeriod = timeIntervalPeriod;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Pt")
public class Pt {
@XmlElement(name = "P")
protected P p;
@XmlElement(name = "A")
protected A a;
public P getP() {
return this.p;
}
public void setP(P p) {
this.p = p;
}
public A getA() {
return this.a;
}
public void setA(A a) {
this.a = a;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "P")
public class P {
@XmlAttribute(name = "v")
protected String position;
public String getPosition(){
return this.position;
}
public void setPosition(String position){
this.position=position;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "A")
public class A {
@XmlAttribute(name = "v")
protected String calculatedAmount;
public String getCalculatedAmount() {
return this.calculatedAmount;
}
public void setCalculatedAmount(String calculatedAmount) {
this.calculatedAmount = calculatedAmount;
}
}
when i try to read the xlm file i get i get
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "timeSeries"
this problem is related to the following location:
at public java.util.List testjaxp.ModeleREP.getTimeSeries()
at testjaxp.ModeleREP
this problem is related to the following location:
at protected java.util.List testjaxp.ModeleREP.timeSeries
at testjaxp.ModeleREP
i don't understand this error
edit: i use jaxb-impl-2.1.12
ok now i don't have any error, but when i check my object, timeSeries is null...
so maybe jaxb seem to have problem with flx?
just declare the member variables to private in the class you want to convert to XML. Happy coding
I've just run into this problem and solved it.
The source of the problem is that you have both XmlAccessType.FIELD and pairs of getters and setters. The solution is to remove setters and add a default constructor and a constructor that takes all fields.
You need to configure class
ModeleREP
as well with@XmlAccessorType(XmlAccessType.FIELD)
as you did with classTimeSeries
.Have al look at OOXS
Your JAXB is looking at both the
getTimeSeries()
method and the membertimeSeries
. You don't say which JAXB implementation you're using, or its configuration, but the exception is fairly clear.and
You need to configure you JAXB stuff to use annotations (as per your
@XmlElement(name="TimeSeries")
) and ignore public methods.I had a service class with signature as below"
On run I got the same error for
FetchIQAStatusResponseVO
fields. I just added a line on top ofFetchIQAStatusResponseVO
:and this resolved the issue.