标签: jax-rs

如何在Wink客户端注册Jackson提供商?

我正在尝试设置一个玩具应用程序(有一天可能会转向真正的应用程序).我遇到了Wink和Jackson的问题.我有两个应用程序:一个在jetty上运行wink-server,似乎提供了一些JSON数据就好了; 一个在jetty上运行wink-client并且接收JSON数据就好了.问题在于将JSON数据自动反序列化回我的Java bean.

这是我在wink客户端操作中使用的代码:

RestClient client = new RestClient();
Resource resource = client.resource("http://localhost:8081/helloworld");
User user = resource.accept(MediaType.APPLICATION_JSON).get(User.class);
Run Code Online (Sandbox Code Playgroud)

这是我尝试运行Struts操作时收到的错误:

java.lang.RuntimeException: No javax.ws.rs.ext.MessageBodyReader found for type class my.package.structure.User and media type application/json. Verify that all entity providers are correctly registered.
org.apache.wink.client.internal.handlers.ClientResponseImpl.readEntity(ClientResponseImpl.java:123)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:65)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:52)
org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:186)
org.apache.wink.client.internal.ResourceImpl.get(ResourceImpl.java:294)
my.package.structure.action.HelloWorldAction.execute(HelloWorldAction.java:29)
...
Run Code Online (Sandbox Code Playgroud)

如果我用下面的代码替换第一个代码片段中的最后一行,一切都运行正常,花花公子.

String message = resource.accept(MediaType.APPLICATION_JSON).get(String.class);
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(message, User.class);
Run Code Online (Sandbox Code Playgroud)

很明显,数据很好,但问题似乎在于JacksonJsonProvider类没有在Wink客户端注册.我已经看到很多方法用Wink服务器注册提供程序,但不是Wink客户端.

是否可以使第一个代码段正常运行?如果是这样,怎么样?

(顺便说一句,另一个问题可能是我在我的User类上缺少注释.现在没有任何注释.也许我需要一些......)

java json jax-rs jackson apache-wink

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

Websphere 8.5上的JAX-RS Jersey客户端

我正在尝试部署使用jersey的jax-rs客户端应用程序是8.5.
我希望我不需要在战争中包装球衣罐,因为它会提供给他们.
但是在尝试调用我的servlet时遇到了这个错误:

错误404:javax.servlet.UnavailableException:SRVE0203E:Servlet [HelloJAXRSClient]:找到了example.HelloJAXRSClient,但缺少另一个必需的类.SRVE0206E:此错误通常意味着servlet最初使用服务器无法定位的类进行编译.SRVE0187E:检查类路径以确保servlet所需的所有类都存在.SRVE0210I:可以通过仅使用应用程序运行时中的类重新编译servlet来调试此问题

有什么我可以使用的是库,所以我不需要将它们打包到我的应用程序中?

jax-rs jersey websphere-8

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

从JAX-RS资源中获取HTTP URL

从我的JAX-RS(Jersey)资源内部,我需要获取Jersey Servlet"发布"该资源的基本URL .我ServletContext按照这里描述尝试注射,然后执行:

return servletContext.getResource("/").toString();
Run Code Online (Sandbox Code Playgroud)

获取Servlet此资源的Jersey的"基本"URL .

但是,上面的代码返回一个值,如:

jndi:/localhost/jax-rs-tomcat-test/
Run Code Online (Sandbox Code Playgroud)

我期待更多的东西:

http://localhost:8080/jax-rs-tomcat-test/jax-rs
Run Code Online (Sandbox Code Playgroud)

" jax-rs"是我在web.xml中的位置:

