That's looking suspiciously like a Javassist bug to me.

On Sat, 22 Jan 2005 20:35:06 +0100, Kristian Mandrup
<[EMAIL PROTECTED]> wrote:
>  
>  
> 
> Hi all, 
> 
>   
> 
> I have been trying to use a custom RegistryBuilder using a custom
> ClassLoader. 
> 
> ClassLoader works fine on its own! 
> 
>   
> 
> When I run the Calculator example, it fails when trying to retrieve the
> Adder service: 
> 
>   
> 
> public static âmain(â) { 
> 
>                       â 
> 
>             RepositoryClassLoader loader = getLoader(repos, archiveName); 
> 
>             Registry hivemindRegistry = RepositoryRegistryBuilder 
> 
>                     .constructDefaultRegistry(repos, 
> 
>                             loader, paths); 
> 
>             String serviceName = "org.apache.hivemind.examples.Adder"; 
> 
>             Class adderClass = loader.findClass(serviceName); 
> 
>   
> 
>             if (hivemindRegistry.containsService(adderClass)) { 
> 
>                 Object service = hivemindRegistry.getService(adderClass); 
> 
> } 
> 
>   
> 
> Internally, the javassist tries to: 
> 
>   
> 
> public MethodFab addMethod(int modifiers, MethodSignature ms, String body) 
> 
>   
> 
> with the following src for the body 
> 
>   
> 
> src = "return
> org.apache.hivemind.internal.ser.ServiceSerializationHelper.getServiceSerializationSupport().getServiceTokenForService("examples.Adder");"
> 
>   
> 
> Parsing this source causes the following error !!! Is this an error with
> javassist ??? 
> 
>   
> 
> It proceeds to try loading "org.class" using my custom ClassLoader, calling
> [RepositoryClassLoader ].getResourceAsStream(String name) !!! 
> 
>   
> 
> Anything to do with my "bogus" URL at public URL getResource(String name) ? 
> 
>   
> 
>   
> 
> org.apache.hivemind.ApplicationRuntimeException: Unable to add method
> java.lang.Object writeReplace() to class $Adder_1019bc4c98d:
> javassist.NotFoundException: org 
> 
>                       at
> org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxy(SingletonServiceModel.java:114)
> 
>                       at
> org.apache.hivemind.impl.servicemodel.SingletonServiceModel.getService(SingletonServiceModel.java:58)
> 
>                       at
> org.apache.hivemind.impl.ServicePointImpl.getService(ServicePointImpl.java:189)
> 
>                       at
> org.apache.hivemind.impl.ServicePointImpl.getService(ServicePointImpl.java:202)
> 
>                       at
> org.apache.hivemind.impl.RegistryInfrastructureImpl.getService(RegistryInfrastructureImpl.java:207)
> 
>                       at
> org.apache.hivemind.impl.RegistryImpl.getService(RegistryImpl.java:71) 
> 
>                       at
> org.planx.cmsoax.soa.hivemind.TestRepositoryRegistryBuilder.testConstruct(TestRepositoryRegistryBuilder.java:165)
> 
>                       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method) 
> 
>                       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> Source) 
> 
>                       at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
> 
>                       at java.lang.reflect.Method.invoke(Unknown Source) 
> 
>                       at junit.framework.TestCase.runTest(TestCase.java:154)
> 
>                       at junit.framework.TestCase.runBare(TestCase.java:127)
> 
>                       at
> junit.framework.TestResult$1.protect(TestResult.java:106) 
> 
>                       at
> junit.framework.TestResult.runProtected(TestResult.java:124) 
> 
>                       at junit.framework.TestResult.run(TestResult.java:109)
> 
>                       at junit.framework.TestCase.run(TestCase.java:118) 
> 
>                       at
> junit.framework.TestSuite.runTest(TestSuite.java:208) 
> 
>                       at junit.framework.TestSuite.run(TestSuite.java:203) 
> 
>                       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:474)
> 
>                       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:342)
> 
>                       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:194)
> 
> Caused by: org.apache.hivemind.ApplicationRuntimeException: Unable to add
> method java.lang.Object writeReplace() to class $Adder_1019bc4c98d:
> javassist.NotFoundException: org 
> 
>                       at
> org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:310)
> 
>                       at
> org.apache.hivemind.impl.ProxyBuilder.addSerializable(ProxyBuilder.java:84) 
> 
>                       at
> org.apache.hivemind.impl.ProxyBuilder.<init>(ProxyBuilder.java:67) 
> 
>                       at
> org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxyClass(SingletonServiceModel.java:129)
> 
>                       at
> org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxy(SingletonServiceModel.java:89)
> 
>                       ... 21 more 
> 
> Caused by: java.lang.RuntimeException: javassist.NotFoundException: org 
> 
>                       at
> javassist.CtClassType.getClassFile2(CtClassType.java:197) 
> 
>                       at
> javassist.CtClassType.getFieldsCache(CtClassType.java:551) 
> 
>                       at
> javassist.CtClassType.getDeclaredField2(CtClassType.java:572) 
> 
>                       at
> javassist.CtClassType.getField2(CtClassType.java:515) 
> 
>                       at
> javassist.CtClassType.getField(CtClassType.java:507) 
> 
>                       at
> javassist.compiler.MemberResolver.lookupFieldByJvmName2(MemberResolver.java:249)
> 
>                       at
> javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:774) 
> 
>                       at
> javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:702) 
> 
>                       at
> javassist.compiler.TypeChecker.atExpr(TypeChecker.java:504) 
> 
>                       at javassist.compiler.ast.Expr.accept(Expr.java:67) 
> 
>                       at
> javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:759) 
> 
>                       at
> javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:702) 
> 
>                       at
> javassist.compiler.TypeChecker.atExpr(TypeChecker.java:504) 
> 
>                       at javassist.compiler.ast.Expr.accept(Expr.java:67) 
> 
>                       at
> javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:759) 
> 
>                       at
> javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:702) 
> 
>                       at
> javassist.compiler.TypeChecker.atExpr(TypeChecker.java:504) 
> 
>                       at javassist.compiler.ast.Expr.accept(Expr.java:67) 
> 
>                       at
> javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:759) 
> 
>                       at
> javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:702) 
> 
>                       at
> javassist.compiler.TypeChecker.atExpr(TypeChecker.java:504) 
> 
>                       at javassist.compiler.ast.Expr.accept(Expr.java:67) 
> 
>                       at
> javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:759) 
> 
>                       at
> javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:702) 
> 
>                       at
> javassist.compiler.TypeChecker.atExpr(TypeChecker.java:504) 
> 
>                       at javassist.compiler.ast.Expr.accept(Expr.java:67) 
> 
>                       at
> javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:586) 
> 
>                       at
> javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) 
> 
>                       at
> javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) 
> 
>                       at
> javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:586) 
> 
>                       at
> javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) 
> 
>                       at
> javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) 
> 
>                       at
> javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:235) 
> 
>                       at
> javassist.compiler.CodeGen.compileExpr(CodeGen.java:222) 
> 
>                       at
> javassist.compiler.CodeGen.atReturnStmnt2(CodeGen.java:591) 
> 
>                       at
> javassist.compiler.JvstCodeGen.atReturnStmnt(JvstCodeGen.java:424) 
> 
>                       at
> javassist.compiler.CodeGen.atStmnt(CodeGen.java:356) 
> 
>                       at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) 
> 
>                       at
> javassist.compiler.CodeGen.atMethodBody(CodeGen.java:285) 
> 
>                       at
> javassist.compiler.Javac.compileBody(Javac.java:208) 
> 
>                       at javassist.CtBehavior.setBody(CtBehavior.java:188) 
> 
>                       at javassist.CtBehavior.setBody(CtBehavior.java:163) 
> 
>                       at
> org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:302)
> 
>   
> 
>   
> 
>     public static Registry constructDefaultRegistry(Repository repository, 
> 
>             ClassLoader classLoader, String[] modDescPath) { 
> 
>         ClassResolver resolver = new DefaultClassResolver(classLoader); 
> 
>         RegistryBuilder builder = new RegistryBuilder(); 
> 
>         
> 
>         // default provider - class resolver 
> 
>         builder.addModuleDescriptorProvider(new
> XmlModuleDescriptorProvider(new DefaultClassResolver())); 
> 
>         
> 
>         // default provider - repository class resolver 
> 
>         // builder.addModuleDescriptorProvider(new
> XmlModuleDescriptorProvider(resolver)); 
> 
>         // provide descriptor from xml file at specific location, use
> repository resolver 
> 
>         if (modDescPath != null) { 
> 
>             for (int i = 0; i < modDescPath.length; i++) { 
> 
>                 FileResource resource = new FileResource(modDescPath[i]); 
> 
>                 builder 
> 
>                         .addModuleDescriptorProvider(new
> XmlModuleDescriptorProvider( 
> 
>                                 resolver, resource)); 
> 
>             } 
> 
>         } 
> 
>         return builder.constructRegistry(Locale.getDefault()); 
> 
>     } 
> 
>   
> 
>   
> 
> public class RepositoryClassLoader extends ClassLoader { 
> 
> ââ 
> 
>     public InputStream getResourceAsStream(String name) { 
> 
>         try { 
> 
>             return new ByteArrayInputStream(loadClassData(name));    
> 
>         } catch (ServiceClassLoaderException e) { 
> 
>             System.out.println("Resource not found [" + name + "]"); 
> 
>             return null; 
> 
>         }        
> 
>     } 
> 
>   
> 
>     public URL getResource(String name) { 
> 
>         try { 
> 
>             String url = new
> StringBuffer("http://";).append(getServletPath()).append("repository=").append(getRepository().getName()).append("&project=").append(getProject()).append("&path=").append(name).toString();
> 
>             return new URL(url);    
> 
>         } catch (MalformedURLException e) { 
> 
>             e.printStackTrace(); 
> 
>             return null; 
> 
>         }               
> 
>     } 
>  
> 
> ---
>  Outgoing mail is certified Virus Free.
>  Checked by AVG anti-virus system (http://www.grisoft.com).
>  Version: 6.0.779 / Virus Database: 526 - Release Date: 19-10-2004
>  


-- 
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to