CXF: java.lang.ClassNotFoundException: org.apache.cxf.transport.servlet.CXFServlet

1

Я пытаюсь развернуть веб-службу отдыха в WAS 8.0

Приложение EAR успешно устанавливается.

Однако, как при публикации, так и при ударе службы из веб-браузера после публикации, я становлюсь ниже ошибки:

[3/13/14 13:42:20:652 IST] 00000024 servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper run SRVE8052E: Logging ClassNotFoundException
                             java.lang.ClassNotFoundException: class java.lang.ClassNotFoundException: org.apache.cxf.transport.servlet.CXFServlet
at java.beans.Beans.instantiate(Beans.java:190)
at java.beans.Beans.instantiate(Beans.java:75)
at com.ibm.ws.webcontainer.servlet.ServletWrapper$1.run(ServletWrapper.java:1471)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadServlet(ServletWrapper.java:1460)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.load(ServletWrapper.java:1358)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:982)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3751)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1690)

Тем не менее, кувшин, содержащий класс, а именно: cxf-rt-transports-http-2.7.4.jar присутствует внутри каталога lib WAR внутри установленного EAR.

В чем причина проблемы?

Как я могу это решить?

Обновление: Мой web.xml выглядит так:

<web-app>
<display-name>MyService</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <display-name>CXF Servlet</display-name>
    <servlet-class>
        org.apache.cxf.transport.servlet.CXFServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

</web-app>
Теги:
websphere-8
cxf

1 ответ

1
Лучший ответ

Я вижу, что вы упомянули слово "publish", в котором намекает, что вы можете использовать Eclipse или, возможно, IBM RAD или даже MyEclipse Blue.

Если это правда, прочитайте...

Хотя ваш.ear, созданный m2e/Maven, может иметь файл.jar, присутствующий в файле.war, есть шанс, что файл.ear и.war, созданный m2e-wtp, не имеет.jar файла. Созданный файл m2e-wtp используется для публикации/повторной публикации вашего приложения в WAS из Eclipse/RAD/MyEclipse Blue.

Попробуйте удалить приложение из локального WAS, найдя местоположение этого файла, созданного m2e-wtp, и удалив его. Оттуда, m2e-wtp должен автоматически генерировать новый.ear файл, если вы очищаете свой проект (все связанные с ним, ухом, войной и т.д.),

Когда вы публикуете свое приложение, он должен найти класс. В прошлом у меня была одна и та же проблема. Мое предложение устранило проблему.

Кроме этого, вам может потребоваться установить политику Classloader в PARENT_LAST и проверить, что вы используете один загрузчик классов для всего приложения (второй набор переключателей ниже переключателей политики Classloader) в консоли администратора WAS. Тем не менее, я сомневаюсь, что политика Classloader является проблемой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню