2012-10-18 3 views
2

Моя конечная цель проста. Я создаю веб-сайт с тремя компонентами: мобильным интерфейсом, веб-интерфейсом администратора и веб-интерфейсом пользователя. Я планирую поместить каждый из этих модулей в отдельные файлы 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-веб .xml:

<?xml version="1.0"?> 
<jboss-web> 
    <context-root>/mobile</context-root> 
</jboss-web> 

Файл Accounts.java был основан на примере Library.java от https://docs.jboss.org/author/display/AS71/Java+API+for+RESTful+Web+Services+(JAX-RS) Я внес некоторые изменения, добавил подклассу 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-сервера: 8080/мобильные/счета/список я получаю:

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. 

Однако что-то работает, потому что указывает на Broswer на JBoss-сервера: 8080/мобильный/успешно возвращает index.html файл также включен в файл WAR.

Это, вероятно, просто простая ошибка конфигурации с моей стороны, но я не могу ее решить для жизни. Огромное спасибо всем, кто приложил все усилия, чтобы прочитать эту проблему и еще больше поблагодарить за публикацию любых ваших идей.

Стив

ответ

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

    ... 
} 
+0

Многие благодарят Yous @ Kaxaag. Мне также пришлось сменить Consumes & Produces на «application/json», поскольку не было автора тела для «application/xml». Это то, что я могу исправить позже, или использовать json в качестве протокола передачи данных. – Dobbo

+0

Кажется, они добавляют некоторую поддержку json для ресурса non jax-b. Если вы хотите автоматическое xml-маршалинг, возвращаемый объект должен быть классом jax-b annotate (http://docs.jboss.org/resteasy/docs/2.3.4.Final/userguide/html/Content_Marshalling_Providers.html) – Kazaag

Смежные вопросы