Ibm mobilefirst Worklight适配器,Java类路径

Ibm mobilefirst Worklight适配器,Java类路径,ibm-mobilefirst,worklight-adapters,Ibm Mobilefirst,Worklight Adapters,简单的问题是:如何使Java资源包可用于从Worklight适配器访问的Java JAR中的代码?我认为这相当于:Worklight适配器下Java使用的类路径是什么 原因:我们使用与特定企业服务通信的第三方Java库,它有自己的配置机制来确定服务的位置,该机制使用资源包 我们将库jar放在server/lib文件夹中,并成功地从适配器调用库代码: manager = com.third.party.manager.getInstance(); // manager is cor

简单的问题是:如何使Java资源包可用于从Worklight适配器访问的Java JAR中的代码?我认为这相当于:Worklight适配器下Java使用的类路径是什么

原因:我们使用与特定企业服务通信的第三方Java库,它有自己的配置机制来确定服务的位置,该机制使用资源包

我们将库jar放在server/lib文件夹中,并成功地从适配器调用库代码:

    manager = com.third.party.manager.getInstance();
    // manager is correctly obtained
    token = manager.talkToServer();
    // this fails with an error indicating that the server location is unknown
我们看到第三方代码正试图使用这种模式,特别是getBundle()的3个变量如下所示:

java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("ThirdParty");
Enumeration<String> enumeration = bundle.getKeys();

while (enumeration.hasMoreElements()){
 String str = enumeration.nextElement();
 System.out.println("property " + str);
     //etc
作为测试,创建了一个包含上述代码的小Java应用程序,并将资源JAR添加到该应用程序的类路径中;我们按预期装载的包裹

然后,我将Java转换为适配器代码:

var bundle = java.util.ResourceBundle.getBundle("ThirdParty");

var enumeration = bundle.getKeys();

while (enumeration.hasMoreElements())
{
  var str = enumeration.nextElement();  
  var val = bundle.getString(str);    
}
将我的属性JAR文件添加到server/lib,并得到一个异常,告诉我无法找到捆绑包


关于更好的类路径的建议?

我刚刚尝试过,一切都很好。我尝试重新创建问题的步骤:

  • 使用WL Studio 6.1创建新的WL项目
  • 添加了带有单个name=anton属性的props.properties文件
  • 在Eclipse中右键单击它,导出->Java->JAR文件。我选中的唯一复选框是导出生成的类文件和资源。我已将文件命名为resources.jar
  • 删除了props.properties并将resources.jar复制到服务器/lib文件夹
  • 创建了适配器,添加了以下过程

    function test(){
        return {
             data: com.anton.PropGetter.getProp("name")
        };
    }
    
  • 使用以下代码在com.anton包下创建了PropGetter.java

    package com.anton;
    
    import java.util.ResourceBundle;
    
    public class PropGetter {
        public static String getProp(String propName){
            ResourceBundle bundle = ResourceBundle.getBundle("props");
            return propName + " :: " + bundle.getString(propName);
        }
    }
    
  • 测试适配器程序,获得以下输出:

    {
       "data": "name :: anton",
       "isSuccessful": true
    }
    

  • 谢谢,这确实有效。它与我最初的例子略有不同,它的等效物是包装在一个罐子里的,但我也这样做了,它仍然可以正常工作。第三方案例彻底失败,我从javascript直接调用ResourceBundle也是如此。我会继续挖掘,至少这个答案证实了资源加载的一般情况与预期的一样。
    {
       "data": "name :: anton",
       "isSuccessful": true
    }