2014-03-19 41 views
6

首先,我對這個環境很陌生。我以前開發過Java,但不適用於應用程序服務器。從未這樣做過,我以前從未使用過JBoss或WildFly。簡單的REST API和WildFly 8

我已經能夠設置並運行WildFly服務器,並在127.0.0.1:9990上訪問它。當我部署我的.war文件時,服務器不響應,我無法訪問URL。

WildFly服務器確實聲明我的部署成功並處於活動狀態,然後嘗試訪問:127.0.0.1:8080/RECAPP-API/rest/message/test,並且收到404(頁面未找到錯誤)。

我使用Maven,所以首先,我pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test.recapp.rest</groupId> 
    <artifactId>RECAPP-API</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.6.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jackson-provider</artifactId> 
     <version>3.0.6.Final</version> 
    </dependency> 
    </dependencies> 
</project> 

JSONService.java

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

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

    @GET 
    @Path("/{param}") 
    @Produces("application/json") 
    public Response printMessage(@PathParam("param") String msg) { 
     String result = "Restful example: " + msg; 
     return Response.status(200).entity(result).build(); 
    } 

} 

最後,我web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>RECAPP-API</display-name> 

    <context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <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> 

感謝您的幫助。

+2

第一個REST的應用程序可能會在一開始有點迷惑了你的休息端點。看起來你錯過了JaxRsActivator。你需要這個爲應用程序創建一個有效的上下文。 '@ApplicationPath(「/ rest」) public class JaxRsActivator extends Application { /* class * class */ }'也可以看看TicketMonster教程:http://www.jboss.org/ jdf/examples/ticket-monster/tutorial/Introduction/ – Goot

+0

太糟糕了,教程並沒有提到你想要解釋的內容;它取決於代碼生成,因此並沒有真正解釋基礎。 – Gimby

+0

@Goot - 爲什麼WildFly會讓你做到這一點?我知道舊版本的JBoss,你只需要配置web.xml。在我的機器上沒有工作,所以我按照你所說的去做並且工作。 –

回答

1

你的例子看起來是正確的。

它有助於重新啓動您的jboss服務器並重新部署您的WAR以排除可能的緩存。

另外,您的web.xml可以縮短爲使用javax.ws.rs.core.Application,如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     id="WebApp_ID" version="3.0"> 
    <display-name>RECAPP-API</display-name> 

    <servlet-mapping> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
3

Wildfly Quickstart他們似乎使用JaxRsActivator類更喜歡下載...配置您的REST服務。

/** 
* A class extending {@link Application} and annotated with @ApplicationPath is the Java EE 6 "no XML" approach to activating 
* JAX-RS. 
* 
* <p> 
* Resources are served relative to the servlet path specified in the {@link ApplicationPath} annotation. 
* </p> 
*/ 
@ApplicationPath("/rest") 
public class JaxRsActivator extends Application { 
    /* class body intentionally left blank */ 
} 

作爲註釋狀態,這是一種非xml方法。

5

快速啓動的最佳方法是使用此依賴關係。

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

,並添加擴展應用程序類

@ApplicationPath("rest") 
public class ConfigApp extends Application { 
    public ConfigApp(){ 
    } 
} 

這就是它的類。沒有web.xml的變化(web.xml不是必需的)。

和訪問使用host:port/<warname>/rest/<endpoint path>