You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by "Sergey Salishev (JIRA)" <ji...@apache.org> on 2008/06/18 10:48:46 UTC

[jira] Updated: (YOKO-360) java.lang.Error: cannot find computeSerialVersionUID method when running Caucho Resin AppServer on Harmony

     [ https://issues.apache.org/jira/browse/YOKO-360?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sergey Salishev updated YOKO-360:
---------------------------------

    Attachment: yoko-360.patch

> java.lang.Error: cannot find computeSerialVersionUID method when running Caucho Resin AppServer on Harmony
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: YOKO-360
>                 URL: https://issues.apache.org/jira/browse/YOKO-360
>             Project: Yoko - CORBA Server
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: RMI-IIOP
>    Affects Versions: Incubation
>            Reporter: Sergey Salishev
>             Fix For: v1.0.0
>
>         Attachments: yoko-360.patch
>
>
> java.lang.Error: cannot find computeSerialVersionUID method 
>         at org.apache.yoko.rmi.impl.ValueDescriptor$1.run(ValueDescriptor.java:158) 
>         at java.security.AccessController.doPrivilegedImpl(AccessController.java:171) 
>         at java.security.AccessController.doPrivileged(AccessController.java:53) 
>         at org.apache.yoko.rmi.impl.ValueDescriptor.getSerialVersionUID(ValueDescriptor.java:138) 
>         at org.apache.yoko.rmi.impl.ValueDescriptor.getRepositoryID(ValueDescriptor.java:109) 
>         at org.apache.yoko.rmi.impl.TypeRepository.init(TypeRepository.java:81) 
>         at org.apache.yoko.rmi.impl.TypeRepository.<init>(TypeRepository.java:45) 
>         at org.apache.yoko.rmi.impl.RMIState.getTypeRepository(RMIState.java:63) 
>         at org.apache.yoko.rmi.impl.RMIState.createValueHandler(RMIState.java:146) 
>         at org.apache.yoko.rmi.impl.UtilImpl.createValueHandler(UtilImpl.java:450) 
>         at javax.rmi.CORBA.Util.createValueHandler(Util.java:61) 
>         at com.caucho.iiop.any.TypeCodeFactory.<clinit>(TypeCodeFactory.java:40) 
>         at com.caucho.iiop.orb.ORBImpl.<init>(ORBImpl.java:57) 
>         at com.caucho.loader.EnvironmentClassLoader.initializeEnvironment(EnvironmentClassLoader.java:567) 
>         at com.caucho.loader.EnvironmentClassLoader.init(EnvironmentClassLoader.java:161) 
>         at com.caucho.loader.ClassLoaderConfig.init(ClassLoaderConfig.java:164) 
>         at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java) 
>         at java.lang.reflect.Method.invoke(Method.java:381) 
>         at com.caucho.config.j2ee.PostConstructProgram.configureImpl(PostConstructProgram.java:62) 
>         at com.caucho.config.BeanTypeStrategy.init(BeanTypeStrategy.java:355) 
>         at com.caucho.config.NodeBuilder.configureImpl(NodeBuilder.java:253) 
>         at com.caucho.config.EnvironmentAttributeStrategy.configure(EnvironmentAttributeStrategy.java:60) 
>         at com.caucho.config.NodeBuilder.configureAttributeImpl(NodeBuilder.java:390) 
>         at com.caucho.config.NodeBuilder.configureBeanImpl(NodeBuilder.java:329) 
>         at com.caucho.config.TypeStrategy.configureBean(TypeStrategy.java:104) 
>         at com.caucho.config.BeanTypeStrategy.configureBean(BeanTypeStrategy.java:257) 
>         at com.caucho.config.EnvironmentTypeStrategy.configureBean(EnvironmentTypeStrategy.java:65) 
>         at com.caucho.config.NodeBuilder.configureImpl(NodeBuilder.java:251) 
>         at com.caucho.config.NodeBuilder.configure(NodeBuilder.java:160) 
>         at com.caucho.config.Config.configure(Config.java:232) 
>         at com.caucho.config.Config.configure(Config.java:176) 
>         at com.caucho.boot.ResinBoot.<init>(ResinBoot.java:134) 
>         at com.caucho.boot.ResinBoot.main(ResinBoot.java:397) 
>         at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java) 
>         at java.lang.reflect.Method.invoke(Method.java:381) 
>         at org.apache.harmony.vm.JarRunner.main(JarRunner.java:80) 
> Caused by: java.lang.NoSuchMethodException: computeDefaultSUID(java.lang.Class) 
>         at java.lang.Class.findMatchingMethod(Class.java:802) 
>         at java.lang.Class.getDeclaredMethod(Class.java:429) 
>         at org.apache.yoko.rmi.impl.ValueDescriptor$1.run(ValueDescriptor.java:149) 
>         at java.security.AccessController.doPrivilegedImpl(AccessController.java:171) 
> This failure occurs as Yoko depends on private java.lang.Class.computeSerialVersionUID method which is of course not present in Harmony. 
> The org.apache.yoko.rmi.impl.ValueDescriptor.getSerialVersionUID code looks very strange as some sort of hacky performance optimization. I've made simple patch which fixes the problem by removing all the suspicious code.
> Index: rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
> ===================================================================
> --- rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java	(revision 532714)
> +++ rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java	(working copy)
> @@ -122,8 +122,6 @@
>          return _repid;
>      }
>  
> -    static java.lang.reflect.Method computeSerialVersionUID_method = null;
> -
>      long getSerialVersionUID() {
>          if (_serial_version_uid_field != null) {
>  
> @@ -134,55 +132,10 @@
>              }
>          }
>  
> -        if (computeSerialVersionUID_method == null) {
> -            java.security.AccessController
> -                    .doPrivileged(new java.security.PrivilegedAction() {
> -                        public Object run() {
> +        java.io.ObjectStreamClass serialForm = java.io.ObjectStreamClass.lookup(getJavaClass());
> +       
> +        return serialForm != null ? serialForm.getSerialVersionUID() : 0L;
>  
> -                            try {
> -                                try {
> -                                    computeSerialVersionUID_method = java.io.ObjectStreamClass.class
> -                                            .getDeclaredMethod(
> -                                                    "computeSerialVersionUID",
> -                                                    new Class[] { Class.class });
> -                                } catch (Exception ex) {
> -                                    computeSerialVersionUID_method = java.io.ObjectStreamClass.class
> -                                            .getDeclaredMethod(
> -                                                    "computeDefaultSUID",
> -                                                    new Class[] { Class.class });
> -                                }
> -                                computeSerialVersionUID_method
> -                                        .setAccessible(true);
> -
> -                            } catch (Exception ex) {
> -                                throw new Error(
> -                                        "cannot find computeSerialVersionUID method",
> -                                        ex);
> -                            }
> -
> -                            return null;
> -                        }
> -                    });
> -        }
> -
> -        try {
> -            if (computeSerialVersionUID_method != null) {
> -                Long result = (Long) computeSerialVersionUID_method.invoke(
> -                        null, new Object[] { getJavaClass() });
> -
> -                return result.longValue();
> -            }
> -
> -            return java.io.ObjectStreamClass.lookup(getJavaClass())
> -                    .getSerialVersionUID();
> -
> -        } catch (Throwable ex) {
> -            logger.finer("Cannot compute serial version UID. "
> -                    + "This may be because you're running "
> -                    + "the Apache Yoko RMI on a JVM which is not compatible. "
> -                    + ex);
> -            return 0;
> -        }
>      }
>  
>      public void init() {

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.