[openrtm-users 03228] Re: OpenRTM-aist-Javaで独自データ型を使う場合の問題

Yuki Suga ysuga @ ysuga.net
2015年 10月 28日 (水) 15:46:12 JST


MLの皆さん:
お世話になります.SSRの菅です.

自レスです.

やはり原因としてはローダーの部分で,InPortクラスのコンストラクタでもローダーがうまく動作していないせいで,独自データ型をJarファイルのダイナミックなロードと組み合わせて使えません.

% ちなみにtrunkのコードだと,2013年5月ごろに指摘したjarのロードの部分が治っていないです.

自分でアドホックにクラスをいじってInPort側だけロードできるものを作りました.
添付のMyDataTest.zi_を.zipに変えて展開すると,jarを含んだテスト用コードが展開されます.MyDataTest.jarはbinフォルダに格納されています.

Test.batで従来のRTMでの動作
Test_modified.batでこちらで修正したRTMでの動作です.
システムエディタで見ると,起動したRTCのポートのデータ型が従来のものだと空欄になるのがわかると思います.

直す部分は少ないのですが,自分で修正したコードはManagerに新しいpublishメソッドforName(String)を追加しているので,なんとなく・・・気持ち悪いかも・・・です.

添付の*.diffファイルに変更点があります.

とりあえず,テストできるものを作ったので共有します.
ではでは




2015年10月28日(水) 11:51 Yuki Suga <ysuga @ ysuga.net>:

> MLの皆さん:
> お世話になります.SUGAR SWEET ROBOTICSの菅です.
>
> Java版のRTMを使っていますが,独自データ型を使う場合にバグがあります.
>
> 1. IDLで独自データ型を定義する
> 2. classをjarアーカイブにする
> 3. rtcdでロードする
>
> このようにすると,独自データ型をスタブを発見できずに,
> データ型無しの状態になってしまいます.ログを見ると,InPortクラスで,
> ClassNotFoundExceptionがキャッチされているのがわかります.
>
> 問題は,InPortクラスで,
> InPort.javaの120行目付近のコード
> =========
>        Class cl = value.v.getClass();
>         String str = cl.getName();
>         try {
>             Class holder = Class.forName(str+"Holder",
>                                          true,
>                                          this.getClass().getClassLoader());
>             m_streamable = (Streamable)holder.newInstance();
>             m_field = m_streamable.getClass().getField("value");
>         }
>        /// この後にClassNotFoundExceptionがキャッチされる(菅)
> =========
> というところでポートのデータ型をロードしているのですが,
> getClassLoaderだと,デフォルトのクラスローダだけを参照しているので,
> jarファイル内にしか無い独自データ型だとうまくロードすることができません.
>
> ローダーはManager側 (ModuleManager.javaあたり?) なので,
> こちらと連携するのかと思います.
>
> アドホックな対応としては,クラスのJarファイルをクラスパスに加えてしまうことです.
> 理想としては,rtc.conf側のみで対応できれば良いと思っています.
>
> コードをちょろっと変える程度ではないので,報告まで,としておきます.
>
> ではでは
>
>
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20151028/5663c488/attachment.html>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: MyDataTest.zi_
$B7?(B:         application/octet-stream
$B%5%$%:(B:     1847435 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20151028/5663c488/attachment.obj>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: svn_diff_in_trunk_jp.go.aist.rtm.RTC_src_jp_go_aist_rtm_RTC.diff
$B7?(B:         application/octet-stream
$B%5%$%:(B:     4926 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20151028/5663c488/attachment-0001.obj>


More information about the openrtm-users mailing list