我的最终目标很简单。我正在构建一个包含三个组件的网站:移动界面,管理Web界面和Web用户界面。我计划将每个模块放在单独的WAR文件中,并与EJB模块和模块一起放在一起。可能是一个公共库模块,将它们全部捆绑到一个EAR中,以便在JBoss AS 7.1上进行部署。
但首先,我可以部署一个非常简单的WAR文件并使其工作 - 不!
我的war文件具有以下结构:
项目mobile.war:
META-INF/MANIFEST.MF
WEB-INF/jboss-web.xml
WEB-INF/classes/org/dobbo/project/mobile/Accounts.class
index.html
manifest.mf文件如下:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.0
Created-By: 1.6.0_18-b18 (Sun Microsystems Inc.)
Built-By: steve
jboss-web.xml文件的内容是:
<?xml version="1.0"?>
<jboss-web>
<context-root>/mobile</context-root>
</jboss-web>
Accounts.java文件基于https://docs.jboss.org/author/display/AS71/Java+API+for+RESTful+Web+Services+(JAX-RS)中的Library.java示例 我做了一些更改,添加了Application子类和AppicationPath注释,因为这让我更进一步使部署工作。
package org.dobbo.<project>.mobile;
import javax.ws.rs.*;
import javax.ws.rs.core.Application;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ApplicationPath("/accounts")
@Consumes({"application/xml"})
@Produces({"application/xml"})
public class Accounts
extends Application {
...
@GET
@Path("/list")
public Collection<UUID> getAccounts() {
Collection<UUID> list = uuids.values();
log.info("getAccounts: " + list);
return list;
}
...
}
到目前为止一切顺利。
当我部署时,我将以下内容记录到JBoss控制台(删除了时间戳和日志级别INFO):
[org.jboss.as.repository] (management-handler-thread - 12) JBAS014900: Content added at location /home/jboss/jboss-7.1.1/standalone/data/content/11/e8cdaea9dfa4e984ada3e22b0c890970f0ba75/content
[org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015877: Stopped deployment sokoban-mobile.war in 60ms
[org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "project-mobile.war"
[org.jboss.web] (MSC service thread 1-2) JBAS018210: Registering web context: /mobile
[org.jboss.as.server] (management-handler-thread - 12) JBAS018565: Replaced deployment "project-mobile.war" with deployment "project-mobile.war"
到目前为止一切似乎都很顺利。但当我将我的浏览器指向jboss-server:8080 / mobile / accounts / list时,我得到了一个:
HTTP Status 404 - Could not find resource for relative : /list of full path: http://jboss-server:8080/mobile/accounts/list
type Status report
message Could not find resource for relative : /list of full path: http://jboss-server:8080/mobile/accounts/list
description The requested resource (Could not find resource for relative : /list of full path: http://jboss-server:8080/mobile/accounts/list) is not available.
然而,有些东西正在运行,因为指向jboss-server:8080 / mobile /成功返回了WAR文件中包含的index.html文件。
我可能只是一个简单的配置错误,但我无法解决这个问题。非常感谢所有人在阅读这个问题时遇到的麻烦,更感谢您发布任何想法。
史蒂夫
答案 0 :(得分:1)
日志显示没有加载REST资源。
资源缺少@Path
注释。
您需要在Application
类上使用@ApplicationPath
注释(该类将为空)。
然后您需要将@Path
注释添加到您的资源类(Accounts
为您的案例)
所以你会:
@ApplicationPath("/")
public class AccountApp
extends Application {}
并且:
@Path("accounts")
@Consumes({"application/xml"})
@Produces({"application/xml"})
public class Accounts{
...
@GET
@Path("/list")
public Collection<UUID> getAccounts() {
Collection<UUID> list = uuids.values();
log.info("getAccounts: " + list);
return list;
}
...
}