JBoss AS7到WildFly 9迁移后无法访问我的JAX-RS资源:javax.ws.RS.NotFoundException
从JBoss AS 7.1.1-Final升级到Wildfly 9.0.1-Final后,我在尝试访问servlet时遇到了这个异常。实际上,我们正在使用Resteasy for web services和一个servlet来处理GWT网页,JBoss AS 7.1.1-Final一切都很好,但是升级后没有任何效果,下面您将看到我的JBoss AS7到WildFly 9迁移后无法访问我的JAX-RS资源:javax.ws.RS.NotFoundException,jboss,migration,jax-rs,wildfly,resteasy,Jboss,Migration,Jax Rs,Wildfly,Resteasy,从JBoss AS 7.1.1-Final升级到Wildfly 9.0.1-Final后,我在尝试访问servlet时遇到了这个异常。实际上,我们正在使用Resteasy for web services和一个servlet来处理GWT网页,JBoss AS 7.1.1-Final一切都很好,但是升级后没有任何效果,下面您将看到我的web.xml文件和JBoss web.xml的片段 web.xml <servlet> <servlet-name>admin<
web.xml
文件和JBoss web.xml
的片段
web.xml
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>com.afp.iris.sr.sco.scom.servlet.ScomIHMServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<init-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<jboss-web>
<context-root>/components</context-root>
</jboss-web>
#编辑#
这就是我实现rest服务的方式
@Stateless(name = "myServices")
@Path("/")
public class myServices {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_XML)
public Response myFuntion(@Context final HttpServletRequest request) {
return secondFunction(request, null);
}
}
resteasy资源也是如此,这一问题的根源是什么,欢迎所有建议 您的web.xml文件缺少WildFly的RESTeasy引导类
另外,将resteasy.scan
属性从servlet
作为init-param
扫描,并将其作为context-param
放置
以下是需要进行的更改:
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
您是如何实现REST服务的?你能用代码更新你的问题吗?@aribeiro,我编辑了我的帖子,使其包含rest实现。仅供参考-检查。谢谢@OndraŽIžka,我不知道有这样的工具。谢谢你的回答@aribeiro,就我而言,如果resteasy servlet映射的url模式不是/*,我认为resteasy.servlet.mapping.prefix是不必要的,并且当我添加扫描选项作为上下文参数时,我得到了一个例外,对于侦听器,我已经在我的web.xml中有了它,但是为了简洁起见,我不想发布整个文件。你是对的,如果url模式为
/*
,则不需要resteasy.servlet.mapping.prefix
。你有什么例外?
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
public class Main {
public static void main(String[] args) throws Exception {
try {
HttpClient client = HttpClientBuilder.create().build();
HttpPost request = new HttpPost("http://localhost:8080/components");
request.setHeader("Accept", MediaType.APPLICATION_XML);
request.setHeader("Content-type", MediaType.MULTIPART_FORM_DATA);
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}