osgi blueprint如何在bundle中读取资源文件

时间:2013-05-06 15:08:16

标签: osgi apache-karaf osgi-bundle blueprint-osgi

我使用osgi和blueprint,我搜索如何读取我的包中的文件? 如 : mybundle

  • file.json
  • OSGI-INF /蓝图/ blueprint.xml
  • WEB-INF
  • *

我想在myservice中读取file.json。

1 个答案:

答案 0 :(得分:9)

要做到这一点,简单的方法是在你的bean中注入bundlecontext

<强> blueprint.xml

<bean id="plugin" class="com.timactive.MyBean" init-method="start">
    <property name="bcontext" ref="blueprintBundleContext"></property>
 </bean>

可能的参考:

<强> blueprintBundle 提供bundle的Bundle对象。

<强> blueprintBundleContext 提供bundle的BundleContext对象。

<强> blueprintContainer 为bundle提供BlueprintContainer对象。

<强> blueprintConverter 为bundle提供Converter对象,该对象提供对Blueprint Container类型转换工具的访问。类型转换有更多信息。 源:http://www.ibm.com/developerworks/opensource/library/os-osgiblueprint/

在你的班上:

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext
public class MyBean  {

    public BundleContext bcontext;
    public boolean start(){
    try {
    Bundle bundle = bcontext.getBundle();
    InputStream is = bundle.getEntry("/file.json").openStream();
    String jsondb =  readFile(is);

    } catch (IOException e) {
                LOG.error("The file treefield.json not found", e);
                return(false);
            }

        }

        return(true);
    }

    private String readFile(InputStream is ) throws IOException {
        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
        return s.hasNext() ? s.next() : "";
   }
   public void setBcontext(BundleContext bcontext) {
    this.bcontext = bcontext;
}