0

我的网络应用程序在 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 我导入了 import 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
4

1 回答 1

1

除非您有充分的理由使用特定于 CXF 的内容,否则ResponseBuilderImpl您应该使用 JAX-RSResponse类的静态工厂方法来获取 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();

然后你可以考虑重构以摆脱创建具有模拟状态的构建器,例如将整个响应构建移动到一个知道实体和响应代码的方法中。

于 2013-10-01T09:02:36.267 回答