<servlet-mapping>  
   <servlet-name>jersey-servlet</servlet-name>  
   <url-pattern>/jax-rs/*</url-pattern>  
</servlet-mapping> 
Run Code Online (Sandbox Code Playgroud)

也就是说,存在四个"差异":(a)协议,(b)协议之后的单个而不是双斜杠,(c)端口号和(d)用于触发Jersey servlet的URL模式缺失.那么,我该怎么做:

  1. http://Jersey servlet 的基本URL
  2. 触发特定@GET或带@POST注释方法的完整URL ?

jax-rs jersey tomcat7

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

java webservice响应对象vs Produces

我试图java webservices并尝试遵循几个教程示例.

在其中一个示例中,我看到@Produces注释用于指定要返回的响应类型.

例:

@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
    return "Hello Jersey";
}
Run Code Online (Sandbox Code Playgroud)

但在另一种情况下,我看到Response对象被用作响应...

例:

@GET
@Path("/{param}")
public Response getMsg(@PathParam("param") String msg) {

    String output = "Jersey say : " + msg;

    return Response.status(200).entity(output).build();

}
Run Code Online (Sandbox Code Playgroud)

题:

  1. 哪个是发送响应的正确方法 - 响应对象或@Produces注释?
  2. 何时可以使用这两种方案?

java jax-rs

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

Hibernate java.lang.NoSuchMethodError:> org.hibernate.integrator.internal.IntegratorServiceImpl.<init>

在我的jax-rs上使用hibernate我收到此错误:

HTTP错误500

访问/ services/datesTest时遇到问题.原因:

Server Error Caused by:
Run Code Online (Sandbox Code Playgroud)

connector.Connector.getSessionFactory(Connector.java:37)上的connectors.Connector.getSessionFactory(Connector.java:37)中的连接器.Connector.getSession(Connector.java:37)位于mainproject.services.HibernateDatesTest的连接器上的java.lang.ExceptionInInitializerError .verifyToken(HibernateDatesTest.java:24)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43 )在com.sun.jersey.server.impl的com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke(JavaMethodInvokerFactory.java:60)的java.lang.reflect.Method.invoke(Method.java:606) .model.method.dispatch.Abs​​tractResourceMethodDispatchProvider $ TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)at com.sun .jersey.serve 在com.sun.jersey的com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)上的r.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288). server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)位于com.sun.jersey的com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84). server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)位于com.sun.jersey.server.impl的com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400). application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349),位于com.sun.jersey.spi.container.servlet.WebComponent的com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339).服务(WebComponent.java:416)com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)at com.sun.jersey.spi.container.servlet.ServletC ontainer.service(ServletContainer.java:699)位于org.eclipse的org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565)的javax.servlet.http.HttpServlet.service(HttpServlet.java:820) .jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479)在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)在org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler .java:521)org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)位于org的org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031). eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)位于org.eclipse.jetty.server.hand.ContextHandler的org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186). dogcope(ContextHandler.java:965)atg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)org.eclipse.jet.Server.handle(Server.java:349)org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)org.eclipse.jetty.server.AbstractHttpConnection $ RequestHandler .headerComplete(AbstractHttpConnection.java:910)在org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)在org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)在有机在org.eclipse.jetty.io.nle.SelectChannelEndPoint $ 1的org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)的eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76) .RUN(SelectChannelEndPoint.java:45)在org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)在org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java: 534)at java.lang.Thread.run(Thread.java:744)引起:java.lang.NoSuchMethodError:org.hibernate.integrator.internal.IntegratorServiceImpl.(Ljava/util/LinkedHashSe)t; Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)V org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:247)at org.hibernate.boot.registry.StandardServiceRegistryBuilder.(StandardServiceRegistryBuilder .java:73)在connectors.Connector.buildSessionFactory(Connector.java:21)... 44更多引起:

.java.lang.NoSuchMethodError:org.hibernate.integrator.internal.IntegratorServiceImpl(Ljava/UTIL/LinkedHashSet; Lorg /休眠/引导/注册表/类装入/ SPI/ClassLoaderService)在org.hibernate.boot.registry.BootstrapServiceRegistryBuilder诉org.hibernate.boot.registry.StandardServiceRegistryBuilder中构建(BootstrapServiceRegistryBuilder.java:247).在connectors.Connector.getSessionFactory(Connector.java:21)上的connectors.Connector.buildSessionFactory(Connector.java:21). 37)在sun.reflect.NativeMethodAccessorImpl.invoke的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的mainproject.services.HibernateDatesTest.verifyToken(HibernateDatesTest.java:24)的connectors.Connector.getSession(Connector.java:45)处. (NativeMethodAccessorImpl.java:57)位于com.sun.jersey.spi.container的java.lang.reflect.Method.invoke(Method.java:606)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43). JavaMethodInvokerFactory $ 1.in voke(JavaMethodInvokerFactory.java:60)at com.sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider $ TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)at com.sun.jersey.server.impl.model.在com.sun.jersey.server.impl的com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)上的method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75). uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)位于com.sun.jersey.server.impl的com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147). uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)位于com.sun.jersey.server.impl.application的com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469). WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebA pplicationImpl.java:1349)com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java: 416)at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)at javax .servlet.http.HttpServlet.service(HttpServlet.java:820)atg.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565)org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java) :479)org.eclipse.jetty上的org.eclipse.jetty.SecurityHandler.handle(SecurityHandler.java:521)的org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119). server.session.SessionHandler.doHandle(SessionHandler.java:227)位于org.eclipse.jetty.servlet.servlet.servlet.ServletHandler.doScope的org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)rvletHandler.java:406)org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)at org位于org.eclipse.jetty.server.Server的org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)的.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) .handle(Server.java:349)在org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)在org.eclipse.jetty.server.AbstractHttpConnection $ RequestHandler.headerComplete(AbstractHttpConnection.java:910)在org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)在org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)在org.eclipse.jetty.server.AsyncHttpConnection.handle( AsyncHttpConnection.java:76)atg.eclipse.jetty.io.nle.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)org.eclipse.jetty.io.nio.SelectChannelEndPoint $ …

java hibernate jax-rs maven

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

如何从ContainerResponseFilter中获取源地址/ IP

我正在编写一个日志记录过滤器,记录在Jersey中运行的Web应用程序的所有HTTP请求/响应.ContainerResponseFilter似乎是一个直接的解决方案,我已设法让它工作.

下一步是记录请求的IP.有没有办法从里面做到这一点ContainerResponseFilter

jax-rs jersey

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

JAX-RS资源生命周期性能影响

我知道默认情况下,JAX-RS端点的生命周期是每个请求一次,因此可以将请求特定的信息注入实例中。

我们还可以使端点Singleton表示每个应用一次,在该端点中,不能将请求特定的信息注入实例,而可以将其注入请求的方法。

1.因此,我想知道哪种方法在性能方面更好,无论是每个请求一次还是每个应用程序一次

2.我还想了解这些方法的优缺点,以及注射要求的特定信息

3.您希望在API应用程序中使用哪种方法

注意:到目前为止,我一直在使用“每次请求一次”的方法,但是我一直想知道这是有效的,肯定是它使编码更容易且可重复使用。

java jax-rs jersey resteasy

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

在resteasy中添加corsfilter后无法访问服务

将corsfilter添加到ApplicationPath后,我无法访问任何服务

这是一个例子

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import org.jboss.resteasy.plugins.interceptors.CorsFilter;


@ApplicationPath("/")
public class JaxRsActivator extends Application {
    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> classes = new HashSet<Class<?>>();

    public JaxRsActivator() {
        CorsFilter corsFilter = new CorsFilter();
        corsFilter.getAllowedOrigins().add("*");
        corsFilter.setAllowedHeaders("Content-Type");
        singletons.add(corsFilter);
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我卷曲,我会得到这个,

curl -i http://localhost:8080/unika/usuarios -H "Origin:otherdomain.com"
HTTP/1.1 404 Not Found
Connection: keep-alive
Access-Control-Allow-Origin: otherdomain.com
X-Powered-By: Undertow 1
Server: Wildfly 8 …
Run Code Online (Sandbox Code Playgroud)

java jax-rs resteasy

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

如何将对象从ContainerRequestFilter传递给Resource

我应该如何/应该将一个对象从ContainerRequestFilter传递给(JAX-RS)Resteasy版本3.0.11中的(后匹配)资源,该版本已嵌入并使用Guice?

java jax-rs resteasy undertow

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

消耗一个不是JSON的主体

我正在开发基于Jersey REST API的Web应用程序.我正在根据客户端要求(JSON格式的输入参数)开发POST服务,并且工作正常.现在他们想要改变输入格式,如下所示.现在我得到415错误(不支持的媒体类型).

这是旧的JSON格式,它的效果很好:

 {
    "weight": 5.0,
    "length": 1.5,
    "width": 2.7,
    "height": 0.7
}
Run Code Online (Sandbox Code Playgroud)

这个格式客户端需要发送.

{
weight = 12;
with = 78;
height = 78;
length = 5;
}
Run Code Online (Sandbox Code Playgroud)

这是我的POST服务:

@POST
@Path("/insert")
@Consumes({MediaType.TEXT_PLAIN})
@Produces({MediaType.APPLICATION_JSON})
Run Code Online (Sandbox Code Playgroud)

以前我用过

@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
Run Code Online (Sandbox Code Playgroud)

java rest json jax-rs jersey

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