2013-05-12 81 views
0

noclassdef例外,我的系统使用代理服务WCF服务来显示数据的Java小程序。小程序编译并在Eclipse运行非常好,但是当我建立并导出一个jar文件,然后用Java程序调用WCF服务无法在运行时

java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException. 

我已经在我的构建路径包括没有jaxrpc.jar运行在它失败html页面,我的jar文件包含所有必要的课程。

堆栈跟踪似乎是在抱怨,我从applet类中实例的代理服务就行了。有没有人知道是否有一个问题,从java applet调用WCF服务?

堆栈跟踪:

java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException 
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.instantiateApplet(Unknown Source) 
at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException 
at ListProducts.ListProducts.<init>(ListProducts.java:25) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at java.lang.Class.newInstance0(Unknown Source) 
at java.lang.Class.newInstance(Unknown Source) 
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter$1.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javax.xml.rpc.ServiceException 
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 27 more 

这一直困扰我的一整天。

+0

*“我已经在我的构建路径包括没有jaxrpc.jar和我的jar文件包含所有必要的类。” *这是什么意思?这是否意味着你已经将WFC类包含在HTML中引用的“胖罐子”中?发布用于启动它的HTML,以及'archive'属性中每个Jar的'jar -tvf the.jar'。 – 2013-05-13 04:23:47

回答

0

确定。我做几件事情得到了这个工作:

首先,我不得不签署几个jar文件我用的:

没有jaxrpc.jar

axis.jar

公共发现-0.2的.jar

但不是:

javax.wsdl_1.6.2.v201012040545.jar

org.apache.commons.logging_1.0.4.v201101211617.jar

其次 - 所有这些文件曾在同一目录中的HTML页面存在,因为我没有指定codebase属性目录的小程序标签。第三,在我的主小程序(ListProducts.class)中,我不得不围绕首先调用代理服务的代码使用AccessController.doPrivileged(): 编辑:这一步可能不是必需的,因为它现在似乎工作当我删除doPrivileged块。

AccessController.doPrivileged(new PrivilegedAction() { 
     public Object run() { 

    try { 

     //instantiate proxy service and make rpc's 
     //do other stuff with results... 


    } catch (RemoteException e) { 
     // catch error 
    }   


     return null; 
     } 
    }); 

这些事情的组合让java applet做了它应该做的事情。发现哪些jar文件丢失,然后签署适当的jar文件是一个痛苦的缓慢过程。

0

我觉得你的问题是加载RPC罐子,不打电话WCF。

这个职位可以是有益的: http://www.coderanch.com/t/259357/Applets/java/Applet-Axis-Client-Errors

它recomemds签署您的罐子,验证您可以通过浏览器访问您所有的罐子,确保您拥有所有dependent.jars。

如果所有这些都无济于事 - 我会尝试将其解决为“ 来自spplet的NoClassDefFoundError”问题。

+0

我也想知道这一点。我已经下载了rpc jar文件并将其提取到我的eclipse插件中,但是我不知道浏览器是否找不到它。我需要将它解压到我的JDK文件夹吗? – RobDeManc 2013-05-13 08:55:52

+0

Jar文件已签名,可通过浏览器进行访问。 “依赖”罐子是什么意思?我有一个包含applet使用的所有类的jar。如果rpc jar是依赖的,那么我是否需要将它包含在我的主jar文件中? – RobDeManc 2013-05-13 13:13:26

+0

依赖 - 我的意思是,可能是这个罐子使用一些额外的罐子,像commons-logging.jar,common-language.jar,...(来自同一链接的帖子,我不确定这个) – evgenyl 2013-05-13 18:49:44

相关问题