Axis Plugin: java.lang.NoClassDefFoundError

1.
==============
Issue:

When you use Axis2 Service Archiver plugin for Eclipse, you may got following exception.

java.lang.NoClassDefFoundError: org/apache/axis2/databinding/ADBBean

Reason:

I think this is a bug for Axis plugin, because the old cache data for your last operation is not deleted when you restart eclipse.

Solution:

Delete folder: workspace/.metadata/.plugins/Axis2_Service_Archiver


2.
=====================
https://issues.apache.org/jira/browse/AXIS-2146
axis官方issue单子
Different class loading used in attachment type mapping causing NoClassDefFoundError
Driver: Axis 1.2.1

The problem is that when the Eclipse WTP Web services wizard invokes the Java2WSDLAxisAnt task, the
task itself will construct an AntClassLoader around the classpath that the WS
wizard passes into the task.

When creating Web service using Axis 1.2.1 runtime on a Tomcat 4.1 server,
the classpath contains activation.jar and mail.jar.

After the AntClassLoader is constructed, Axis will CACHE this classloader in a
class call ClassUtils. Later on, when the TypeMappingRegistry is initialized,
the TypeMappingRegistry will determine whether type mapping for attachment is
needed. The way this is determined is by calling:

ClassUtils.forName("javax.activiation.DataHandler");

Of course, when creating a Web service on Axis using Tomcat 4.1,
this returns true because ClassUtils uses the CACHED AntClassLoader,
which has activation.jar and mail.jar on its classpath. So the
TypeMappingRegistry will go ahead and initialize the type mapping for
attachment. However, in the attachment type mapping's initialization method, it
does a:

Class.forName("javax.activiation.DataHandler");

instead of a:

ClassUtils.forName("javax.activiation.DataHandler");

Since Class.forName("...") will go to the Eclipse class loader, which does not
have activation.jar and mail.jar on its classpath. A NoClassDefFoundError is
being thrown.

This problem only starts happening with Axis 1.2.1. The same scenario works in Axis 1.1 and Axis 1.0.

This problem does not occur when using Tomcat 5.0 since mail.jar and activation.jar is not in the classpath
passed to Java2WSDLAxisAnt task.

Here's the exception being thrown:

--- Nested Exception ---
java.lang.NoClassDefFoundError: javax/activation/DataSource
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory.class$(J
AFDataHandlerSerializerFactory.java:37)
at org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory.getSeria
lizerClass(JAFDataHandlerSerializerFactory.java:46)
at org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory.<init>(J
AFDataHandlerSerializerFactory.java:34)
at org.apache.axis.encoding.DefaultTypeMappingImpl.initMappings(DefaultT
ypeMappingImpl.java:120)
at org.apache.axis.encoding.DefaultTypeMappingImpl.<init>(DefaultTypeMap
pingImpl.java:91)
at org.apache.axis.encoding.DefaultTypeMappingImpl.getSingletonDelegate(
DefaultTypeMappingImpl.java:85)
at org.apache.axis.encoding.TypeMappingRegistryImpl.<init>(TypeMappingRe
gistryImpl.java:155)
at org.apache.axis.encoding.TypeMappingRegistryImpl.<init>(TypeMappingRe
gistryImpl.java:149)
at org.apache.axis.wsdl.fromJava.Emitter.<clinit>(Emitter.java:747)
at org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask.execute(Java2WsdlAntT
ask.java:172)
at org.eclipse.jst.ws.internal.axis.consumption.core.command.Java2WSDLCo
mmand.executeAntTask(Java2WSDLCommand.java:144)
at org.eclipse.jst.ws.internal.axis.consumption.core.command.Java2WSDLCo
mmand.execute(Java2WSDLCommand.java:81)
at org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEng
ine.runCommand(CommandFragmentEngine.java:335)
at org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEng
ine.visitTop(CommandFragmentEngine.java:301)
at org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEng
ine.moveForwardToNextStop(CommandFragmentEngine.java:217)
at org.eclipse.wst.command.internal.env.ui.widgets.SimpleCommandEngineMa
nager$4.run(SimpleCommandEngineManager.java:208)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalCont
ext.java:346)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:291)
at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:830)
at org.eclipse.wst.command.internal.env.ui.widgets.SimpleCommandEngineMa
nager.runForwardToNextStop(SimpleCommandEngineManager.java:177)
at org.eclipse.wst.command.internal.env.ui.widgets.WizardPageManager.run
ForwardToNextStop(WizardPageManager.java:80)
at org.eclipse.wst.command.internal.env.ui.widgets.WizardPageManager.get
NextPage(WizardPageManager.java:119)
at org.eclipse.wst.command.internal.env.ui.widgets.SimpleWizardPage.getN
extPage(SimpleWizardPage.java:120)
at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:7
47)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java
:345)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:556)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:
90)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:809)
at org.eclipse.jface.window.Window.open(Window.java:787)
at org.eclipse.wst.command.internal.env.ui.widgets.popup.DynamicPopupWiz
ard.run(DynamicPopupWizard.java:129)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:2
46)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection
(ActionContributionItem.java:538)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContri
butionItem.java:488)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionC
ontributionItem.java:400)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.jav
a:367)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:10
3)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAct
ivator.java:226)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:376)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
at org.eclipse.core.launcher.Main.run(Main.java:973)
at org.eclipse.core.launcher.Main.main(Main.java:948)

We had to workaround the problem by explicitely not passing in mail.jar and activation.jar (even though
they are in the Tomcat 4.1 runtime library) when calling setClasspath for Java2WSDLAxisAnt task
so that Axis determines that isAttachmentEnabled is false and thus not do further attachment
type mapping processing.

We were trying to see if there's a way to manually set "isAttachmentEnable" to be false but could not found one.
It would be helpful if an API exist for the user to optionally disable attachment processing rather than having the Axis
code "detects" it.

Please let me know If you need any more information isolating the problem.

3.
=======================
eclipse官方也有bug单子描述
https://bugs.eclipse.org/bugs/show_bug.cgi?id=197819
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值