Jboss 5, Jersey 2.4, сжатый файл .war не работает

Я разрабатываю некоторые веб-сервисы RESTful, используя следующие технологии.

* Java 1.7
* Jersey 2.4.1
* spring 3.2.1
* Jboss-5.1.0.GA

До сих пор я использовал eclipse для создания файла войны, как в разобранном, так и в сжатом виде. Я скопировал файлы по одному в {jboss-home}/server/web/deploy и запустил сервер с помощью командной строки, запустив run.bat -c web. В обоих случаях сервер запускается без ошибок, а файлы журналов идентичны. (временные метки исключены)

Когда я развертываю развернутый военный файл, а затем перехожу по URL-адресу http://mydomain.com:8080/{app}/rest/application.wadl, трикотаж правильно идентифицирует аннотированные ресурсы, и я могу использовать их, как ожидалось.

майка с комментариями

@Path("/v1/ping")
@Service("pingV1")
public class PingV1 extends BaseResource {

    @Autowired
    private PingBusiness pingBusiness; 

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public PingVO getPing(
            @Context UriInfo uriInfo, 
            @Context HttpServletRequest httpServletRequest){
        ...
        PingVO pingVO = pingBusiness.doGet();
        ...
        return pingVO;
    }

}

application.wadl (динамически сгенерированный)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
    <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.4.1 2013-11-08 12:08:47"/>
    <grammars>
        <include href="application.wadl/xsd0.xsd">
            <doc xml:lang="en" title="Generated"/>
        </include>
    </grammars>
    <resources base="http://mydomain.com:8080/{app}/rest/">
        <resource path="/v1/ping">...</resource>
        <resource path="/">...</resource>
        <resource path="application.wadl">...</resource>
    </resources>
</application>

Однако, когда я развертываю сжатый файл .war и перехожу к тому же URL-адресу http://mydomain.com:8080/{app}/rest/application.wadl, майка не находит аннотированный ресурс, и когда я нажимаю ожидаемые URL-адреса, jboss возвращает 404 - NOT FOUND.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
    <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.4.1 2013-11-08 12:08:47"/>
    <grammars/>
    <resources base="http://mydomain.com:8080/{app}/rest/">
        <resource path="application.wadl">...</resource>
    </resources>
</application>

Наконец, я использовал WinRAR для извлечения содержимого сжатого файла войны в папку, а затем использовал Beyond Compare для сравнения папок исходной развернутой войны с контекстами, которые были только что извлечены, и они были ИДЕНТИЧНЫМИ.

Это заставляет меня поверить, что есть что-то уникальное в том, как jboss развертывает разнесенные войны по сравнению со сжатыми файлами войны, но я не понимаю, что это может быть и почему он ведет себя таким образом. Может ли кто-нибудь помочь или указать мне в новом направлении?

Хотя простой ответ может быть хорошо, просто разверните развернутый файл войны, я хотел бы понять, почему это происходит, и продолжать использовать мой существующий файл build.xml, который создает сжатый файл .war.


person user3067131    schedule 04.12.2013    source источник


Ответы (1)


Вы можете попробовать это:

public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(HelloWorldResource.class);
        return s;
    }
}

или другие примеры из документации Джерси, если вы хотите использовать отражение для получения ресурсов. .

У вас может быть состояние, при котором распаковка войны мешает процессу автосканирования майки, и это должно исправить это.

person titania424    schedule 04.12.2013