Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到Jersey资源_Java_Tomcat_Jersey - Fatal编程技术网

Java 未找到Jersey资源

Java 未找到Jersey资源,java,tomcat,jersey,Java,Tomcat,Jersey,第一次尝试穿上这件球衣,我很快就遇到了一个我无法解决的问题。我在同一个包中有两个资源,遵循相同的蓝图,但在运行时,Jersey只找到其中一个。我已经检查过这两个类是否存在于war中包含的jar的同一文件夹中 更新:如果我删除DashboardResource上的@Path注释(有效地删除了该资源),那么DetailsResource就会突然活跃起来。似乎仪表板以某种方式隐藏了详细信息。 急需一些解决这个问题的办法 事实和代码 版本:Jersey 2.4.1、Apache Tomcat 7.0.4

第一次尝试穿上这件球衣,我很快就遇到了一个我无法解决的问题。我在同一个包中有两个资源,遵循相同的蓝图,但在运行时,Jersey只找到其中一个。我已经检查过这两个类是否存在于war中包含的jar的同一文件夹中

更新:如果我删除DashboardResource上的@Path注释(有效地删除了该资源),那么DetailsResource就会突然活跃起来。似乎仪表板以某种方式隐藏了详细信息。

急需一些解决这个问题的办法

事实和代码

版本:Jersey 2.4.1、Apache Tomcat 7.0.47

这个很好用:

package jerseytest;

import javax.ws.rs.*;

@Path("/dashboard")
public class DashboardResource {
  @GET
  @Produces("text/plain")
  public String getDashboard() { return "Dashboard"; }
}
这个给了我一个HTTP 404:

package jerseytest;

import javax.ws.rs.*;

@Path("/details")
public class DetailsResource {
  @GET
  @Produces("text/plain")
  public String getDetails() { return "Details"; }
}
带有Jersey跟踪的HTTP标头

