2013-05-15 25 views
1

我正在使用Resteasy處理RestWebService。基本實現工作正常。知道我試圖通過休息返回一個複雜對象... 其實它很容易..我想。我得到一個問題,因爲我嵌套的對象(地址)的...TomEE Resteasy JAX-B - >無法獲取嵌套對象

我嘗試是這樣的:

@XmlRootElement(name = "person") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Person implements Serializable { 
    private static final long serialVersionUID = 1199647317278849602L; 
    private String uri; 
    private String vName; 
    private String nName; 
    private Address address; 

     ..... 

     @XmlElementWrapper(name="Former-User-Ids") 
    @XmlElement(name="Adress") 
    public Address getAddress() { 
     return address; 
    } 
.... 

地址如下:

@XmlRootElement(name = "address") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Address { 
    private String uri; 
    private String street; 
    private String city; 

public String getCity() { 
    return city; 
} 

public String getStreet() { 
    return street; 
} 

....Restservice看起來像這樣。它完美無地址對象..

@Path("/getPersonXML/{personNumber}") 
    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public Patient getPatientXML(@PathParam("personNumber") String personNumber) throws ParseException { 

     Address a1 = new Address("de.person/address/" + "432432","Teststret12","TestCity", "32433", "TestCountry", "081511833"); 
     Patient p1 = new Person(); 
     p1.setAddress(a1); 
     p1.setUri("de.spironto/person/"+ "432432"); 
     p1.setnName("Power"); 
     p1.setvName("Max"); 
     return p1; 
    } 

目前,我總是得到一個

javax.xml.bind.JAXBException:

什麼想法?

回答

0

建立一個小的編組測試後。我得到了失敗,有幾個屬性具有相同的名稱。所以我試圖刪除Address類中的所有@XML_Eleemets註釋。 這對我有效...

1

注:我是EclipseLink JAXB (MOXy)的領導和JAXB (JSR-222)專家組的成員。

問題

@XmlElementWrapper註釋必須以集合屬性中。這意味着你可以有:

@XmlElementWrapper 
public List<PhoneNumber> getPhoneNumbers() { 
    return phoneNumbers; 
} 

但不是

@XmlElementWrapper 
public Address getAddress() { 
    return address; 
} 

解決方案#1 - 使用任何JAXB Proivder

你可以使用一個XmlAdapter來做到這一點(見下面鏈接的答案) :

解決方案2 - 使用的EclipseLink JAXB(莫西)

你可以充分利用@XmlPath擴展到這個用例圖:

@XmlPath("Former-User-Ids/Address") 
public Address getAddress() { 
    return address; 
} 

更多信息