[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