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側のみで対応できれば良いと思っています.
コードをちょろっと変える程度ではないので,報告まで,としておきます.
ではでは
モーションエディタ/シミュレータ
動力学シミュレータ
統合開発プラットフォーム
産総研が提供するRTC集
東京オープンソースロボティクス協会
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
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側のみで対応できれば良いと思っています.
コードをちょろっと変える程度ではないので,報告まで,としておきます.
ではでは