Tag: jersey

JAX-RS和长轮询

我正在尝试使用JAX-RS(Jersey实现)进行长轮询,但它不能像我预期的那样工作。 也许我误会了什么。 我很感激任何建议。 请注意,出于安全原因,使用反向连接(类似Atmosphere,Comet等)不是一种选择。 并不是说我目前正在开发Tomcat 7。 从JQuery Ajax调用(使用$.ajax )调用以下方法。 @Path(“/poll”) @GET public void poll(@Suspended final AsyncResponse asyncResponse) throws InterruptedException { new Thread(new Runnable() { @Override public void run() { this.asyncResponse = asyncResponse; // wait max. 30 seconds using a CountDownLatch latch.await(getTimeout(), TimeUnit.SECONDS); } }).start(); } 从我的应用程序调用另一个方法(在JMS调用之后): @POST @Path(“/printed”) public Response printCallback() { // … // […]

Jersey restful service communication(IncompatibleClassChangeError)

我在JDK 1.6 http服务器上创建了一个基于jersey 1.12的宁静服务门面。 当我在eclipse中启动我的应用程序时,一切正常。 我可以毫无困难地与外观进行通信,但是当我使用启动脚本通过控制台启动应用程序时,我在访问服务时遇到了IncompatibleClassChangeError。 我能够缩小问题的范围。 问题在于发送响应。 因为我可以正常地与服务通信(处理请求)但我没有得到回复。 你有什么线索吗? 启动脚本 #!/usr/bin/env bash libpath= for i in $(ls lib/*|grep “.jar”); do libpath=$( echo “$i:$libpath”); done java -cp “$(echo $libpath)build/jar/myjar.jar” org…..Startup 将被抛出的exception WARNUNG: Class org….facade.ServiceFacadeImpl is ignored as an instance is registered in the set of singletons Call getMutationList: NP_005378 Exception in thread “pool-1-thread-1” java.lang.IncompatibleClassChangeError: Class […]

如何实现没有web.xml的jaxrs应用程序

我试图在没有web.xml配置的情况下部署一个非常简单的jaxrs应用程序,并且无法使其正常工作。 我希望访问的URL是serverandport / {appname} / rest / welcome / hello,我想我必须遗漏一些显而易见的东西。 应用 @ApplicationPath(“/rest”) public class EngineApp extends Application { @Override public Set<Class> getClasses() { Set<Class> s = new HashSet<Class>(); s.add(RestTestImpl.class); return s; } } 资源 @Path(“/welcomes”) public class RestTestImpl { @GET @Path(“hello”) public String sayPlainHello() { return “Hi from Rest”; } } POM片段 org.apache.maven.plugins maven-war-plugin 2.1.1 […]

如何模拟MyBatis映射器接口?

我正在为我的Jersey rest API编写unit testing,该API在后台使用MyBatis。 这是我的课程结构: rest服务: @Path(“/api”) public class HelloRestService { @Inject HelloBean helloBean; @GET @Path(“/echo/{name}”) public Response echo(@PathParam(“name”) String name) { return Response.status(200).entity(helloBean.sayHello(name)).build(); } } 无状态EJB: @Stateless public class HelloStatelessBean implements HelloBean { // Injected MyBatis mapper (dao) @Inject private EmployeeMapper employeeMapper; @Override public Employee getEmployeeById(final Long id) { return employeeMapper.getEmployeeById(id); } @Override public […]

@Context返回代理而不是HttpServletRequest(代理范围内没有线程本地值)

理解为什么@Contextdependency injection返回$ Proxy(随机数)实例的集合而不是HttpServletRequest或HttpServletResponse时,我有点问题。 我正在使用Glassfish 3.1.2.2及其版本的Jersey(Jersey:1.11.1),我的应用程序是作为EAR应用程序构建的。 我有简单的@Remote接口,我在那里注释我的方法和REST服务没有任何问题,但是当我尝试访问HttpServletRequest信息时,它只会导致问题。 我的会话bean中有注释的私有字段: @Context private HttpServletRequest request; @Context private HttpServletResponse response; 并创建方法签名以包含@Context作为参数集: @POST @Path(“authenticate”) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) public Response authenticate(@FormParam(“username”) String username, @FormParam(“password”) String password, @Context HttpServletRequest request, @Context HttpServletResponse response); 当我尝试在条目之后调试方法时,我可以看到全局请求和响应对象为null,其中本地方法实例是$ ProxyXXX类型。 问题是我无法访问(或者我不确定)这些对象。 根据网络上的教程,他们应该可以使用,但是当我尝试访问这些时,这就是抛出: WARNING: StandardWrapperValve[RestDataService]: PWC1406: Servlet.service() for servlet RestDataService threw exception java.lang.IllegalStateException: No thread local value in scope for […]

Jersey RESTful服务:资源和响应

我看到很多基于泽西岛的Web服务由1个以上的WebResources组成,这些WebResources有1个以上的端点/方法,如下所示: package com.myws.fizz; public class FizzResource { @GET @Path(“/fizz/{id}”) public Response getFizzById(@PathParam(“id”) Long id) { // …etc. } @GET @Path(“/fizz”) public Fizz getFizzByFoo(Foo foo) { // …etc. } } package com.myws.buzz; public class BuzzResource { @POST @Path(“/buzz”) public Response createBuzz(Buzz buzz) { // …etc. } } 我对泽西岛认为的“资源”感到困惑。 “资源”和数据库之间是否存在关系? 一张桌子? 一个POJO? 你何时返回一个Response与一个POJO? 看看我上面的2个getFizz方法。 我何时返回Fizz ,何时返回Response ?

如何从ContainerRequestContext JERSEY 2.1获取IP?

我的代码是这样的: public void filter(ContainerRequestContext request) throws IOException { // can I get Ip from request????? } 如何从request获取IP地址?

无法在Java Servlet中反序列化JSON

我的端点无法理解传入的JSON。 这是端点: import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.hibernate.Query; import org.hibernate.Session; import org.json.JSONObject; … @POST @Path(“/{department}/{team}”) @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response handleJSON(JSONObject json , @PathParam(“department”) String department, @PathParam(“team”) String team){ MyObj myObj = new MyObj(); myObj.setDepartment(department); myObj.setTeam(team); myObj.setPlatform(json.optString(“platform”)); saveObj(myObj); return Response.ok(true).build(); […]

这种依赖性给了我一个jar的两个版本。 我该如何解决?

我正在使用Gradle作为我的项目。 我在build.gradle中指定的依赖项之一是 compile ‘org.glassfish.jersey.media:jersey-media-moxy:2.0’ 这在普通的Java应用程序上工作正常,但是当我尝试在Android上构建它时,我得到: 在查看引用的库时,很明显有javax.inject-2.3.0-b05.jar和javax.inject-1.jar ,我发现它们都是由上面的依赖项添加的。 我猜这个“重复”的jar是造成构建错误的原因。 我该如何解决这个问题? 为什么依赖包含两个相同的jar? 有没有办法用这两个jar子制作Android版本或删除其中一个jar子?

使用Java保护REST API

我正在使用Jersey构建一个Java API。 我想使用API​​令牌安全方案来保护敏感的API调用,但我不知道从哪里开始。 是否有一个框架可以为我开箱即用? 或者我是否必须实施自己的安全计划?