【问题标题】:CORS Filter could not be found - jersey找不到 CORS 过滤器 - 运动衫
【发布时间】:2014-02-28 20:25:07
【问题描述】:

我已经为这个问题苦苦挣扎了很长时间。它突然开始了,我不知道如何修复它或我做错了什么。我一直在 stackoverflowing 很长一段时间,并没有得到任何地方。我尝试了herehere 和许多其他链接。 建立这个开发环境时,我并不在这里工作,以前从未真正使用过球衣。

谁能告诉我为什么会这样:

Fev 28, 2014 4:55:00 PM com.sun.jersey.core.spi.component.ProviderServices getInstances
SEVERE: The class <my_package>.jersey.ResponseCorsFilter could not be found. This class is ignored.
Fev 28, 2014 4:55:00 PM com.sun.jersey.server.impl.application.RootResourceUriRules <init>
SEVERE: The ResourceConfig instance does not contain any root resource classes.
Fev 28, 2014 4:55:00 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1331)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:168)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:774)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:770)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)
    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319)
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

这是我的 web.xml:

<servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
            <param-value>PACKAGE_PATH.ResponseCorsFilter</param-value>
        </init-param>       
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>PACKAGE_PATH.controller,
                         PACKAGE_PATH.supin.controller,
                         PACKAGE_PATH.rth.controller,
                         PACKAGE_PATH.rtp.pgto.controller,
                         PACKAGE_PATH.dir.controller.bgt,
                         PACKAGE_PATH.kpi.dir.controller.pa</param-value>
        </init-param>       
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

这是我的 ResponseCorsFilter.java:

public class ResponseCorsFilter implements ContainerResponseFilter {

@Override
public ContainerResponse filter(ContainerRequest req, ContainerResponse contResp) {
    ResponseBuilder resp = Response.fromResponse(contResp.getResponse());
    resp.header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");

    String reqHead = req.getHeaderValue("Access-Control-Request-Headers");

    if(null != reqHead && !reqHead.equals("")){
        resp.header("Access-Control-Allow-Headers", reqHead);
    }

    contResp.setResponse(resp.build());

    return contResp;
}

}

这是控制器之一。我使用http://localhost:8081/CSI/rest/chart/pa/01012013/01012014/getPA调用它

@Path("chart/pa")
public class PAController {

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{firstParam}/{secondParam}/getPA")
public Response GetPA(@PathParam("firstParam") String p1,
            @PathParam("firstParam") String p2) throws Exception {

...

我错过了什么吗?

【问题讨论】:

    标签: java jersey


    【解决方案1】:

    解决了,忘记贴答案了。

    我正在从另一个开发人员那里导入一个 WAR 文件。起初,它工作得很好。但是,突然之间,它停了下来。我意识到我错过了构建路径上的 Jersey 文件。由于它工作了一段时间,我从没想过它会开始这样。

    我使用的是 Eclipse,所以很简单:

    项目资源管理器 -> 右键单击​​项目 -> 构建路径 -> 配置构建路径

    然后:

    添加外部 JAR

    就这么简单。

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 2014-08-14
      • 2013-04-29
      • 2019-01-12
      • 2015-03-28
      • 1970-01-01
      • 2021-07-13
      • 2013-06-20
      • 2016-08-25
      相关资源
      最近更新 更多