标签: jax-rs

JAX-WS与JAX-RS对于RESTful Web服务

您好我已经使用JAX-WS进行基于SOAP的Web服务.现在我想使用REST,因为REST比我从这里研究的那样优于SOAP .

但是从不同的文章我知道我们也可以从JAX-WS创建RESTful Web服务.但大多数人都说我们应该使用JAX-RS而不是JAX-WS.

我的问题是JAX-WS RESTful webservice和JAX-RS(jersey)之间有什么区别.JAX-RS优于JAX-WS有什么优势?为什么我们应该将JAX-RS用于RESTful Web服务?

提前致谢.

java rest soap jax-rs jax-ws

23
推荐指数
1
解决办法
3万
查看次数

使用JAX-RS的FileUpload

我尝试从JavaScript客户端上传文件到JAX-RS Java服务器.

我在我的服务器上使用以下REST上传功能:

@POST
@Produces('application/json')
UploadDto upload(
        @Context HttpServletRequest request,
        @QueryParam("cookie") String cookie) {

    def contentType
    byte [] fileBytes

    log.debug "upload - cookie: "+cookie

    try{
        if (request instanceof MultipartHttpServletRequest) {
            log.debug "request instanceof MultipartHttpServletRequest"

            MultipartHttpServletRequest myrequest = request
            CommonsMultipartFile file = (CommonsMultipartFile) myrequest.getFile('file')
            fileBytes = file.bytes
            contentType = file.contentType
            log.debug ">>>>> upload size of the file in byte: "+ file.size
        }
        else if (request instanceof SecurityContextHolderAwareRequestWrapper) {
            log.debug "request instanceof SecurityContextHolderAwareRequestWrapper"

            SecurityContextHolderAwareRequestWrapper myrequest = request

            //get uploaded file's inputStream
            InputStream …
Run Code Online (Sandbox Code Playgroud)

java rest grails jax-rs jersey

23
推荐指数
5
解决办法
6万
查看次数

如何设置和检查JAX-RS的cookie?

我是RESTful API的noobie,我正在尝试构建一个Login服务,我在其中提供了一个电子邮件和密码,如果验证成功,则存储一个cookie.另外,我如何检查cookie(如果存储)?

怎么能实现这一目标?

@Path("/login")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON})
public Response Login(final String i_LoginDetails) throws JSONException {
    final JSONObject obj = new JSONObject(i_LoginDetails);
    try {
        if (isValidUser(obj.getString("email"), obj.getString("password"))) {
            // Set a cookie
        } else {
            // return error invalid-credentials message
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return Response.ok("TEST").build();
}
Run Code Online (Sandbox Code Playgroud)

我如何检查cookie(如果设置)?

java cookies rest jax-rs

23
推荐指数
1
解决办法
2万
查看次数

jax-rs检索表单参数

我正在尝试使用HttpServletRequest检索从已发布表单传递给jax-rs的一些参数.但是,我的请求对象始终为我的参数返回空值.我不是以正确的方式解决这个问题吗?我已经发布了下面的代码,以及一个发送的示例请求.

这是我的服务:

@Path("/")
@Stateless
public class HomeController {

    @Context
    private HttpServletRequest request;
    @Context
    private HttpServletResponse response;
    @EJB
    private LoginServiceLocal loginService;

    @POST
    @Path("/authenticate")
    @Consumes("application/x-www-form-urlencoded")
    public void authenticate() throws Exception {
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        if (loginService.authenticate(email, password)) {
            response.sendRedirect("/app");
        } else {
            request.setAttribute("authenticationError", "Invalid email/password.");

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

示例请求:

POST http://localhost:8081/cheetah-web/authenticate HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026    Firefox/3.6.12
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs java-ee java-ee-6

22
推荐指数
1
解决办法
2万
查看次数

在服务器上运行单元测试(JAX-RS)

我正在编写一个JAX-RS(Jersey + Maven)应用程序来执行一些棘手的操作(例如调用WAR中嵌入的本机可执行文件).我需要在服务器上运行[部分]单元测试(JUnit4)(运行Tomcat 7.0.22的Amazon Elastic Beanstalk)来检查一切是否正常.

除了RYO(滚动你自己的)之外,还有一种标准的,灵活的方式吗?我发现的东西似乎更多地与开发人员机器上的集成测试(即Jersey测试框架)有关.甚至RYO让我感到困惑......我怎样才能从源包中调用测试包中的代码?

基本上,我想创建一个我可以调用的/ test资源,它将以漂亮的格式从服务器返回我的单元测试结果.如果我可以做/ test/{category}更好

java junit tomcat unit-testing jax-rs

22
推荐指数
1
解决办法
1万
查看次数

JAX-RS 2.0更改默认实现

我正在尝试使用RESTEasy作为JAX-RS 2.0客户端实现.问题是我遇到了运行时异常:

06-28 13:29:06.410: E/AndroidRuntime(5745): Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
06-28 13:29:06.410: E/AndroidRuntime(5745):     at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:103)
Run Code Online (Sandbox Code Playgroud)

所以该newBuilder()方法正在搜索JerseyClientBuilder我是否理解它是正确的.如何告诉系统使用RESTEasy?

rest jax-rs jersey resteasy

22
推荐指数
1
解决办法
2万
查看次数

不直接编写Servlet以创建REST API的原因

在我目前的公司中,我们正在开始一个新项目,该项目将是Java中的REST API,部署在像Tomcat这样的servlet容器中.在我之前使用REST框架(如JAX-RS和Jersey,JBOSS REST Easy,Spring MVC)的经验中,我知道使用类似于直接编写Servlet来处理请求的框架的一些优点.

(当然我们知道所提到的框架仍然使用Servlets)

我发现很难说服他们.因为他们建议编写servlet,认为它对性能更好(可能是这种情况,但我认为使用其中一个框架的开销对于REST API来说应该是微不足道的).

这是我的理由:

1)更少的样板和更简洁的代码(更易于维护和测试).使用JAX-RS框架或SpringMVC,您可以通过编写带有注释的方法来非常轻松地定义REST资源,注释指示资源的PATH,要使用的http方法,查询和url参数,接受的编码等标题等.

例:

@GET
@Path("/users")
@Produces({MediaType.APPLICATION_JSON}) 
public UserList getUsers(@QueryParam("group") String group) {
    return userService.findUsers(group);
}
Run Code Online (Sandbox Code Playgroud)

使用servlet,您至少需要这样的东西:

在web.xml中映射每个servlet的url(在Servlet 3.0中不需要):

<servlet>
    <servlet-name>UsersServlet</servlet-name>
    <servlet-class>test.UsersServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UsersServlet</servlet-name>
    <url-pattern>/users</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

然后在servlet类中:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String group = request.getParameter("group");
    response.setContentType("application/json");
    PrintWriter out = response.getWriter();
    JsonSerializer someJsonSerializer = new JsonSerializer();
    String json = someJsonSerializer.serialize(userService.findUsers(group));      
    out.print(json);
}
Run Code Online (Sandbox Code Playgroud)

2)适应性.上述框架允许您轻松地向应用程序添加功能,否则您将需要手动执行,例如使用多个媒体类型输入和输出.例如,根据accept标头,使服务返回xml或json或任何其他服务.像SpringMVC和Jersey这样的框架可以很容易地为您的请求和响应配置序列化器/反序列化器.

3)REST最佳实践.通常,这些框架是基于对REST API遵循的最佳实践的充分理解而构建的,并且基于REST体系结构的标准进行定义,这使得构建可靠且标准的符合标准的应用程序变得更加容易.另一方面,Servlets为您提供了如何处理请求/响应的高度自由,以至于您很难意识到您根本不是RESTfull.

任何其他?

java rest servlets jax-rs spring-mvc

22
推荐指数
3
解决办法
2万
查看次数

Websphere 8中的JAX-RS Jersey 2.10支持

我试图在Websphere 8中使用Jersey 2.10,但它试图引用应用程序,它是JAX-RS 1.1的一个实现(默认Wink)我得到以下错误,即使我通过设置IBM属性禁用了JAX-RS默认值.

引起:java.lang.NoSuchMethodError:javax/ws/rs/core/Application.getProperties()Ljava/util/Map; 在Org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:287)org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:311)

