JBoss Resteasy初探

来源:互联网 发布:unity3d 显示3d模型 编辑:程序博客网 时间:2024/06/08 17:40

JBoss Resteasy初探

JBossWebJavaREST 
JBoss Resteasy是一个遵守JAX-RS 标准的REST的开源项目,下载地址在:
http://www.jboss.org/resteasy,下载后,将LIB包下的所有文件放好后,
先来写个HELLO WORLD,注意要用JDK 1。6

package com.liao;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/message")
public class MessageRestService {

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

String result = "Restful example : " + msg;

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

}

}

然后在WEB中,如下设置:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Restful Web Application</display-name>

<!-- Auto scan REST service -->
<!--  <context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>-->
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.liao.MessageRestService</param-value>
</context-param>
<!-- this need same with resteasy servlet url-pattern -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>

<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>

<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

</web-app>

这里,我们期望使用
http://localhost/ReseteasyHelloWorld/rest/message/hello
来访问,所以url-pattern里设置为/rest/*,并且注意
一定要有<param-name>resteasy.servlet.mapping.prefix</param-name>
,还要注意的事,如果用了

   <context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
   则其实会出错,说:
SEVERE: Exception sending context initialized event to listener instance of class
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
java.lang.RuntimeException: Unable to instantiate MessageBodyReader
at org.jboss.resteasy.spi.ResteasyDeployment.registerProvider(ResteasyDeployment.java:505)
at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:305)
at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:225)
//...
Caused by: java.lang.RuntimeException:
        Illegal to inject a message body into a singleton into public
org.codehaus.jackson.jaxrs.JacksonJsonProvider(
org.codehaus.jackson.map.ObjectMapper,org.codehaus.jackson.jaxrs.Annotations[])
... 20 more

  估计是现在的BUG,只能手工注册,比如:
   <context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.mkyong.rest.MessageRestService</param-value>
</context-param>
    即可
0 0