2

Reflections 0.9.9-RC1 jar を使用して Weblogic 10.3.5 に EAR アプリケーションをデプロイする際に問題があります。

デフォルトのクラスローダー (weblogic.utils.classloaders.ChangeAwareClassLoader@396e8d0 finder: weblogic.utils.classloaders.CodeGenClassFinder@5bcfadd) を使用すると、次のエラーが発生します。

ExecuteThread: 2 for queue: weblogic.kernel.Default (self-tuning)] - could not create Dir using jarFile from url file:/D:/Servers/Oracle10.3.5/patch_wls1035/profiles/default/sys_manifest_classpath/weblogic_patch.jar. skipping.
   java.lang.NullPointerException: null
   at java.util.zip.ZipFile.<init>(ZipFile.java:108) ~[na:1.6.0_24]
   at java.util.jar.JarFile.<init>(JarFile.java:135) ~[na:1.6.0_24]
   at java.util.jar.JarFile.<init>(JarFile.java:99) ~[na:1.6.0_24]
   at org.reflections.vfs.Vfs$DefaultUrlTypes$1.createDir(Vfs.java:207) ~[reflections-0.9.9-RC1.jar:na]
   at org.reflections.vfs.Vfs.fromURL(Vfs.java:99) [reflections-0.9.9-RC1.jar:na]
   at org.reflections.vfs.Vfs.fromURL(Vfs.java:91) [reflections-0.9.9-RC1.jar:na]
   at org.reflections.Reflections.scan(Reflections.java:231) [reflections-0.9.9-RC1.jar:na]
   at org.reflections.Reflections.scan(Reflections.java:204) [reflections-0.9.9-RC1.jar:na]
   at org.reflections.Reflections.<init>(Reflections.java:129) [reflections-0.9.9-RC1.jar:na]

ExecuteThread: 2 for queue: weblogic.kernel.Default (self-tuning)] - could not create Vfs.Dir from url. ignoring the exception and continuing
   org.reflections.ReflectionsException: Could not open url connection
   at org.reflections.vfs.JarInputDir$1$1.<init>(JarInputDir.java:36) ~[reflections-0.9.9-RC1.jar:na]
   at org.reflections.vfs.JarInputDir$1.iterator(JarInputDir.java:32) ~[reflections-0.9.9-RC1.jar:na]
   at org.reflections.Reflections.scan(Reflections.java:231) ~[reflections-0.9.9-RC1.jar:na]
   at org.reflections.Reflections.scan(Reflections.java:204) ~[reflections-0.9.9-RC1.jar:na]
   at org.reflections.Reflections.<init>(Reflections.java:129) ~[reflections-0.9.9-RC1.jar:na]

そして、これはコード部分です:

List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(Thread.currentThread().getContextClassLoader());

Reflections ref = new Reflections(new ConfigurationBuilder()
                .setScanners(new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner())
                .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
                .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(p))));

私はまた、これからクラスローダーを取得しようとしました:

//classLoadersList.add(ClasspathHelper.contextClassLoader());
//classLoadersList.add(this.getClass().getClassLoader());
//classLoadersList.add(ClasspathHelper.staticClassLoader());

しかし、それらすべてで同じクラスローダーを返します。

ローカルホストでは、指定したディレクトリに jar を配置すると、明らかに機能しますが、デプロイ先のサーバーにはそのオプションがありません。

助言がありますか?

4

2 に答える 2

0

ClasspathHelper.forXXX メソッドの 1 つから正しい URL を取得し、それらの URL が存在し、アクセス可能であることを確認してください。

おそらく weblogic_patch.jar ではなく、アプリケーションの jar をスキャンしたかったでしょう。

于 2014-04-29T09:27:30.970 に答える
0

あなたのコードは大丈夫です、私は同じ問題を抱えています。この問題は、決してスローされない 1 つの内部例外の処理に関連しています...

Reflections に考えられる修正案を 1 つ提出しました。

https://groups.google.com/forum/#!topic/google-code-reflections/EtwuzC_Eesc

于 2014-05-07T13:03:52.153 に答える