Hi Oscar,

It looks like Retrotranslator haven't translated the ConversationProcessor
class if you see the following stack trace:

java.lang.UnsupportedOperationException: native method not implemented
  at java.lang.Class.getDeclaredAnnotations(Native Method)
  at java.lang.Class.getAnnotations(Class.java:204)
  at java.lang.Class.getAnnotation(Class.java:187)
  at
org.apache.tuscany.sca.implementation.java.introspect.impl.ConversationProcessor.visitClass(ConversationProcessor.java:49)

Check the size of the translated class, it should become one third bigger.

If you need backport-util-concurrent-3.1.jar you have probably run
Retrotranslator without specifying "-target 1.5". Always use "-target 1.5"
and "-classpath retrotranslator-android-1.2.6.jar" even if repeatedly
translating classes. However I recommend to translate code in one pass.


Cheers,

Taras


On Thu, Jul 3, 2008 at 3:45 PM, Oscar Castaneda <
[EMAIL PROTECTED]> wrote:

> Hi Taras,
>
> Thanks for your help. I tried the -backport option on the previously
> retrotranslated classes and received some errors that were resolved by
> including backport-util-concurrent-3.1.jar. After that I was getting some
> errors related to getAnnotation [1] so I tried building all the projects
> from scratch and running retrotranslator again together with the -backport
> option. Now I'm getting UnsupportedOperationException errors [2]. Any advice
> you can give me will be greatly appreciated.
>
> [1] http://cwiki.apache.org/confluence/display/TUSCANYWIKI/30Jun2008
> [2] http://cwiki.apache.org/confluence/display/TUSCANYWIKI/2Jul2008
>
>
> On Thu, Jun 19, 2008 at 1:06 PM, Taras Puchko <[EMAIL PROTECTED]>
> wrote:
>
>> I'm glad Retrotrotranslator works for you Oscar. If you just want to get
>> rid of java.rmi.Remote you may replace it with java.lang.Cloneable using the
>> folowing Retrotranslator option:
>>
>> -backport java.rmi.Remote:java.lang.Cloneable
>>
>> But in case you have some important code using the java.rmi package you
>> may try to take sources of java.rmi from the Apache Harmony.
>> Then move the sources into another package, so you'll have, for example,
>> mypack.java.rmi, compile and jar them. After that you may use it with
>> Retrotranslator:
>>
>> -backport mypack -classpath mypack.jar
>>
>> But this approach works only if the sources don't employ native code :)
>>
>> Cheers,
>> Taras.
>>
>>
>> On Wed, Jun 18, 2008 at 10:41 PM, Oscar Castaneda <
>> [EMAIL PROTECTED]> wrote:
>>
>>> Thanks again for all your help Taras. After following your suggestion and
>>> adding retrotranslator-android-1.2.6.jar as an external library (as opposed
>>> to an external _user_ library) the retrotranslator related errors
>>> disappeared. I'm now receiving errors about java.rmi.Remote [1], which from
>>> what I could find is not supported in Android. I just thought I'd mention it
>>> in case you have any suggestions :-)
>>>
>>> I will respond also on the Android Developer list as someone else might
>>> find this useful. By mistake I sent the email only to you which I think
>>> resulted in me being the only recipient of your response.
>>>
>>> Again, thanks for all your help.
>>>
>>> [1] http://cwiki.apache.org/confluence/display/TUSCANYWIKI/18Jun2008
>>>
>>>
>>> On Tue, Jun 17, 2008 at 11:05 PM, <[EMAIL PROTECTED]> wrote:
>>>
>>>> I forgot to mention that you can use the embed option making inclusion
>>>> of retrotranslator-android-1.2.6.jar into the compile path redundant.
>>>>
>>>> So you can add "-embed <a single dot or any package name>":
>>>>
>>>> java -jar
>>>> ../Retrotranslator-1.2.6-bin/retrotranslator-transformer-1.2.6.jar
>>>> -srcdir ../workspace -target 1.5 -reflection safe -stripannot -embed .
>>>> -classpath
>>>> ../Retrotranslator-1.2.6-bin/retrotranslator-android-1.2.6.jar
>>>> -verbose
>>>>
>>>> On 6/17/08, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>>>> > Hi Oscar,
>>>> >
>>>> > Unfortunately I cannot open the TUSCANY wiki at the moment but it
>>>> looks like
>>>> > the contents of retrotranslator-android-1.2.6.jar hasn't been included
>>>> into
>>>> > the dex file. Try to explicitly refer to it in your code, for
>>>> instance, call
>>>> >
>>>> net.sf.retrotranslator.android.main.java.lang._Class.cast(String.class,
>>>> > "test");
>>>> >
>>>> > And you needn't use the 1.4 target - only using the 1.5 one makes
>>>> sense for
>>>> > Android.
>>>> >
>>>> > Cheers,
>>>> > Taras.
>>>> >
>>>> >
>>>> > On 6/17/08, Oscar Castaneda <[EMAIL PROTECTED]> wrote:
>>>> >> Hi Taras,
>>>> >>
>>>> >> Thank you so much for the detailed response.
>>>> >>
>>>> >> I think you're right that when I run the Android project from Eclipse
>>>> it
>>>> >> both compiles the sources into classes and the classes into a dex
>>>> file. I
>>>> >> also agree that the most elegant way would be to add the translation
>>>> step
>>>> >> to
>>>> >> the ADT plugin source code, thus enabling users to run
>>>> Retrotranslator on
>>>> >> the sources from within Eclipse. In some cases, such as mine, this is
>>>> >> preferred over manually translating libraries that contain
>>>> annotations and
>>>> >> then adding them to the the main project (for instance, to simplify
>>>> >> debugging).
>>>> >>
>>>> >> There is a workaround to prevent classes that have already been
>>>> translated
>>>> >> by Retrotranslator to be recompiled from source. The workaround is to
>>>> >> disable the Java Builders from within each project's properties. I
>>>> tried
>>>> >> this and no longer receive the Annotation error:
>>>> >>
>>>> >> java.lang.Class.isAnnotationPresent(Class.java:1131)
>>>> >>
>>>> >> However, I'm getting the error shown below (and listed on the full
>>>> stack
>>>> >> trace in [1]). I took care to include
>>>> retrotranslator-android-1.2.6.jar as
>>>> >> an external library to all Tuscany projects, including
>>>> calculator-android,
>>>> >> as you pointed out. Additionally, I confirmed through the timestamps
>>>> on
>>>> >> class files and dex file that retrotranslated classes are not being
>>>> >> recompiled and that the dex file was generated a few minutes after
>>>> running
>>>> >> retrotranslator.
>>>> >>
>>>> >> java.lang.NoClassDefFoundError:
>>>> >> net.sf.retrotranslator.android.main.java.lang._Class
>>>> >>
>>>> >> I've tried this running retrotranslator as shown below, setting the
>>>> target
>>>> >> to java 1.5 at first and then to 1.4.
>>>> >>
>>>> >> $ java -jar
>>>> >> /../Retrotranslator-1.2.6-bin/retrotranslator-transformer-1.2.6.jar
>>>> >> -srcdir
>>>> >> /../workspace -target 1.5 -reflection safe -stripannot -classpath
>>>> >> /../Retrotranslator-1.2.6-bin/retrotranslator-android-1.2.6.jar
>>>> -verbose
>>>> >>
>>>> >> What could be going wrong? Any suggestions would be greatly
>>>> appreciated.
>>>> >>
>>>> >> [1] http://cwiki.apache.org/confluence/display/TUSCANYWIKI/14Jun2008
>>>> >>
>>>> >>
>>>> >>
>>>> >> On Wed, Jun 4, 2008 at 6:44 PM, Taras Puchko <[EMAIL PROTECTED]
>>>> >
>>>> >> wrote:
>>>> >>
>>>> >>> Hi Oscar,
>>>> >>>
>>>> >>> Retrotranslator does it's job by modifying compiled classes in the
>>>> >>> following way:
>>>> >>> 1. Embedding into each class its metadata (including annotations) as
>>>> one
>>>> >>> big character string.
>>>> >>> 2. Replacing some method invocations, so
>>>> >>> java.lang.Class.isAnnotationPresent is being replaced with
>>>> >>>
>>>> net.sf.retrotranslator.android.main.java.lang.Class.isAnnotationPresent
>>>> >>> etc.
>>>> >>>
>>>> >>> So when you call getAnnotations() on a particular class the code
>>>> from
>>>> >>> retrotranslator-android-1.2.6.jar will parse the corresponding
>>>> metadata
>>>> >>> and
>>>> >>> return the result.
>>>> >>>
>>>> >>> AFAIK when you run your Android project from Eclipse it both
>>>> compiles
>>>> >>> your
>>>> >>> sources into classes and the classes into a dex file. So
>>>> Retrotranslator
>>>> >>> has
>>>> >>> no chance to modify classes in between unless you fix the ADT
>>>> plugin. The
>>>> >>> workaround is not to put your sources into Eclipse and to process it
>>>> with
>>>> >>> javac, Retrotranslator and jar manually. After that you may add the
>>>> jar
>>>> >>> to
>>>> >>> Eclipse.
>>>> >>>
>>>> >>> If you execute the following line you should obtain
>>>> mytuscany-android.jar
>>>> >>> that is one-third bigger then the original mytuscany.jar and does
>>>> not
>>>> >>> contain references to Java 5 reflection methods.
>>>> >>>
>>>> >>> java -jar retrotranslator-transformer-1.2.6.jar -srcjar
>>>> mytuscany.jar
>>>> >>> -destjar mytuscany-android.jar  -target 1.5 -reflection safe
>>>> -stripannot
>>>> >>> -classpath retrotranslator-android-1.2.6.jar
>>>> >>>
>>>> >>> So the line java.lang.Class.isAnnotationPresent(Class.java:1131) in
>>>> the
>>>> >>> stack trace means that the application is based on non-translated
>>>> >>> binaries.
>>>> >>> Maybe you had successfully processed your classes but Eclipse
>>>> overwrote
>>>> >>> them
>>>> >>> after that or Eclipse had already created the dex file before you
>>>> >>> executed
>>>> >>> Retrotranslator.
>>>> >>>
>>>> >>> If you're using Eclipse the most elegant way would be to add the
>>>> >>> translation step to the ADT plugin source code, but otherwise don't
>>>> >>> include
>>>> >>> Tuscany sources into the project, only include a jar processed by
>>>> >>> Retrotranslator and retrotranslator-android-1.2.6.jar.
>>>> >>>
>>>> >>>
>>>> >>> Cheers,
>>>> >>> Taras.
>>>> >>>
>>>> >>>
>>>> >>> On Wed, Jun 4, 2008 at 3:21 PM, <[EMAIL PROTECTED]>
>>>> wrote:
>>>> >>>
>>>> >>>> Hi Taras,
>>>> >>>>
>>>> >>>> I'm trying to run Apache Tuscany on Android as part of my Google
>>>> >>>> Summer of Code project: Incubating and Android in Delft [1]. I've
>>>> run
>>>> >>>> all the (modified) source code through retrotranslator but still
>>>> get
>>>> >>>> "native method not implemented" errors that I believe are related
>>>> to
>>>> >>>> the lack of annotations support on the current Android SDK.
>>>> >>>>
>>>> >>>> To test Apache Tuscany I'm running a modified calculator project
>>>> >>>> (setup as an Android project) called calculator-android. I have
>>>> >>>> imported the Apache Tuscany SCA modules and modified code for
>>>> Android
>>>> >>>> into an eclipse workspace. Then I'm running retrotranslator from
>>>> the
>>>> >>>> command line as shown below. I'm keeping the target code at java
>>>> 1.5
>>>> >>>> but get the annotation related errors when running the calculator-
>>>> >>>> android as an Android Application. The same thing happens when I
>>>> try
>>>> >>>> to convert the code to java 1.4.
>>>> >>>>
>>>> >>>> $ java -jar /../retrotranslator-transformer-1.2.6.jar -target 1.5 -
>>>> >>>> stripannot -embed support -reflection safe -classpath /../
>>>> >>>> retrotranslator-android-1.2.6.jar -srcdir /../workspace/ -verbose
>>>> >>>>
>>>> >>>> Any advice you may have will be greatly appreciated. There's more
>>>> >>>> details on what I'm currently doing in [2] in case you can help.
>>>> >>>>
>>>> >>>> Thanks in advance.
>>>> >>>>
>>>> >>>> [1]
>>>> >>>>
>>>> http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Allow+Google+Android+applications+to+easily+consume+business+services
>>>> >>>> [2]
>>>> http://cwiki.apache.org/confluence/display/TUSCANYWIKI/30may2008
>>>> >>>>
>>>> >>>> best,
>>>> >>>> -oscar
>>>> >>>>
>>>> >>>> On Apr 3, 5:40 pm, Taras Puchko <[EMAIL PROTECTED]> wrote:
>>>> >>>> > I've made a mistake in my previous post, the correct command is
>>>> the
>>>> >>>> > following:
>>>> >>>> >
>>>> >>>> > java -jarretrotranslator-transformer-1.2.6.jar -target 1.5 -
>>>> >>>> > stripannot -embed support -reflection safe
>>>> -classpathretrotranslator-
>>>> >>>> > android-1.2.6.jar -srcjar gdata-media-1.0.jar
>>>> >>>> >
>>>> >>>> > To use annotations in your code extract classes that contain or
>>>> >>>> > manipulate annotations into a separate library, translate it
>>>> >>>> withRetrotranslatorand add it as a dependency to the main project.
>>>> >>>> >
>>>> >>>> > Regards,
>>>> >>>> > Taras.
>>>> >>>> >
>>>> >>>> > On 3 Кві, 09:42, Taras Puchko <[EMAIL PROTECTED]> wrote:
>>>> >>>> >
>>>> >>>> > > If your application does not declare or use annotations itself
>>>> you
>>>> >>>> > > may
>>>> >>>> > > translate the dependency before adding it to the Eclipse
>>>> project:
>>>> >>>> >
>>>> >>>> > > java -jarretrotranslator-transformer-1.2.6.jar -target 1.5
>>>> -embed
>>>> >>>> > > support -reflection safe -stripannot -srcjar
>>>> gdata-media-1.0.jar
>>>> >>>> >
>>>> >>>> > > Regards,
>>>> >>>> > > Taras.
>>>> >>>> >
>>>> >>>> > > On 28 Бер, 17:18, nwmotogeek <[EMAIL PROTECTED]> wrote:
>>>> >>>> >
>>>> >>>> > > > That link describes how to add a target to the build.xml but
>>>> I
>>>> >>>> > > > don't
>>>> >>>> know
>>>> >>>> > > > how to do that with Eclipse can some one point me to
>>>> instructions
>>>> >>>> > > > on
>>>> >>>> this?
>>>> >>>> >
>>>> >>>> > > > Thanks,
>>>> >>>> > > > -Dave
>>>> >>>>
>>>> >>>
>>>> >>>
>>>> >>> >>>> >>>
>>>> >>>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> best,
>>>> >> -oscar
>>>> >>
>>>> >> Oscar Castañeda
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> best,
>>>> >> -oscar
>>>> >>
>>>> >> Oscar Castañeda
>>>> >>
>>>> >
>>>>
>>>
>>>
>>>
>>> --
>>> best,
>>> -oscar
>>>
>>> Oscar Castañeda
>>
>>
>>
>
>
> --
> best,
> -oscar
>
> Oscar Castañeda

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to