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