http://localhost:8080/myservlet/dashboard

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Jersey-Tracing-000: START       [ ---- /  ---- ms |  ---- %] baseUri=[http://localhost:8080/myservlet/] requestUri=[http://localhost:8080/myservlet/dashboard] method=[GET] authScheme=[n/a] accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8] accept-encoding=[gzip,deflate,sdch] accept-charset=n/a accept-language=[en-US,en;q=0.8,da;q=0.6,nb;q=0.4,sv;q=0.2] content-type=n/a content-length=n/a
X-Jersey-Tracing-001: PRE-MATCH   [ 0,01 /  2,45 ms |  0,10 %] PreMatchRequest summary: 0 filters
X-Jersey-Tracing-002: MATCH       [ ---- /  2,90 ms |  ---- %] Matching path [/dashboard]
X-Jersey-Tracing-003: MATCH       [ ---- /  3,02 ms |  ---- %] Pattern [/dashboard(/)?] IS selected
X-Jersey-Tracing-004: MATCH       [ ---- /  3,38 ms |  ---- %] Matched resource: template=[/dashboard] regexp=[/dashboard(/.*)?] matches=[/dashboard] from=[/dashboard]
X-Jersey-Tracing-005: MATCH       [ ---- /  4,40 ms |  ---- %] Matched method  : public java.lang.String jerseytest.DashboardResource.getDashboard()
X-Jersey-Tracing-006: MATCH       [ ---- /  4,95 ms |  ---- %] Resource instance: [jerseytest.DashboardResource @5814b2a3]
X-Jersey-Tracing-007: MATCH       [ 2,63 /  5,17 ms | 30,68 %] RequestMatching summary
X-Jersey-Tracing-008: REQ-FILTER  [ 0,01 /  5,32 ms |  0,09 %] Request summary: 0 filters
X-Jersey-Tracing-009: INVOKE      [ 0,02 /  6,13 ms |  0,23 %] Resource [jerseytest.DashboardResource @5814b2a3] method=[public java.lang.String jerseytest.DashboardResource.getDashboard()]
X-Jersey-Tracing-010: INVOKE      [ ---- /  6,31 ms |  ---- %] Response: [org.glassfish.jersey.message.internal.OutboundJaxrsResponse @36dc1882 <200/SUCCESSFUL|OK|java.lang.String @66702fb1>]
X-Jersey-Tracing-011: RESP-FILTER [ 0,01 /  6,81 ms |  0,09 %] Response summary: 0 filters
X-Jersey-Tracing-012: WI          [ 0,01 /  7,12 ms |  0,08 %] [org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor @5e62c4bb #10] BEFORE context.proceed()
X-Jersey-Tracing-013: WI          [ 0,01 /  7,23 ms |  0,17 %] [org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor @26620166 #3000] BEFORE context.proceed()
X-Jersey-Tracing-014: MBW         [ ---- /  7,36 ms |  ---- %] Find MBW for type=[java.lang.String] genericType=[java.lang.String] mediaType=[[javax.ws.rs.core.MediaType @6c49e339]] annotations=[@javax.ws.rs.GET(), @javax.ws.rs.Produces(value=[text/plain])]
X-Jersey-Tracing-015: MBW         [ ---- /  7,60 ms |  ---- %] [org.glassfish.jersey.message.internal.StringMessageProvider @74e48049] IS writeable
X-Jersey-Tracing-016: MBW         [ 0,14 /  7,84 ms |  1,61 %] WriteTo by [org.glassfish.jersey.message.internal.StringMessageProvider @74e48049]
X-Jersey-Tracing-017: WI          [ 0,00 /  7,94 ms |  0,04 %] [org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor @26620166 #3000] AFTER context.proceed()
X-Jersey-Tracing-018: WI          [ 0,01 /  8,39 ms |  0,08 %] [org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor @5e62c4bb #10] AFTER context.proceed()
X-Jersey-Tracing-019: WI          [ 1,38 /  8,48 ms | 16,11 %] WriteTo summary: 2 interceptors
X-Jersey-Tracing-020: FINISHED    [ ---- /  8,56 ms |  ---- %] Response status: 200/SUCCESSFUL|OK
Content-Type: text/plain
Content-Length: 10
Date: Thu, 19 Dec 2013 16:18:03 GMT
web.xml:

<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">

    <display-name>My Web App</display-name>

    <servlet>
        <display-name>My Servlet</display-name>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>jerseytest</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.tracing</param-name>
            <param-value>ALL</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

很可能
Jersey
容器找不到
DetailsResource
,打开
war
并在
classes
lib
\jars下检查是否实际部署了
detailsrource

更新:

在您的
Jersey
配置中,只注册了一个资源(我假设它是根资源)。这也解释了为什么在移除
仪表板后
详细信息
起作用

我认为您可以尝试添加第一个
根资源
,它可以具有
@Path(“/”
@Path(“v1”)
(其中
v1
对应于版本号,举个例子)。现在,此根资源将链接所有可用资源:

@Component
@Path("/")
public class BaseResource
{
    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DashboardResource dashboardResource;

    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DetailsResource detailsResource;

    @Path("dashboard")
    public DashboardResource getDashboardResource()
    {
        return dashboardResource;
    }

    @Path("details")
    public DetailsResource getDetailsResource()
    {
        return detailsResource;
    }
}

请记住从详细信息和dashboad资源类中删除
@Path
注释。

很可能是
Jersey
容器找不到
详细信息资源,打开
war
并在
classes
lib
\jars下检查是否实际部署了
DetailsResource

更新:

在您的
Jersey
配置中,只注册了一个资源(我假设它是根资源)。这也解释了为什么在移除
仪表板后
详细信息
起作用

我认为您可以尝试添加第一个
根资源
,它可以具有
@Path(“/”
@Path(“v1”)
(其中
v1
对应于版本号,举个例子)。现在,此根资源将链接所有可用资源:

@Component
@Path("/")
public class BaseResource
{
    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DashboardResource dashboardResource;

    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DetailsResource detailsResource;

    @Path("dashboard")
    public DashboardResource getDashboardResource()
    {
        return dashboardResource;
    }

    @Path("details")
    public DetailsResource getDetailsResource()
    {
        return detailsResource;
    }
}

请记住从详细信息和dashboad资源类中删除
@Path
注释。

很可能是
Jersey
容器找不到
详细信息资源,打开
war
并在
classes
lib
\jars下检查是否实际部署了
DetailsResource

更新:

在您的
Jersey
配置中,只注册了一个资源(我假设它是根资源)。这也解释了为什么在移除
仪表板后
详细信息
起作用

我认为您可以尝试添加第一个
根资源
,它可以具有
@Path(“/”
@Path(“v1”)
(其中
v1
对应于版本号,举个例子)。现在,此根资源将链接所有可用资源:

@Component
@Path("/")
public class BaseResource
{
    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DashboardResource dashboardResource;

    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DetailsResource detailsResource;

    @Path("dashboard")
    public DashboardResource getDashboardResource()
    {
        return dashboardResource;
    }

    @Path("details")
    public DetailsResource getDetailsResource()
    {
        return detailsResource;
    }
}

请记住从详细信息和dashboad资源类中删除
@Path
注释。

很可能是
Jersey
容器找不到
详细信息资源,打开
war
并在
classes
lib
\jars下检查是否实际部署了
DetailsResource

更新:

在您的
Jersey
配置中,只注册了一个资源(我假设它是根资源)。这也解释了为什么在移除
仪表板后
详细信息
起作用

我认为您可以尝试添加第一个
根资源
,它可以具有
@Path(“/”
@Path(“v1”)
(其中
v1
对应于版本号,举个例子)。现在,此根资源将链接所有可用资源:

@Component
@Path("/")
public class BaseResource
{
    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DashboardResource dashboardResource;

    @Autowired //if using spring and interfaces for resource, else set it via setter/constructor
    private DetailsResource detailsResource;

    @Path("dashboard")
    public DashboardResource getDashboardResource()
    {
        return dashboardResource;
    }

    @Path("details")
    public DetailsResource getDetailsResource()
    {
        return detailsResource;
    }
}


请记住从详细信息和dashboad资源类中删除
@Path
注释。

经过大量挖掘,我发现问题在于我的资源类在战争中的一个罐子中。这在Jersey 2.4.1中出现了,它在2.5中得到了修复。

经过大量的挖掘,我发现问题在于我的资源类在战争中的一个罐子中。这在Jersey 2.4.1中出现了,它在2.5中得到了修复。

经过大量的挖掘,我发现问题在于我的资源类在战争中的一个罐子中。这在Jersey 2.4.1中出现了,它在2.5中得到了修复。

经过大量的挖掘,我发现问题在于我的资源类在战争中的一个罐子中。这在泽西岛2.4.1版中出现,在2.5版中修复。

如前所述,他们都在战争中。我会检查他们是否都部署了,但我以前从未遇到过这种部分成功的部署。你能检查一下服务器启动日志吗,
Jersey
通常在启动时打印到资源的路径映射。现在,启动日志中没有来自Jersey的日志,只有来自Tomcat的war部署日志。我将检查如何让Jersey记录资源映射。我更新了web.xml以使用Servlet 3.0规范,然后所有根资源都记录在部署中。找到DetailsResource,但在运行时仍不匹配。(OP更新)非常感谢您的帮助!尽管问题最终被证明是一个新泽西虫(见自己的答案)…他们都在战争中,如前所述。我会检查他们是否都部署好了,但我从来没有遇到过这种情况