ライブラリで Java リフレクション呼び出しを使用しているため、Web サーバーからの jar を使用してアプレットで AspectJ loadtime-weaving を使用しようとしています。ロードする必要があるクラスの名前は、パラメーターとして渡されます。したがって、コンパイルタイムウィービングは使用できません。
これが私のアプレット「MyApplet」のコードの一部です:
URLClassLoader appletClassLoader = (URLClassLoader)
RemoteConfigurationApplet.class.getClassLoader();
URL[] urlList = appletClassLoader.getURLs();
URL aspectJar = null;
try {
aspectJar = new URL("https://myserver:8443/MyWebApp/applet/MyApplet.jar/");
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
WeavingURLClassLoader weavingClassLoader = new WeavingURLClassLoader(urlList,
new URL[]{ aspectJar }, Thread.currentThread().getContextClassLoader());
ただし、常に例外が発生します。
org.aspectj.bridge.AbortException: bad aspect library: "/MyWebApp/applet/MyApplet.jar"
「addAspectLibrary」でのファイルオブジェクトの使用が問題の原因であると思われます。
private void addAspectLibrary(String aspectLibraryName) {
File aspectLibrary = new File(aspectLibraryName);
if (aspectLibrary.isDirectory() || (FileUtil.isZipFile(aspectLibrary))) {
try {
info("adding aspect library: '" + aspectLibrary + "'");
weaver.addLibraryJarFile(aspectLibrary);
} catch (IOException ex) {
error("exception adding aspect library: '" + ex + "'");
}
} else {
error("bad aspect library: '" + aspectLibrary + "'");
}
}
URL を切り取ってから、ハードディスクでこのファイルが見つからない場所を探します。それを実行するための解決策はありますか?