NoClassDefFoundError в веб-приложении с использованием двух EAR - PullRequest
0 голосов
/ 10 января 2011

Я застрял в проблеме на несколько дней, и я собираюсь сдаться.Нужна ваша помощь!:)

Вот в чем дело:

Я работаю над веб-приложением и пытаюсь создать мобильную версию (по крайней мере, веб-службы с использованием Джерси).

Итак, теперь это выглядит так:

  • Сервер
    • WebApp EAR
      • WebApp war
    • WebAppMobileEAR
      • WebAppMobile war

Я думаю, что это лучший способ сделать это (любой комментарий?).

Я сейчас использую Джерси, чтобы легко создавать свои веб-сервисы.

Мне удалось разделить веб-контексты, и я могу добраться до своих ресурсов, все хорошо.Теперь мне нужно получить пакеты WebApp из проекта WebAppMobile.Я включил ссылку в путь сборки (используя Eclipse), и она компилируется нормально.

Единственная проблема, с которой я столкнулся, это то, что я не могу создать экземпляр объекта, находящегося в войне WebApp, он дает мне NoClassDefFoundError:

Ошибка 500: java.lang.NoClassDefFoundError: my.package.my.class

Самое странное, что я действительно могу достичь некоторых статических локальных объектовпеременные, что означает, что мое приложение может их видеть ... По крайней мере, я думаю, что оно может ..

Я думаю, что это происходит из classpath Джерси, потому что оно делает свое собственное перенаправление для достижения моих ресурсов.Вот мой web.xml (из проекта WebAppMobile):

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>WebAppMobile</display-name>
    <servlet>
       <servlet-name>Jersey Web Application</servlet-name>
       <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.classpath</param-name>
            <param-value>my.webapp</param-value> (here's just a try)
        </init-param>
        <init-param> 
            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
            <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>my.webapp;my.webappmobile</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/resources/*</url-pattern>
     </servlet-mapping>
</web-app>

Есть подсказка?Возможно ли даже установить связь между этими двумя пакетами?

Большое спасибо!

1 Ответ

0 голосов
/ 10 января 2011

Я (временно?) Исправил это, создав JAR из моего проекта WebApp и включив его в свой проект WebAppMobile. Я тогда думаю, что нет никакого способа создать объекты из другой войны, но если кому-то удастся это сделать, мне было бы интересно узнать, как:)

...