我正在使用Netbeans EE6和jersey库以及教程http://netbeans.org/kb/docs/websvc/rest.html部署一个安静的Web服务。
当我从数据库中包含复合主键的实体创建一个restful Web服务时,当我尝试测试Web服务时,该项目给我一个错误:
SEVERE:缺少方法公共实体的依赖项.RMSchedule service.RMScheduleFacadeREST.find(entities.RMSchedulePK)at index at index 0 SEVERE:方法,公共实体.RMSchedule service.RMScheduleFacadeREST.find(entities.RMSchedulePK),使用资源GET,类service.RMScheduleFacadeREST注释,不被视为有效的资源方法。
错误是由于复合主键还是我应该包含一个步骤? 非常感谢提前。
答案 0 :(得分:0)
我认为这个问题与Netbeans bug有关:
https://netbeans.org/bugzilla/show_bug.cgi?id=208375
创建具有复合主键的实体类时,
创建了两个实体文件。 (ex CustomerEntity.jave, CustomerEntityPK.java)
然后,如果您选择从实体类创建servlet,则servlet会自带生成的代码,如下所示:
@DELETE
@Path("{id}")
public void remove(@PathParam("id") CustomerEntityPK id) { //error
super.remove(super.find(id));
}
@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public CustomerEntity find(@PathParam("id") CustomerEntityPK id) { //error
return super.find(id);
}
问题是传递给servlet方法的参数是CustomerEntityPK,它具有复合主键。
如果你将参数类型更改为类似于String,那么在我的情况下错误就消失了。
@DELETE
@Path("{id}")
public void remove(@PathParam("id") String id) { //type set to String now
super.remove(super.find(id));
}
但在我的项目中,我不需要这样的自动生成代码,因此我只是选择手动创建servlet类并且没有问题。
希望有所帮助。