![](/img/trans.png)
[英]Could not find path for REST resource (Wildfly 22.0.0 deployment)
[英]WildFly Could not find resource for full path (no XML, using commandline deployment)
我已經在SO上對此進行了一段時間的閱讀,但是我無法弄清楚這是WildFly部署問題還是RESTEASY問題。 任何幫助,將不勝感激。
當我嘗試訪問時: http://localhost:8080/HelloWorld-1.0-SNAPSHOT/json/hi
錯誤消息:
12:27:04,159錯誤[org.jboss.resteasy.resteasy_jaxrs.i18n](默認任務1)RESTEASY002010:執行失敗:javax.ws.rs.NotFoundException:RESTEASY003210:找不到完整路徑的資源: http:/ /本地主機:8080 / HelloWorld-1.0-SNAPSHOT / json / hi
JAXActivator.java
package com.sentiment360.helloworld;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class JAXActivator extends Application {
}
web.xml
<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>hello</display-name>
</web-app>
index.html
<!DOCTYPE html>
<html>
<head>
<title>Start Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Hello World WOO!</h1>
</body>
</html>
HelloWorld.java
package com.sentiment360.helloworld;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
public class HelloWorld {
//@Inject
//HelloService helloService;
@GET
@Path("/json/{p}")
@Produces({ "application/json" })
public String getHelloWorldJSON(@PathParam("p") String param) {
return "{\"result\":\"" + param + "\"}";
//return "{\"result\":\"" + helloService.createHelloMessage(param) + "\"}";
}
@GET
@Path("/xml/{p}")
@Produces({ "application/xml" })
public String getHelloWorldXML(@PathParam("p") String param) {
return "<xml><result>" +param+ "</result></xml>";
//return "<xml><result>" + helloService.createHelloMessage(param) + "</result></xml>";
}
}
WildFly服務器命令
1號航站樓:
/etc/opt/wildfly-10.0.0.Final/bin/standalone.sh
2號航站樓:
/etc/opt/wildfly-10.0.0.Final/bin/jboss-cli.sh --connect --command="deploy --force /home/king/NetBeansProjects/HelloWorld/target/HelloWorld-1.0-SNAPSHOT.war"
這不是很明顯,但是我從未能夠在同一路徑上以JAX-RS內容包含靜態內容。 更改您的JAXActivator.java
文件,使其具有類似/rest
的路徑或您想要的任何路徑。 最終,當請求到達時,Wildfly需要確定如何路由它。 現在,您的服務從/
開始,但靜態內容也從/
開始。 在服務和靜態之間划分URL空間,您將不會遇到此問題。
編輯:
很奇怪-我直接復制了您的代碼,並且也在Ubuntu下運行。 我有一個完全新鮮的Wildfly 10.1.0.Final。 如果按原樣使用您的代碼,我也會得到404。但是,如果在類上放置@Path注釋,則:
package com.sentiment360.helloworld;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@Path("/hello")
public class HelloWorld {
@GET
@Path("/json/{p}")
@Produces({"application/json"})
public String getHelloWorldJSON(@PathParam("p") String param) {
return "{\"result\":\"" + param + "\"}";
}
@GET
@Path("/xml/{p}")
@Produces({"application/xml"})
public String getHelloWorldXML(@PathParam("p") String param) {
return "<xml><result>" + param + "</result></xml>";
}
}
並將該路徑包含在URL中可以正常工作。 我承認我在服務上總是有額外的類級別Path來幫助確定它們的范圍,但我認為這不是必需的。 我必須學習更多。
編輯2:
好吧,我學到了一些東西-需要“根資源”聲明(也就是類級別的@Path)。 這就是為什么我的IDE告訴我該類在我沒有的時候沒有被使用的原因。 我一直都是這樣做的,但從不知道它是必需的。 在類級別的@ApplicationPath和@Path之間,它們均按預期工作。
問題:
web.xml
配置servlet。 有兩種方法來配置REST服務:
Application
類中注冊。 @Path
注釋。 您參考本教程
找不到完整路徑的資源: http:// localhost:8080 / HelloWorld-1.0-SNAPSHOT / json / hi
我認為Web容器將此URL視為靜態頁面而不是servlet。 因此,您相應的REST路徑(/ json / hi)將不會收到請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.