2015-06-12 201 views
0

我想使用JAVA 8(v45)和tomcat 8(v23)制作一个简单的基于resteasy的API,但是我没有看到我的通话导致任何流量或日志活动。无法使Resteasy与Tomcat 8和Java 8一起工作

我的web.xml文件看起来像这样

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app 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_3_0.xsd" 
    version="3.0"> 

    <display-name>Test</display-name> 

    <description>Test</description> 

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

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

    <!-- Auto scan REST service --> 
    <context-param> 
     <param-name>resteasy.scan</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <!-- this should be the same URL pattern as the servlet-mapping property --> 

    <context-param> 
     <param-name>resteasy.servlet.mapping.prefix</param-name> 
     <param-value>/restfulservices</param-value> 
    </context-param> 

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

    <resource-ref> 
     <description>Oracle Datasource example</description> 
     <res-ref-name>jdbc/cboxDs</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

    <!-- Environment entry examples --> 
    <env-entry> 
     <env-entry-name>test</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>dev</env-entry-value> 
    </env-entry> 
    </web-app> 

和我的服务类看起来是这样的:

package test.request.service; 

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

import org.apache.log4j.Logger; 

@Path("/dihService") 
public class testService { 

    private static final Logger LOGGER = Logger.getLogger(testService.class); 

    @GET 
    @Path("/hello") 
    public Response getResponseMessage() { 

     LOGGER.info(" Entered and param is :"); 
     return Response.status(200).entity(" Entered. Hello world").build(); 
    } 
} 

我部署后,当我打以下网址:http://localhost:10120/resteasy/restfulservices/dihService/hello

我期待日志中的某些活动,但我没有看到任何东西。我已经验证我的服务器正在端口10120上运行,并且我的日志正常流动。有任何想法吗??

回答

0

你的servlet配置映射到这里提到与/ restfulservices开始网址:

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

但您实际的Web服务类不使用URL部分

@Path("/dihService") 
public class testService { 

所以不会被发现。您需要将restfulservices添加到您在此处提到的类映射路径中:

@Path("/restfulservices /dihService") 
public class testService { 
+0

谢谢Juned。我尝试了你的建议,但我仍然没有看到我的日志中有任何内容,并且我仍然为同一个URL获得404错误。 – launchpad123

0

我有类似的问题。我发现在tomcat中你总是有一个额外的路径(目前我不知道如何改变它)。检查tomcat管理器应用程序http://localhost:8080/manager/html/list,你会发现你的部署应用程序所需的路径。然后,您应该能够使用

http://localhost:8080/somepath/restfulservices/dihService/

当我使用标注的相同的结构像你这样做从Juned答案是不正确的方式。

Registers Steffen

+0

通常somepath是你的项目/战争的名称。 – steffakasid

+0

它看起来像改变这种行为的唯一可能性是将war文件重命名为所需的路径名称。如果你只是想让路径的第一部分重新变得简单,那么你的war文件需要重新命名为resteasy.war。 – steffakasid