Title: classloader problems

I'm having a problem with axis throwing a ClassNotFoundException when I try to access a deployed service. It chokes on [Lservice1._RecordType; (see the attached wsdl). I traced it down to the getLanguageSpecificType method in WSDDTypeMapping.

    public Class getLanguageSpecificType()
        throws ClassNotFoundException
    {
        if (typeQName != null) {
            if (!WSDDConstants.WSDD_JAVA.equals(typeQName.getNamespaceURI())) {
                throw new ClassNotFoundException(JavaUtils.
                             getMessage("badTypeNamespace00",
                                        typeQName.getNamespaceURI(),
                                        WSDDConstants.WSDD_JAVA));
            }
            String loadName = JavaUtils.getLoadableClassName(typeQName.getLocalPart());
            ClassLoader cl = Thread.currentThread().getContextClassLoader();
            return cl.loadClass(loadName);
        }
       
        throw new ClassNotFoundException(JavaUtils.getMessage("noTypeQName00"));
    }

Now if I replace these two lines:
            ClassLoader cl = Thread.currentThread().getContextClassLoader();
            return cl.loadClass(loadName);

with this:
            return Class.forName(loadName);

everything works. Why is the contex ClassLoader used instead of the default ClassLoader?

Here's the full stack trace:
java.lang.ClassNotFoundException: [Lservice1._RecordType;
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1156)
        at org.apache.axis.deployment.wsdd.WSDDTypeMapping.getLanguageSpecificType(WSDDTypeMapping.java:230)
        at org.apache.axis.deployment.wsdd.WSDDService.deployTypeMapping(WSDDService.java:304)
        at org.apache.axis.deployment.wsdd.WSDDService.makeNewInstance(WSDDService.java:251)
        at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:294)
        at org.apache.axis.deployment.wsdd.WSDDDeployment.getService(WSDDDeployment.java:430)
        at org.apache.axis.configuration.FileProvider.getService(FileProvider.java:208)
        at org.apache.axis.AxisEngine.getService(AxisEngine.java:240)
        at org.apache.axis.MessageContext.setTargetService(MessageContext.java:414)
        at org.apache.axis.handlers.http.URLMapper.invoke(URLMapper.java:86)
        at org.apache.axis.handlers.http.URLMapper.generateWSDL(URLMapper.java:94)
        at org.apache.axis.strategies.WSDLGenStrategy.visit(WSDLGenStrategy.java:72)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:151)
        at org.apache.axis.SimpleChain.generateWSDL(SimpleChain.java:137)
        at org.apache.axis.server.AxisServer.generateWSDL(AxisServer.java:404)
        at org.apache.axis.transport.http.AxisServlet.doGet(AxisServlet.java:287)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011)
        at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106)
        at java.lang.Thread.run(Thread.java:496)

Dave Dunkin

 

Attachment: service1.wsdl
Description: Binary data

Reply via email to