首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java小程序在运行时调用WCF服务失败,出现noclassdef异常

Java小程序在运行时调用WCF服务失败,出现noclassdef异常
EN

Stack Overflow用户
提问于 2013-05-13 02:48:06
回答 2查看 581关注 0票数 0

我有一个java小程序,它使用WCF服务的代理服务来显示数据。这个applet可以在Eclipse中完美地编译和运行,但是当我构建并导出一个Jar文件,然后在一个html页面中运行它时,它会失败

代码语言:javascript
复制
java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException.

我在构建路径中包含了jaxrpc.jar,并且我的jar文件包含了所有必需的类。

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

堆栈跟踪:

代码语言:javascript
复制
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

这件事已经困扰我一整天了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-15 02:07:24

好的。我通过做以下几件事让它工作起来:

首先,我必须对我使用的几个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():EDIT:这一步可能不是必需的,因为当我删除doPrivileged块时,它现在似乎可以工作。

代码语言:javascript
复制
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文件,然后对适当的文件进行签名,这是一个痛苦而缓慢的过程。

票数 0
EN

Stack Overflow用户

发布于 2013-05-13 10:45:38

我认为你的问题是加载rpc jar,而不是调用wcf。

这篇文章很有帮助:http://www.coderanch.com/t/259357/Applets/java/Applet-Axis-Client-Errors

它建议对您的jar进行签名,验证您可以通过浏览器访问所有jar,确保您拥有所有的dependent.jars。

如果所有这些都不能解决问题,我会试着用“NoClassDefFoundError from spplet”来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16510853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档