我读了一篇帖子,说要为PARENT_LAST制作课程加载政策.在WAS控制台上禁用了更改该选项,因此我尝试使用(WAS的发布设置 - 使用服务器上的资源运行服务器)并且我的服务器崩溃了.

请指教.谢谢.

websphere jax-rs jersey

22
推荐指数
1
解决办法
2万
查看次数

JAX-RS客户端线程是否安全

在Java EE7中,JAX-RS Client API提供了一个用于访问任何REST资源的高级API.根据文档,"客户端是管理客户端通信基础设施的重量级对象.初始化以及客户端实例的处理可能是一个相当昂贵的操作.因此建议只构建少量的客户端实例在申请中."

为了避免频繁创建客户端,我将缓存客户端实例并重用它.客户端实例线程是否安全,因为并发线程可以使用它?如果我只创建客户端实例并将其重用于所有请求,是否存在任何性能问题?

java rest multithreading jax-rs

21
推荐指数
2
解决办法
1万
查看次数

JAX-RS客户端:ResponseProcessingException处理

一些重载的调用请求方法,例如:get()post(Entity<?> entity)(还有其他)SyncInvoker返回一个Response对象,而不是解组的内容.

我注意到,在get()没有文档的情况下ResponseProcessingException,而其他方法,如所有3个重载 post方法,可能会抛出一个ResponseProcessingException.

我知道这ResponseProcessingExceptionRuntimeException继承自的ProcessingException,但我仍然会解释这意味着该get()方法不会抛出ResponseProcessingException.

它是否正确?怎么样ClientResponseFilter?为什么比其他的呼叫请求方法(行为不同的行为put,post......)?

另外,Javadoc用于抛出的方法ResponseProcessingException说:

在接收到的HTTP响应的处理失败的情况下(例如,在过滤器中或在将响应实体数据转换为特定Java类型的实例期间).

那个部分:

或者在将响应实体数据转换为特定Java类型的实例期间

在这里似乎是错误的,因为该readEntity方法不应该被调用:

https://jersey.java.net/documentation/latest/filters-and-interceptors.html#d0e9915

这是复制和粘贴文档错误吗?

不过,我猜过滤器是一个有效的案例.

java jax-rs jersey java-ee java-ee-7

21
推荐指数
1
解决办法
2382
查看次数