2010-10-22 15 views
1

昨天我試圖使用RestEasy框架的客戶端。該接口有一個方法:反編組後,Rest Easy Framework Framework的值丟失

@PUT 
@Path("document/autoincrement") 
@Consumes("application/xml") 
BaseClientResponse<String> insertPointOfInterest(PoiDocument poiDocument); 

,並調用一些(新澤西州)休息服務看起來像:

String restServerServiceUrl = "http://my.jersey.server/rest/serviceFoo/v1/"; 
    NSSClientService client = ProxyFactory.create(NSSClientService.class, restServerServiceUrl); 

    PoiDocument poiDocument = new PoiDocument("Parkirišče", "90", 390262.85133115170, 42240.33558245482); 

    BaseClientResponse<String> response = client.insertPointOfInterest(poiDocument); 
    assert response.getResponseStatus() == Response.Status.OK; 

    // Expected result 
    //<?xml version="1.0" encoding="UTF-8" standalone="yes"?><insertedRecord><record>14</record></insertedRecord> 

    logger.info("Returned: " + response.getEntity()); 

而且記錄打印:

類預期。

但我想要一個對象不是一個字符串,所以我可以輕鬆地斷言返回的值。接口:

@PUT 
@Path("document/autoincrement") 
@Consumes("application/xml") 
BaseClientResponse<InsertedResponse> insertPointOfInterest(PoiDocument poiDocument); 

而是字符串現在有一個InsertedResponse類的樣子:

@XmlRootElement(name="insertedRecord") 
public class InsertedResponse extends ResponseResult{ 

    String insertedRecord; 

    public InsertedResponse(int insertedRecord) { 
     this.insertedRecord = Integer.toString(insertedRecord); 
    } 

    public InsertedResponse(){ 
     insertedRecord = ""; 
    } 

    @XmlElement(name="record") 
    public String getInsertedRecords(){ 
     return insertedRecord; 
    } 

    public void add(int recNo) { 
     insertedRecord = Integer.toString(recNo); 
    } 
} 

...和它的超:

@XmlRootElement(name = "result") 
public abstract class ResponseResult { 

    protected String getClearString(String string) { 

     if (string != null) { 
      return Constants.removeInvalidXMLCharacters(string); 

     } 
     return ""; 
    } 
} 

現在,當我改變客戶也致電:

BaseClientResponse<InsertedResponse> response = client.insertPointOfInterest(poiDocument); 
    logger.info("Returned: " + response.getEntity().getInsertedRecords()); 

我得到一個空字符串而不是某個值。

所以,問題是 - 去哪裏價值?它應該打印一個數字,如上例中的14。

回答

0

一個缺少的JAXB註解(@XmlSeeAlso)

@XmlRootElement(name = "result") 
@XmlSeeAlso({ InsertedResponse.class, OtherChild.class, SomeOtherChild.class }) 
public abstract class ResponseResult { 

    ... 
} 

和添加的setter方法

@XmlRootElement(name="insertedRecord") 
public class InsertedResponse extends ResponseResult{ 

    ... 

    public void setInsertedRecords(String insertedRecord) {    
     this.insertedRecord = insertedRecord; 
    } 

解決了這個問題。