2010-10-22 36 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; 
    } 

解决了这个问题。