2013-05-12 79 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