axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tom Jordahl (JIRA)" <axis-...@ws.apache.org>
Subject [jira] Commented: (AXIS-2146) Different class loading used in attachment type mapping causing NoClassDefFoundError
Date Thu, 26 Jan 2006 15:34:10 GMT
    [ http://issues.apache.org/jira/browse/AXIS-2146?page=comments#action_12364088 ] 

Tom Jordahl commented on AXIS-2146:
-----------------------------------

Wouldn't the change be for the attachement code to use the ClassUtils function instead?

If I recall correctly, ClassUtils solves problems in class loading for various configurations
such as App servers and the like.


> Different class loading used in attachment type mapping causing NoClassDefFoundError
> ------------------------------------------------------------------------------------
>
>          Key: AXIS-2146
>          URL: http://issues.apache.org/jira/browse/AXIS-2146
>      Project: Apache Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.2.1
>  Environment: Windows 2000
>     Reporter: Kathy Chan

>
> 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.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message