Eclipse Asterisk Java无法加载属性文件

Eclipse Asterisk Java无法加载属性文件,eclipse,properties,asterisk-java,fastagi,Eclipse,Properties,Asterisk Java,Fastagi,我正在开发一个非常简单的基于Asterisk Java IVR的程序,它向调用者打招呼,从web服务中检索一些信息,向调用者读取检索到的数据,最后挂断电话 我遵循了哪些步骤: 添加了在extensions_custom.conf上输入的以下行: 扩展=>1000,n,Agi(agi://192.168.0.8/ivryobi.agi) 在C:\Project\target\classes中创建了以下文件结构\ Runnable.java IvrYobi.java Runnable.class I

我正在开发一个非常简单的基于Asterisk Java IVR的程序,它向调用者打招呼,从web服务中检索一些信息,向调用者读取检索到的数据,最后挂断电话

我遵循了哪些步骤:

添加了在extensions_custom.conf上输入的以下行:

扩展=>1000,n,Agi(agi://192.168.0.8/ivryobi.agi)

在C:\Project\target\classes中创建了以下文件结构\

Runnable.java
IvrYobi.java
Runnable.class
IvrYobi.class
fastagi-mapping.properties
在fastagi-mapping.properties中,我有:

ivryobi.agi=main.ivryobi

IvrYoby的内容包括:

public class IvrYobi extends BaseAgiScript {

    public void service(AgiRequest request, AgiChannel channel) throws AgiException {
    String callerMsisdn = request.getCallerIdNumber();
}
正常工作时

在控制台中运行以下命令

C:\Project\target\classes>java-cp asterisk-java.jar;commons-lang3-3.10.jar;commons-logging-1.2.jar;httpclient-4.5.12.jar;httpcore-4.4.13.jar;mysql-connector-java-8.0.20.jar;。 org.asteriskjava.fastagi.DefaultAgiServer

正如您在下面的控制台输出中所看到的,它可以完美地工作

2020年6月30日下午6:09:04 org.asteriskjava.fastagi.DefaultAgiServer 启动信息:正在收听*:4573。2020年6月30日下午6:09:09 org.asteriskjava.fastagi.AbstractAgiServer getPool INFORMACIËN:线程 游泳池开始了。2020年6月30日下午6:09:09 org.asteriskjava.fastagi.ResourceBundleMappingStrategy loadResourceBundle INFORMACIËN:将“ivryobi.agi”的映射添加到 第四类

当问题出现时

当我运行完全相同的代码时,我使用Runnable.java代替控制台

以下是Runnable.java的内容:

DefaultAgiServer server = new DefaultAgiServer();

    public MyRunnable() {

        ClassNameMappingStrategy strategy = new ClassNameMappingStrategy(false);

        server.setMappingStrategy(strategy);

    }

    public void run() {

        try {

            server.startup();

        } catch (IllegalStateException | IOException e) {

            e.printStackTrace();

            server.shutdown();

        }

    }

    public void stop() {
        server.shutdown();
    }
我们可以在Eclipse的控制台上观察到以下错误:

0[main]调试org.asteriskjava.fastagi.DefaultAgiServer-使用 渠道工厂 org.asteriskjava.fastagi.internal.DefaultAgiChannelFactory 9[main] INFO org.asteriskjava.fastagi.DefaultAgiServer-正在收听*:4573。 4806[main]DEBUG org.asteriskjava.fastagi.DefaultAgiServer- 接收到来自/192.168.0.254 4810[main]INFO的连接 org.asteriskjava.fastagi.DefaultAgiServer-线程池已启动。4849 [AJ DaemonPool-1.1]调试 org.asteriskjava.fastagi.ClassNameMappingStrategy-无法创建 找不到ivryobi.agi:类类型的AgiScript实例,请确保 类存在并可在类路径4849[AJ]上使用 DaemonPool-1.1]错误 org.asteriskjava.fastagi.internal.fastagiconhandler-否 为URL'配置的脚本agi://192.168.0.8/ivryobi.agi"(文字) ‘ivryobi.agi’)

尝试进行故障排除

  • 我已经确定fastagi-mapping.properties在类路径上
  • 尝试了不同的名称和案例
  • 在java执行路径上复制了.properties文件
  • 将项目编译为可执行jar
  • 在eclipse中添加/删除了包(例如:com.test.IvrYobi),并对.properties文件应用了更改
  • 我检查了asterisk-java-3.5.0.jar中的代码,看起来如果没有找到配置文件,它将继续运行,而不会抛出任何警告。因为是打包在罐子里的,所以我无法修改代码

请问,你还有什么其他想法我可以试试吗?

最后我自己找到了解决办法

我不得不使用项目的源代码重新编译asterisk-java.jar

在DefaultAgiServer.java上更改行:

resourceBundle = ResourceBundle.getBundle(configResourceBundleName);
与:

在锁销上,更换锁销

return;
有一个更合适的响应,这样您就可以知道资源是否无法加载

logger.info("resourceBundle cargado ok!");                 
            
        }
        catch (MissingResourceException | IOException e)
        {
            logger.error("No existe el recurso invocado: " + e.getMessage());
            return;
        }
logger.info("resourceBundle cargado ok!");                 
            
        }
        catch (MissingResourceException | IOException e)
        {
            logger.error("No existe el recurso invocado: " + e.getMessage());
            return;
        }