Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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 扩展ContainerRequestFilter/ContainerResponseFilter在JBOSS EAP 6.3中引发类未找到异常_Java_Web Services_Jboss_Jax Rs_Resteasy - Fatal编程技术网

Java 扩展ContainerRequestFilter/ContainerResponseFilter在JBOSS EAP 6.3中引发类未找到异常

Java 扩展ContainerRequestFilter/ContainerResponseFilter在JBOSS EAP 6.3中引发类未找到异常,java,web-services,jboss,jax-rs,resteasy,Java,Web Services,Jboss,Jax Rs,Resteasy,我正在用maven创建一个RESTAPI身份验证服务器 mvn archetype:generate -DarchetypeGroupId=org.jboss.aerogear.archetypes -DarchetypeArtifactId=jboss-html5-mobile-archetype -DarchetypeVersion=7.1.3.CR6 -Denterprise=true 这是我的请求过滤器: import javax.ws.rs.container.ContainerRe

我正在用maven创建一个RESTAPI身份验证服务器

mvn archetype:generate -DarchetypeGroupId=org.jboss.aerogear.archetypes -DarchetypeArtifactId=jboss-html5-mobile-archetype -DarchetypeVersion=7.1.3.CR6 -Denterprise=true
这是我的请求过滤器:

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;

import duy.hw4.rest.HTTPHeaderName;
import duy.hw4.service.UserAuthenticator;

@Provider
@PreMatching
public class RESTRequestFilter implements ContainerRequestFilter {

    private final static Logger log = Logger.getLogger(RESTRequestFilter.class.getName());

    @Override
    public void filter(ContainerRequestContext requestCtx) throws IOException {

        String path = requestCtx.getUriInfo().getPath();
        log.info("Filtering request path: " + path);

        // IMPORTANT!!! First, Acknowledge any pre-flight test from browsers for this case before validating the headers (CORS stuff)
        if (requestCtx.getRequest().getMethod().equals("OPTIONS")) {
            requestCtx.abortWith(Response.status(Response.Status.OK).build());

            return;
        }

        // Then check is the service key exists and is valid.
        UserAuthenticator authenticator = UserAuthenticator.getInstance();
        String serviceKey = requestCtx.getHeaderString(HTTPHeaderName.SERVICE_KEY);

        if (!authenticator.isServiceKeyValid(serviceKey)) {
            // Kick anyone without a valid service key
            requestCtx.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());

            return;
        }

        // For any other methods besides login, the authToken must be verified
        if (!path.startsWith("/moneymanager/login/")) {
            String authToken = requestCtx.getHeaderString(HTTPHeaderName.AUTH_TOKEN);

            // if it isn't valid, just kick them out.
            if (!authenticator.isAuthTokenValid(serviceKey, authToken)) {
                requestCtx.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
            }
        }
    }
}
当我启动服务器并调用web服务时,出现以下错误:

java.lang.RuntimeException: Unable to find a public constructor for class org.jboss.resteasy.core.AsynchronousDispatcher
搜索之后,我将提供的范围添加到resteasy jaxrs依赖项中

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>3.0.11.Final</version>
        <scope>provided</scope>
    </dependency>

谁能帮帮我

我不确定在JBoss中禁用JAX-RS1.x模块的过程,但这可能是使JAX-RS2.0正常工作所需要做的。通过一些搜索,您可能会找到解决方案。另外,不应该提供范围,因为它不是由服务器提供的。服务器有一个2.3.x版本(即JAX-RS1.x),我可能会搜索“在JBoss中将Resteasy升级到3.x”,而不是“禁用”,尽管它确实包含禁用。但是一个完整的升级示例可能会在整个过程中提供一个更具描述性的解决方案。或者,如果这是一个选项,请使用Wildfly,它已经使用了Resteasy 3.x。服务器运行没有错误,谢谢,但如果我删除提供的范围,我将得到上述异常
Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/container/ContainerRequestFilter
    at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_45]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_45]
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.3.Final-redhat-1]
    ... 20 more
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.container.ContainerRequestFilter from [Module "deployment.moneymanager.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final-redhat-1]
    ... 24 more