2015-03-12 2 views
0

Я тестирую веб-службы, используя CXF 2.7.14 поверх Tomcat 7 на Eclipse Kepler EE. Веб-служба вызывается входящим запросом; однако, прежде чем он получит какую-либо обработку, он получает ClassNotFoundException: netscape.ldap.LDAPException (а также NoClassDefFoundError). Странно, если я запустил main() вместо вызова CXF, я бы не получил Исключения. У кого-нибудь есть идея?ClassNotFoundException/NoClassDefFoundError с использованием Eclipse

Вот трассировки стека:

Mar 12, 2015 3:15:23 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging 
WARNING: Application {http://g.a.com}MyService#{http://g.a.com/myservice}getAddr has thrown exception, unwinding now 
org.apache.cxf.interceptor.Fault: netscape/ldap/LDAPException 
    at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:170) 
    at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:272) 
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:136) 
    at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:237) 
    at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:69) 
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75) 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:249) 
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222) 
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153) 
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.NoClassDefFoundError: netscape/ldap/LDAPException 
    at com.a.g.myservice.MyTypeImpl.getAddr(MyTypeImpl.java:50) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:188) 
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:104) 
    ... 37 more 
Caused by: java.lang.ClassNotFoundException: netscape.ldap.LDAPException 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    ... 44 more 

UPDATE: Я начал комментировал вещи, и в конце концов нашел виновника пока я не знаю причину: Как только я включаю заявление «поймать», показанное ниже , Я получаю Исключения.

import netscape.ldap.LDAPConnection; 
import netscape.ldap.LDAPException; 
... 
    try { 
    ... 
    } catch (LDAPException le) { 
    ... 

Если я включаю полный путь, netscape.ldap.LDAPException, то же исключение. Этот пакет Netscape был часть баночки файла, который я добавил в качестве внешнего файла JAR в пути сборки проекта, как показан на .classpath файл выдержке здесь:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry exported="true" kind="lib" path="C:/Users/dh931w/g2src/jars/ldapjdk418.jar"/> 

Нет проблем во время компиляции. Любая идея, почему я получаю эти исключения во время выполнения?

+0

Я добавил ldap jdk во внешний список баннеров. Возможно ли, что это противоречит чему-то встроенному Apache AXIS или CXF? – Hampden123

ответ

0

В Eclipse, когда вы запускаете main() через Run As ... Java Application, он использует другую JRE, чем вы запустили как ... Запустите на сервере. Таким образом, указание внешних банок в пути сборки проекта является хорошим только для компиляции и запуска приложения Java. При запуске на сервере вы должны выполнить эквивалент указанного вами сервера (например, Tomcast). Слишком плохо Eclipse не делает этого для вас.

Есть по крайней мере два способа сделать это:

  1. Из Run As ... Run Конфигурация, выберите Tomcat и добавить все внешние Баночки для записей пользователя на вкладке Classpath таким же образом вы для пути построения проекта.

  2. Скопируйте все свои внешние банки в папку jre/lib/ext установленной JRE, которую вы обозначили.

Я думаю, вы также можете использовать файлы манифеста, чтобы найти все внешние файлы jar, но я этого никогда не делал. Кроме того, под Windows | Настройки | Сервер | Среда выполнения | Записи по умолчанию в Classpath, вы можете добавить всю папку, содержащую ваши внешние файлы jar.

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