Java小程序调用WCF服务失败,运行时出现noclassdef异常
我有一个java小程序,它使用WCF服务的代理服务来显示数据。小程序在Eclipse中编译和运行得非常完美,但是当我构建和导出一个Jar文件,然后在html页面中运行它时,它失败了Java小程序调用WCF服务失败,运行时出现noclassdef异常,java,wcf,service,proxy,applet,Java,Wcf,Service,Proxy,Applet,我有一个java小程序,它使用WCF服务的代理服务来显示数据。小程序在Eclipse中编译和运行得非常完美,但是当我构建和导出一个Jar文件,然后在html页面中运行它时,它失败了 java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException. 我已经在构建路径中包含了jaxrpc.jar,我的jar文件包含所有必要的类 堆栈跟踪似乎在抱怨我在applet类中实例化代理服务的那一行。有人知道从java小程序调用WCF服务是否有问题
java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException.
我已经在构建路径中包含了jaxrpc.jar,我的jar文件包含所有必要的类
堆栈跟踪似乎在抱怨我在applet类中实例化代理服务的那一行。有人知道从java小程序调用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
java.lang.RuntimeException:java.lang.NoClassDefFoundError:javax/xml/rpc/ServiceException
在com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.InstanceApplet上(未知源)
位于sun.plugin2.applet.Plugin2Manager.initAppletAdapter(未知源)
位于sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(未知源)
位于java.lang.Thread.run(未知源)
原因:java.lang.NoClassDefFoundError:javax/xml/rpc/ServiceException
ListProducts.ListProducts.(ListProducts.java:25)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于java.lang.Class.newInstance0(未知源)
位于java.lang.Class.newInstance(未知源)
位于com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter$1.run(未知源)
在java.awt.event.InvocationEvent.dispatch(未知源)处
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$200(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
在java.awt.EventQueue$4.run处(未知源)
在java.awt.EventQueue$4.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
原因:java.lang.ClassNotFoundException:javax.xml.rpc.ServiceException
位于sun.plugin2.applet.Applet2ClassLoader.findClass(未知源)
位于sun.plugin2.applet.Plugin2ClassLoader.loadClass0(未知源)
位于sun.plugin2.applet.Plugin2ClassLoader.loadClass(未知源)
位于sun.plugin2.applet.Plugin2ClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
... 还有27个
这一直困扰着我一整天。我想你的问题是加载rpcjar,而不是调用wcf 这篇文章很有帮助: 它建议您对jar进行签名,验证您可以通过浏览器访问所有jar,确保您拥有所有dependent.jar 如果这一切都无济于事,我会尽力解决它。”
NoClassDefFoundError来自spplet“问题。正常。我通过做几件事来实现这一点: 首先,我必须对我使用的几个jar文件进行签名: jaxrpc.jar axis.jar commons-discovery-0.2.jar 但不是: javax.wsdl_1.6.2.v201012040545.jar org.apache.commons.logging_1.0.4.v201101211617.jar 其次,所有这些文件都必须与html页面位于同一目录中,因为我没有在codebase属性中为applet标记指定目录 第三,在我的主小程序(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;
}
});
这些东西的结合让Javaapplet做了它应该做的事情。发现丢失了哪些jar文件,然后对相应的文件进行签名,这是一个痛苦而缓慢的过程。“我在构建路径中包含了jaxrpc.jar,我的jar文件包含了所有必要的类。”这意味着什么?这是否意味着您已经将WFC类包含在HTML中引用的“胖jar”中?发布用于启动它的HTML,以及
archive
属性中每个jar的jar-tvf.jar
。我也很想知道这一点。我已经下载了rpcjar文件并将其解压缩到我的eclipse插件中,但我想知道浏览器是否找不到它。我需要将其解压缩到JDK文件夹吗?Jar文件已签名,可以从浏览器访问。“依赖”罐子是什么意思?我有一个jar,它包含小程序使用的所有类。如果rpcjar是依赖的,那么我需要将它包含在我的主jar文件中吗?依赖-我的意思是,这个jar可能会使用一些额外的jar,比如commons-logging.jar、common-language.jar等等。。。(来自同一个链接帖子,对此我不确定)我明白你的意思。我花了今天的时间将jar添加到html中的archive参数中,并注意到了我遇到的新错误。我现在碰到了一堵砖墙,因为它抱怨“code”java.security.AccessControlException:access denied(“java.lang.RuntimePermission”“createClassLoader”)