2013-07-30 68 views
1

我正在處理一個小型項目,我必須返回特定接口的實例數組。當我返回接口的單個​​實例時,一切正常。當我返回實例的數組,我得到以下錯誤:返回一組接口實例


編輯2013年8月2日
相同的代碼工作完美,如果我使用抽象類。接口似乎是問題。


Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of    IllegalAnnotationExceptions 
Person is an interface and JAXB cannot handle interfaces 
     est une interface et JAXB ne peut pas gérer les interfaces. 
    this problem is related to the following location: 
    at Person 
Person does not have a default empty constructor 
     ne comporte aucun constructeur sans argument par défaut. 
    this problem is related to the following location: 
    at Person 

如何我處理回用JAXB和JAX-RS的接口的實例數組?

我正在使用Gassfish 4,並嘗試以下操作。數據代碼:

@XmlRootElement 
public interface Person { 
    @XmlAttribute 
    public String getId(); 
    @XmlElement 
    public String getName(); 
} 

@XmlRootElement 
public class P1 implements Person { 

    @Override 
    @XmlAttribute 
    public String getId() { 
    return "1"; 
    } 

    @Override 
    @XmlElement 
    public String getName() { 
    return this.getClass().getSimpleName(); 
    } 
} 

@XmlRootElement 
public class P2 implements Person { 

    @Override 
    @XmlAttribute 
    public String getId() { 
    return "2"; 
    } 

    @Override 
    @XmlElement 
    public String getName() { 
    return this.getClass().getSimpleName(); 
    } 
} 

JAX-RS碼:

Person[] persons = {new P1(), new P2()}; 

@GET 
@Path("/query") 
@Produces({ MediaType.APPLICATION_JSON }) 
public Person[] findByQuery(@QueryParam("name") String name) { 
    return persons; 
} 

謝謝!

+0

會發生什麼,如果你添加一個默認的空構造到'P1'和'P2'類('P1(){超( );}')? – drvdijk

+0

@drvdijk謝謝你的回覆。當我向P1和P2類添加一個默認的空構造函數時,引發了同樣的異常。 – ffmp

回答

1

嘗試從你的接口類的實現類的指點,如:

@XmlRootElement 
@XmlSeeAlso({P1.class, P2.class}) 
public interface Person { 
    @XmlAttribute 
    public String getId(); 
    @XmlElement 
    public String getName(); 
} 
+0

謝謝你的回答。我嘗試過,並提出了相同的例外。 – ffmp

+0

如果我使用抽象類,相同的代碼完美地工作。接口似乎是問題。你知道JAX-B可以處理一系列接口嗎? – ffmp