标签: grizzly

无法从START_OBJECT标记中反序列化java.lang.String的实例

我遇到了一个问题,我的可部署jar遇到了一个异常,当我在IntelliJ中本地运行时,这个异常不会发生.

例外:

Receiving an event {id=2, socket=0c317829-69bf-43d6-b598-7c0c550635bb, type=getDashboard, data={workstationUuid=ddec1caa-a97f-4922-833f-632da07ffc11}, reply=true}
Firing getDashboard event to Socket#0c317829-69bf-43d6-b598-7c0c550635bb
Failed invoking AtmosphereFramework.doCometSupport()
java.lang.IllegalArgumentException: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: N/A; line: -1, column: -1]
        at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2502)
        at org.codehaus.jackson.map.ObjectMapper.convertValue(ObjectMapper.java:2468)
        at com.github.flowersinthesand.portal.support.DefaultDispatcher$DefaultHandler$DataParam.resolve(DefaultDispatcher.java:270)
        at com.github.flowersinthesand.portal.support.DefaultDispatcher$DefaultHandler.handle(DefaultDispatcher.java:204)
        at com.github.flowersinthesand.portal.support.DefaultDispatcher.fire(DefaultDispatcher.java:107)
        at com.github.flowersinthesand.portal.support.AbstractSocketFactory.fire(AbstractSocketFactory.java:73)
        at com.github.flowersinthesand.portal.atmosphere.AtmosphereSocketFactory.onRequest(AtmosphereSocketFactory.java:75)
        at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:256)
        at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:166)
        at org.atmosphere.container.Grizzly2WebSocketSupport.service(Grizzly2WebSocketSupport.java:75)
        at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1342)
        at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:219)
        at org.atmosphere.websocket.DefaultWebSocketProcessor$2.run(DefaultWebSocketProcessor.java:183)
        at org.atmosphere.util.VoidExecutorService.execute(VoidExecutorService.java:101)
        at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:178)
        at org.atmosphere.websocket.DefaultWebSocketProcessor.invokeWebSocketProtocol(DefaultWebSocketProcessor.java:167)
        at org.atmosphere.container.Grizzly2WebSocketSupport$Grizzly2WebSocketApplication.onMessage(Grizzly2WebSocketSupport.java:171)
        at org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:164)
        at org.glassfish.grizzly.websockets.frametypes.TextFrameType.respond(TextFrameType.java:70)
        at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
        at org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) …
Run Code Online (Sandbox Code Playgroud)

java deployment grizzly atmosphere

58
推荐指数
4
解决办法
20万
查看次数

如何在Heroku上使用JAX-RS找出传入的RESTful请求的IP?

我正在基于一个示例编写一个托管在Heroku上的Java RESTful服务 - > https://api.heroku.com/myapps/template-java-jaxrs/clone

我的样品服务是:

package com.example.services;

import com.example.models.Time;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/time")
@Produces(MediaType.APPLICATION_JSON)
public class TimeService {

    @GET
    public Time get() {
        return new Time();
    }

}
Run Code Online (Sandbox Code Playgroud)

我的主要是:

public class Main {

    public static final String BASE_URI = getBaseURI();

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        final Map<String, String> initParams = new HashMap<String, String>();
        initParams.put("com.sun.jersey.config.property.packages","services.contracts"); 

