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 = "" 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 = "" 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

Reply via email to