我的web-app在eclipse和Netbeas中正常工作,但是当我尝试在maven中执行包含依赖项后抛出异常。依赖是。
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>2.1.2</version>
</dependency>
这种依赖关系我包括因为我正在使用
ResponseBuilderImpl builder = new ResponseBuilderImpl()
如果我删除了构建器和依赖项,那么它在maven中的工作,但当我包括然后它给出例外。这是我的休息样本休息代码。
@Path("/{userId}/logout")
@PUT
public Response logout(@PathParam ("userId") String userId,@Context HttpServletRequest request,@Context HttpServletResponse response)throws ServletException, IOException
{
ResponseBuilderImpl builder = new ResponseBuilderImpl();
log.debug("request user id for logout::"+userId);
MapUserLogin mapUserLogin=new MapUserLogin();
mapUserLogin.removeMap(userId);
log.debug("after remove userinformation from hashmap");
System.out.print("LOGOUT SUCCESSFULLUY");
builder.status(200).entity("SUCCESS");
return builder.build();
}
所以对于ResponseBuilderImpl我导入了导入org.apache.cxf.jaxrs.impl.ResponseBuilderImpl 如果我删除并只返回字符串类型然后它的工作,但当我使用上面的代码然后只有maven抛出异常异常是。
INFO: Deployed Application(path=C:\App\apache-tomee-jaxrs-1.5.2\webapps\Snefocaremaven)
Oct 01, 2013 10:51:10 AM org.apache.openejb.observer.ObserverManager fireEvent
SEVERE: error invoking org.apache.openejb.observer.ObserverManager$Observer@21d4f61d
java.lang.reflect.InvocationTargetException
答案 0 :(得分:1)
除非您有充分的理由使用特定于CXF的ResponseBuilderImpl
,否则应使用JAX-RS Response
类的静态工厂方法来获取ResponseBuilder,例如
Response response = Response.status(200).entity("SUCCESS").build();
JAX-RS框架将使用内部机制来加载和初始化正确的实现。请注意,除非使用专有功能,否则在编译时不需要CXF依赖项。
<强>更新强>:
ResponseBuilder partial = Response.status(200);
将创建一个可变的构建器实例,可以进一步修改。请注意,您还应该能够修改构建器上的状态。不幸的是(?)JAX-RS API没有“普通”工厂方法。我建议首先尝试以这种方式创建Response
并检查它是否有效或是否存在更微妙的问题。
ResponseBuilder partial = Response.status(200); // mock status
ResponseBuilder filled = fillResponse(partial); // whatever the method is called
return filled.build();
然后你可以考虑重构以摆脱具有模拟状态的构建器的创建,例如将整个响应构建移动到知道实体和响应代码的方法中。