2012-02-09 19 views
3

フェリックスに春の戦争バンドルを使用することはできますか?グラスフィッシュでfelixと春3.0.5を使用する3.1春+フェリックス戦争= FileNotFoundException

フェリックスでOSGI war bundle内にcomponent-scanタグを入力しようとしましたが、以下の例外が発生しています。

私はsimilar bugがEquinoxのために解決されたことを知りました。フェリックスはどうですか?この問題の回避策または解決策はありますか?

PS:私は、web.xmlのcontextConfigLocationに*のパスを定義する場合と同じ例外は、例えば、スローされます。

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:META-INF/spring/*.xml</param-value> 
</context-param> 

例外:

2012-02-08 18:30:23,194 [pool-28-thread-1] (PathMatchingResourcePatternResolver.java:532) WARN - Cannot search for matching files underneath URL [bundle://275.0:2/examples/services/] because it does not correspond to a directory in the file system 
java.io.FileNotFoundException: URL [bundle://275.0:2/examples/services/] cannot be resolved to absolute file path because it does not reside in the file system: bundle://275.0:2/examples/services/ 
at org.springframework.util.ResourceUtils.getFile(Res ourceUtils.java:204) 
at org.springframework.core.io.AbstractFileResolvingR esource.getFile(AbstractFileResolvingResource.java :52) 
at org.springframework.core.io.UrlResource.getFile(Ur lResource.java:168) 
at org.springframework.core.io.support.PathMatchingRe sourcePatternResolver.doFindPathMatchingFileResour ces(PathMatchingResourcePatternResolver.java:528) 
... 
2012-02-08 18:30:23,194 [pool-28-thread-1] (PathMatchingResourcePatternResolver.java:353) DEBUG - Resolved location pattern [classpath*:examples/services/**/*.class] to resources [] 

applicationContext.xmlを:

​​

ありがとうございます

答えて

1

解決するための2つの回避策があります。それでもフェリックスのための本当の解決策を聞いてうれしいです。

回避策は以下のとおりです。

  1. 使用春分の代わりに、フェリックス:)
  2. (醜い1)一時フォルダを作成し、その中にすべてのクラスを抽出します。クラスorg.eclipse.core.runtime.FileLocator機能付き

パブリック静的URLの解決(URLのURL)を作成することにIOException

をスローしために、このフォルダからコンテンツのURLを返します例:

String path = url.getPath(); 
    String str; 
    if(path.contains("com")){ 
     str = path.substring(path.indexOf("com")); 
    } 
    return new URL("file:\\c:\\temp_classes\\"+str); 
0

あなたがフェリックスに身を任せていれば、もう少し洗練された解決策です。

package org.eclipse.core.runtime; 

import java.net.URL; 

import org.apache.felix.framework.BundleRevisionImpl; 
import org.osgi.framework.Bundle; 
import org.osgi.framework.FrameworkUtil; 

public class FileLocator { 
    private FileLocator() {} 

    public static URL resolve(URL url) { 
     if(url == null) { 
      return null; 
     } 
     Bundle bundle = FrameworkUtil.getBundle(FileLocator.class).getBundleContext().getBundle(); 
     BundleRevisionImpl bundleRevision = bundle.adapt(BundleRevisionImpl.class); 
     return bundleRevision.getLocalURL(url.getPort(), url.getPath()); 
    } 
} 

これは、次のパラメータを指定してフェリックス起動時にフレームワークをエクスポートすることが必要です:

-Dorg.osgi.framework.system.packages.extra=org.apache.felix.framework 
関連する問題