cxf通过json异常进行版本控制

时间:2017-12-14 09:41:56

标签: json cxf

这是暴露的方式

@POST
@Path("/postPerson/{id}")
@Consumes({"application/com.myapp-v1.0+xml", "application/com.myapp-v1.0+json"})
@Produces(MediaType.APPLICATION_JSON)
public Person postPerson(Person person, @PathParam("id") int id) {
    log4j.info("adding person to map   id   : " + id + "  person  : " + person.toString());
    personsMap.put(id, person);
    log4j.info("After size  v1.0 : " + personsMap.size() + " id : " + id);
    return person;
}

@POST
@Path("/postPerson/{id}")
@Consumes({"application/com.myapp-v2.0+xml", "application/com.myapp-v2.0+json"})
@Produces(MediaType.APPLICATION_XML)
public String postPersonv1(Person person, @PathParam("id") int id) {
    log4j.info("Before size  v2.0 : " + personsMap.size() + " id : " + id);      
    personsMap.put(id, person);
    log4j.info("After size  v2.0 : " + personsMap.size() + " id : " + id);
    return "ok";
}

XML工作得很好!!

但是当我发布Json面对这个例外时:

未找到类server.obj.Person,ContentType:application / com.myapp-v2.0 + json的消息正文阅读器 [警告] / malamPayroll / cxfDemo / postPerson / 1000 java.lang.AbstractMethodError:javax.ws.rs.core.Response $ ResponseBuilder.status(ILjava / lang / String;)Ljavax / ws / rs / core / Response $ ResponseBuilder;         在javax.ws.rs.core.Response $ ResponseBuilder.status(Response.java:921)

enter image description here

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,经过一些实验,我只是将javax.ws.rs-api的版本从2.1降级到2.0.1,异常消失了。仍然不确定是什么导致异常,因为在2.1源代码中我甚至看不到使用字符串作为输入参数的状态方法。