簡體   English   中英

WildFly找不到完整路徑的資源(沒有XML,使用命令行部署)

[英]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之間,它們均按預期工作。

問題:

  • 看來您沒有注冊REST服務。
  • 沒有在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM