4
JAXB @XmlIDREF @XmlID做工令人驚訝的JAXB @XmlIDREF @XmlID工作驚人
我的XML輸入
<dept>
<courses>
<course id="1" units="4" level="UNDERGRAD" name="Fundamentals of Programming"/>
<course id="2" units="3" level="UNDERGRAD" name="Advanced Programming">
<pre>1</pre>
</course>
<course id="3" units="3" level="UNDERGRAD" name="Discrete Mathematics">
<pre>1</pre>
</course>
<course id="4" units="3" level="UNDERGRAD" name="Data Structures"/>
<course id="5" units="3" level="UNDERGRAD" name="Database Systems">
<pre>4</pre>
<pre>2</pre>
</course>
<course id="6" units="3" level="UNDERGRAD" name="Internet Engineering">
<pre>4</pre>
<pre>2</pre>
<co>5</co>
</course>
<course id="7" units="3" level="GRAD" name="Formal Methods"/>
<course id="8" units="3" level="GRAD" name="Advanced Networks"/>
<course id="9" units="3" level="UNDERGRAD" name="Fundamentals of Management"/>
<course id="10" units="3" level="UNDERGRAD" name="Fundamentals of IT"/>
<course id="11" units="3" level="UNDERGRAD" name="Multimedia"/>
<course id="12" units="3" level="UNDERGRAD" name="Network Security"/>
<course id="13" units="3" level="UNDERGRAD" name="Elearning"/>
</courses>
<profs>
<prof firstName="Ramtin" id="1"/>
<prof firstName="Ahmad" id="2"/>
<prof firstName="Hesham" id="3"/>
<prof firstName="Fatemeh" id="4"/>
<prof firstName="Mahmood" id="5"/>
<prof firstName="Mahmoudreza" id="6"/>
<prof firstName="Fattaneh" id="7"/>
<prof firstName="Azadeh" id="8"/>
<prof firstName="Siamak" id="9"/>
</profs>
<terms>
<term id="1">
<offering id="1" prof="6" course="1" section="1" time="1" capacity="10"/>
<offering id="2" prof="1" course="2" section="1" time="1" capacity="10"/>
<offering id="3" prof="9" course="3" section="1" time="2" capacity="10"/>
<offering id="4" prof="3" course="4" section="1" time="3" capacity="10"/>
<offering id="5" prof="1" course="7" section="1" time="6" capacity="10"/>
</term>
<term>
<offering id="6" prof="1" course="2" section="1" time="5" capacity="10"/>
<offering id="7" prof="9" course="3" section="1" time="6" capacity="10"/>
<offering id="8" prof="4" course="8" section="1" time="6" capacity="10"/>
<offering id="9" prof="2" course="1" section="1" time="1" capacity="10"/>
</term>
</terms>
<students>
<student firstName="Gholam" lastName="Patoobaf" program="1" id="810190420">
<studyrec grade="9.0" offering="1" status="FAILED"/>
<studyrec grade="0.0" offering="9" status="INPROGRESS"/>
</student>
<student firstName="Ghamar" lastName="Aghrabparast" program="1" id="810190421">
<studyrec grade="16.0" offering="1" status="PASSED"/>
<studyrec grade="0.0" offering="6" status="INPROGRESS"/>
<studyrec grade="0.0" offering="7" status="INPROGRESS"/>
</student>
</students>
</dept>
我對元素的java類:提供
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Offering {
@XmlAttribute
@XmlID
private String id;
@XmlAttribute
@XmlIDREF
private Prof prof;
@XmlAttribute
@XmlIDREF
private Course course;
@XmlAttribute
private String section;
@XmlAttribute
private String time;
@XmlAttribute
private int capacity;
public void setCapacity(int capacity) {
this.capacity = capacity;
}
public int getCapacity() {
return capacity;
}
public void setCourse(Course course) {
this.course = course;
}
public Course getCourse() {
return course;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setProf(Prof prof) {
this.prof = prof;
}
public Prof getProf() {
return prof;
}
public void setSection(String section) {
this.section = section;
}
public String getSection() {
return section;
}
public void setTime(String time) {
this.time = time;
}
public String getTime() {
return time;
}
@Override
public boolean equals(Object t) {
if (t instanceof Offering) {
if(((Offering)t).getId().equals(this.id)) {
return true;
}
}
return false;
}
}
的元素我的java類:教授
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Prof {
@XmlAttribute
private String firstName;
@XmlAttribute
@XmlID
private String id;
public void setId(String id) {
this.id = id;
}
public void setFirstname(String firstname) {
this.firstName = firstname;
}
public String getFirstname() {
return firstName;
}
public String getId() {
return id;
}
}
所以,如果我只是加載和輸入的文件保存到另一個文件 我驚人的看到這一點: 中提供的元素,其中教授ID是小於6,prog屬性未顯示,在java上下文中爲null 但profid爲6或更多的產品具有正確的prof屬性
此事件也發生for course attri提供的弼但對於9,而不是6 你看我下面的輸出的一部分:
...
<offering id="1" prof="6" section="1" time="1" capacity="10"/>
<offering id="2" section="1" time="1" capacity="10"/>
<offering id="3" prof="9" section="1" time="2" capacity="10"/>
<offering id="4" section="1" time="3" capacity="10"/>
<offering id="5" section="1" time="6" capacity="10"/>
...
它例如JAXB沒有規則正常運行此輸入XML不只是ID大於6:
<offering id="1" prof="3" course="1" section="1" time="1" capacity="10"/>
<offering id="2" prof="3" course="2" section="1" time="1" capacity="10"/>
<offering id="3" prof="9" course="3" section="1" time="2" capacity="10"/>
<offering id="4" prof="8" course="4" section="1" time="3" capacity="10"/>
<offering id="5" prof="6" course="7" section="1" time="6" capacity="10"/>
確定解決問題,它有例如JAXB沒有規則正常運行此: – abozar 2013-03-26 18:00:48
下面是演示如何'@ XmlID'和'@ XmlIDREF'被設計成一起工作的例子:http://blog.bdoughan.com/2010/10/j AXB-和共享引用-xmlid-and.html – 2013-03-26 20:12:08