2012-04-27 61 views
1

我有以下的代碼,在返回Foo錯誤產生的JAXB(WebService的)XML

@GET 
@Produces (MediaType.APPLICATION_XML) 
public Foo getXML(){ 
    System.out.println ("getXML Request"); 
    Foo f = new Foo(); 
    d.setA("test"); 
    d.setB("xyxyx"); 
    return f; 
} 

和我Foo類是

@XmlRootElement 
public class Foo{ 

    public void setA(String a) { 
     this.a = a; 
    } 

    public void setB(String b) { 
     this.b = b; 
    } 

     public String getB(){ 
      return b; 
     } 

     public String getA(){ 
      return a; 
     } 

    @XmlAttribute(name="atrribB") 
    private String b; 

    @XmlElement(name="elementA") 
    private String a; 

} 

雖然這樣做,我得到了錯誤的FooClass has two properties of the same name "A"B也是如此。

當我刪除這兩個屬性的方法getters,一切都很好。我是不是想創建getter setter,並讓字段具有公共?

回答

3

您需要任何註釋get方法

@XmlRootElement 
public class Foo{ 

    public void setA(String a) { 
     this.a = a; 
    } 

    public void setB(String b) { 
     this.b = b; 
    } 

    @XmlAttribute(name="atrribB") 
    public String getB(){ 
     return b; 
    } 

    @XmlElement(name="elementA") 
    public String getA(){ 
     return a; 
    } 

    private String b; 

    private String a; 

} 

或指定@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo{ 

    public void setA(String a) { 
     this.a = a; 
    } 

    public void setB(String b) { 
     this.b = b; 
    } 

    public String getB(){ 
     return b; 
    } 

    public String getA(){ 
     return a; 
    } 

    @XmlAttribute(name="atrribB") 
    private String b; 

    @XmlElement(name="elementA") 
    private String a; 

} 

更多信息

+0

它去都得到/字段集?因爲我將在某個時候使用這個類來生成/接收XML。 – 2012-04-27 16:29:32

+1

只是其中一個獲取或設置方法。我已經更新了我的答案來證明這一點。 – 2012-04-27 16:32:59