2

我的最终目标很简单。我正在构建一个包含三个组件的网站:移动界面、管理 Web 界面和 Web 用户界面。我计划将这些模块中的每一个放入单独的 WAR 文件中,并与 EJB 模块和可能的公共库模块一起,将它们全部捆绑到 EAR 中,以便在 JBoss AS 7.1 上部署。

但首先,我可以部署一个非常简单的 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 控制台(时间戳和日志级别信息已删除):

[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 文件。

这可能只是我的一个简单的配置错误,但我无法终生解决。非常感谢所有不厌其烦地阅读此问题的人,更感谢您发布您的任何想法。

史蒂夫

4

1 回答 1

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;
    }

    ...
}
于 2012-10-18T16:51:54.250 回答