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]