Re: using JDOM 1.1 on Android's Dalvik VM

Laurent Bihanic <[email protected]>
Newsgroups gmane.comp.java.jdom.general
Message-ID <[email protected]>
Hi,

 > Is there a better way to code this?  Any other comments?

Seems OK but you may wish to stick to the existing way of handling possibly 
not available exception classes in JDOMException by :
- adding a new getNestedException() method e.g. 
getNestedExceptionFromField(Throwable, String, String)
- using Class.forName() and isAssignableFrom as in :
             Class testClass = Class.forName(className);
             Class objectClass = parent.getClass();
             if (testClass.isAssignableFrom(objectClass)) {
                ...

Laurent


Sean Sullivan wrote:
> 
> I'm trying to use JDOM 1.1 on the Android 1.0 platform. 
> 
> The Android platform supports most Java 5 API's.  However, java.rmi.* 
> classes are not part of the Android platform.
> 
> When I use JDOM 1.1 on Android, I see this error:
> 
> 
> W/dalvikvm(  327): VFY: unable to resolve check-cast 98 
> (Ljava/rmi/RemoteException;) in Lorg/jdom/JDOMException;
> W/dalvikvm(  327): VFY:  rejecting opcode 0x1f at 0x003d
> W/dalvikvm(  327): VFY:  rejected 
> Lorg/jdom/JDOMException;.getNestedException 
> (Ljava/lang/Throwable;)Ljava/lang/Throwable;
> W/dalvikvm(  327): Verifier rejected class Lorg/jdom/JDOMException;
> D/AndroidRuntime(  327): Shutting down VM
> W/dalvikvm(  327): threadid=3: thread exiting with uncaught exception 
> (group=0x40010e28)
> E/AndroidRuntime(  327): Uncaught handler: thread main exiting due to 
> uncaught exception
> E/AndroidRuntime(  327): java.lang.VerifyError: org.jdom.JDOMException
> 
> 
> I looked at the JDOM source code and noticed that org.jdom.JDOMException 
> uses java.rmi.RemoteException:
> 
>         if (parent instanceof RemoteException) {
>             return ((RemoteException)parent).detail;
>         }
> 
> 
> In order for this code to run on Android, we would need to eliminate 
> java.rmi.RemoteException from JDOMException.java
> 
> One possible fix (?) is to use reflection to retrieve the "detail" field:
> 
>         if (parent.getClass().getName().startsWith("java.rmi.")) {
>             try    {
>                 Field f = parent.getClass().getField("detail");
>                 return (Throwable) f.get(parent);
>             } catch (Exception ignore) {
>                 // ignored
>             }
>         }
> 
> Using 'startsWith' is a hack. The intent is to detect 
> java.rmi.RemoteException as well as all
> subclasses of java.rmi.RemoteException from the java.rmi pacakge.
> 
>   http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RemoteException.html
> 
> Is there a better way to code this?  Any other comments?
> 
> Sean
_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.