我正在尝试使用预配置的资源实例在预配置的端口/url上启动Jersey。我不太明白如何正确地做这件事。
下面是一段代码。帮帮我,请填空:
@Component
@PerRequest
@Path("/svc")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public class MyService
{
// This piece is known
}
public class JSONMessageBodyWriter implements MessageBodyWriter<Object>
{
// This piece is known
}
public class XMLMessageBodyWriter implements MessageBodyWriter<Object>
{
// This piece is known
}
// This is where I need help
MyService service = new MyService();
...
HttpHandler handler = ???
...
HttpServer server = ???
server.createContext("/services", handler);
...
server.start();在上面的代码片段中,我试图通过http://localhost:8080/services/svc url公开MyService。如果要插入JSONMessageBodyWriter和XMLMessageBodyWriter -服务将相应地在XML和JSON中工作。
如果你知道如何在Jetty或Grizzly上做到这一点,也让我知道。Spring能帮上忙吗?
发布于 2009-06-12 02:13:37
Jersey本身提供了一整套examples,特别是最简单的helloworld示例,展示了如何在端口上启动服务器,以便在JUnits中运行或测试。如果您查看该示例,您将获得有关如何设置和启动服务器的示例。
现在,在将MessageBodyReaders和MessageBodyWriters配置为jersey应用程序的一部分时,您会发现这是JAX-RS规范本身( jersey实现的)所涵盖的。首先,您的阅读器和编写器需要@Provider注释。此外,阅读器应该获得@Consumes注解,编写器应该获得@Produces注解,这样您就可以分别指定它们使用和产生的mime类型。
下一步是激活它们。上面的helloworld示例不会显示这一点,因为它没有使用自定义的读取器或写入器(另一个示例可能是,我没有查看)。因此,您将编写Application的子类,在其中指定您的资源类和读取器/写入器类,而不是提供用于查找资源的包(正如它们所做的那样;当您看到helloworld示例时,您将知道我所说的是什么)。对于读取器和写入器,您可以选择指定一个类(从getClasses返回),或者自己提供一个已经创建的实例(从getSingletons返回)。
最后,指定Application子类的名称作为初始化参数"javax.ws.rs.Application"的值。启动服务器时,可以将init-params传递给GrizzlyWebContainerFactory.create (同样,您将看到示例中使用了该参数)。
希望这能有所帮助。
https://stackoverflow.com/questions/908495
复制相似问题