        System.out.println("Starting grizzly...");
        SelectorThread threadSelector = GrizzlyWebContainerFactory.create(BASE_URI, initParams);
        System.out.println(String.format("Jersey started with WADL available at …
Run Code Online (Sandbox Code Playgroud)

rest jax-rs heroku jersey grizzly

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

哪个NIO库(Netty,Grizzly,kryonet,...)用于Java中的简单后端服务器实现?

我们的前端是简单的Jetty(稍后可能会被Tomcat替换)服务器.通过servlet,我们提供了一个公共HTTP API(或多或少RESTful)来公开我们的产品功能.

在后端,我们有一个Java进程,它可以执行多种维护任务.虽然后端进程通常会在有时间的情况下执行自己的任务,但是前端需要唤醒后端以在后台执行某项任务.

哪个(N)IO库是这项任务的理想选择?我找到了Netty,Grizzly,kryonet和普通的RMI.现在,我倾向于说Netty,它似乎很简单,它可能非常可靠.

你们有没有这种设置的经验?你会选择什么?

谢谢!

java rmi grizzly netty kryonet

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

jersey 2:如何创建自定义HTTP参数绑定

我正在尝试为我的restful服务创建一个自定义的http param绑定.请参阅下面的示例.

@POST
@Path("/user/{userId}/orders")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public MyResult foo(@PathParam("userId") String someString, @UserAuthHeaderParam String authString){

}
Run Code Online (Sandbox Code Playgroud)

您可以看到函数签名中有UserAuthHeaderParam注释.我想要做的是有一个自定义的http param绑定,而不是标准的javax.ws.rs.*Param.

我试图实现org.glassfish.hk2.api.InjectionResolver,它基本上从http头中提取值:

public class ProtoInjectionResolver implements InjectionResolver<UserAuthHeaderParam>{
...
@Override
public Object resolve(Injectee injectee, ServiceHandle< ? > root)
{

    return "Hello World";
}
...

}
Run Code Online (Sandbox Code Playgroud)

当我调用restful服务时,服务器会遇到异常.它表明框架无法解析函数签名中的参数:

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=String,parent=MyResource,qualifiers={}),position=0,optional=false,self=false,unqualified=null,2136594195), 

java.lang.IllegalArgumentException: While attempting to resolve the dependencies of rs.server.MyResource errors were found
Run Code Online (Sandbox Code Playgroud)

请帮忙.任何建议表示赞赏.我在谷歌上做了很多搜索,但未能使它工作.泽西岛2.*.如何替换Jersey 1.*的InjectableProvider和AbstractHttpContextInjectable可能是类似的问题.

- 更新:我使用AbstractBinder将我的解析器绑定到UserAuthHeaderParam:

public class MyApplication extends ResourceConfig
{

public MyApplication()
{
    register(new AbstractBinder() …
Run Code Online (Sandbox Code Playgroud)

java grizzly jersey-2.0

16
推荐指数
1
解决办法
5638
查看次数

Tyrus WebSockets(Java) - 如何设置客户端本地IP地址

有没有办法在使用WebSockets(Tyrus)时指定本地IP地址和端口?

我正在寻找与Socket的完整4参数构造函数相同的功能

编辑:

我发现低级Grizzly TCPNIOTransport确实有一个带本地地址connect()方法,但我不知道如何让Tyrus客户端使用它.

java grizzly websocket tyrus

14
推荐指数
1
解决办法
436
查看次数

在Jersey测试呼叫上设置查询参数

我有一个基于Jersey的Java servlet:

@Path("foo")
class Foo {
  @GET
  @Path("bar")
  public Response bar(@QueryParam("key") String value) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以在Tomcat中称它为:

http://localhost:8080/container/foo/bar?key=blah
Run Code Online (Sandbox Code Playgroud)

但是,在我的JerseyTest中,使用Grizzly,它没有正确处理参数.此测试用例返回404错误:

@Test
public void testBar() {
  final Response response = target("foo/bar?key=blah").request().get();
}
Run Code Online (Sandbox Code Playgroud)

我怀疑问题是它正在寻找一个名为资源foo/bar?key=blah而不是试图传递key=blah给资源的资源foo/bar.如果我只是传递"foo/bar"target(),我得到一个500,因为代码抛出一个null参数的异常.

我查看了Jersey测试文档,以及一些示例,我发现了一些可能用于将参数传递给GET的神秘内容,但没有一个看起来像是为参数赋值,所以我并不积极如何我会用它.

如何将该值传递给该参数?

java jersey grizzly jersey-2.0

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

在运行Jersey REST服务的Grizzly服务器上使用过滤器

我正在尝试使用Grizzly创建一个服务器来运行我使用Jersey开发的REST服务.我使用以下方法创建Grizzly服务器:

final String baseUri = "http://localhost:9998/";
final Map<String, String> initParams = new HashMap<String, String>();
initParams.put("com.sun.jersey.config.property.packages", "me.my.rest.package");
SelectorThread threadSelector = 
  GrizzlyWebContainerFactory.create(baseUri, initParams);
Run Code Online (Sandbox Code Playgroud)

正如我发现的所有例子似乎都暗示的那样.这很好,服务器启动并能够将传入的请求转发到我的资源类.

但是,服务实现要求它使用servlet过滤器.似乎Grizzly通过ServletAdapter类支持过滤器的定义和其他类似的servlet相关配置选项.我的问题是,在使用com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory提供Jersey集成的时,我无法弄清楚如何定义过滤器.

有任何想法吗?

servlets jersey grizzly

12
推荐指数
1
解决办法
5804
查看次数

使用web.xml配置Grizzly

我可以用灰熊开始并用以下几行在其上部署Jersey webservices.

protected HttpServer create() throws Throwable {
  ResourceConfig rc = new PackagesResourceConfig("com.resource", "com.provider");
  HttpServer server = GrizzlyServerFactory.createHttpServer(uri, rc);
  return server;
}
Run Code Online (Sandbox Code Playgroud)

但有没有办法加载web.xml而不是ResourceConfig

<web-app>
  <servlet>
    <servlet-name>Jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.resource, com.provider</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

web.xml jersey grizzly

12
推荐指数
1
解决办法
2664
查看次数

如何在运行grizzly的java se上启用web服务(jaxrs/jersey)中的CDI注入?

如何允许CDI将资源注入到宁静的Web服务资源中?我使用焊接2(cdi),泽西(jaxrs)和灰熊(网络服务器)在标准java上运行.这是我简单的网络资源:

import training.student.StudentRepository;
import javax.inject.Inject;
import javax.ws.rs.*;

@Path("student")
public class StudentWebResource {
  @Inject
  private StudentRepository studentRepository;  

  @GET
  @Path("count")
  @Produces(MediaType.TEXT_PLAIN)
  public Integer getCount() {
    return studentRepository.studentCount();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我如何焊接启动我的简单Web服务器:

public class Main {
  public static void main(String[] args) throws Exception {
    startCdiApplication();
  }

  public static void startCdiApplication() throws Exception {
    Weld weld = new Weld();
    try {
      WeldContainer container = weld.initialize();
      Application application = container.instance().select(WebServer.class).get();
      application.run();
    } 
    finally {
      weld.shutdown();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我怀疑的代码需要修改,以通知球衣使用焊接CDI注入分辨率:

...
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.jackson.JacksonFeature; …
Run Code Online (Sandbox Code Playgroud)

java jax-rs jersey grizzly cdi

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

具有静态内容和REST资源的Grizzly Server

我有一个Jersey REST 2.5.1服务,通过Grizzly服务器提供服务.到目前为止一切正常.我想添加一些静态内容,这些内容也通过Grizzly提供,并从我的JAR文件中提供.所以我用CLStaticHttpHandler.当我访问静态资源时,例如我的index.html显式(例如http://localhost:8080/index.html),一切正常.但是,当我尝试访问root时http://localhost:8080,我得到一个404.代码如下所示:

ObjectMapper mapper = new ObjectMapper();
// some configuration stuff here

JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
provider.setMapper(mapper);

ResourceConfig resourceConfig = new ResourceConfig()
            .packages("my.restapi.package")
            .register(provider);

HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), resourceConfig);
HttpHandler httpHandler = new CLStaticHttpHandler(HttpServer.class.getClassLoader(), "/static/");
httpServer.getServerConfiguration().addHttpHandler(httpHandler, "/");
Run Code Online (Sandbox Code Playgroud)

据我所知,从调试开始,org.glassfish.grizzly.http.server.CLStaticHttpHandler.handle(String, Request, Response)永远不会被调用.任何提示,我如何使index.html可访问的默认页面?

java grizzly jersey-2.0

11
推荐指数
1
解决办法
6031
查看次数