Java 遇到彭博API NotFoundException
我有一个使用彭博API从彭博社请求数据的代码。 在我修复了所需的外部jar并安装了新的JDK(jdk1.8)之后,它运行起来没有任何问题。然而,当我编辑了公司ID后再次运行它时,我想从彭博社请求其证券,它显示了以下异常Java 遇到彭博API NotFoundException,java,bloomberg,Java,Bloomberg,我有一个使用彭博API从彭博社请求数据的代码。 在我修复了所需的外部jar并安装了新的JDK(jdk1.8)之后,它运行起来没有任何问题。然而,当我编辑了公司ID后再次运行它时,我想从彭博社请求其证券,它显示了以下异常 Exception in thread "main" com.bloomberglp.blpapi.NotFoundException: securityData not found in: HistoricalDataResponse at com.bloomb
Exception in thread "main" com.bloomberglp.blpapi.NotFoundException: securityData not found in: HistoricalDataResponse
at com.bloomberglp.blpapi.impl.aL.e(ElementImpl.java:3070)
at com.bloomberglp.blpapi.impl.aL.d(ElementImpl.java:3045)
at com.bloomberglp.blpapi.impl.aL.getElement(ElementImpl.java:558)
at com.bloomberglp.blpapi.impl.h.getElement(MessageImpl.java:164)
at bbg_upload.test1.processHistoricalStockDataResponse(test1.java:252)
at bbg_upload.test1.handleResponseEvent(test1.java:221)
at bbg_upload.test1.doo(test1.java:206)
at bbg_upload.test1.main(test1.java:117)
我对彭博API还不是很熟悉。然而,当我试图在另一台PC上运行相同的代码时,它运行时没有显示上述异常
第252行的代码如下:,
(特别是“securityData”所在的行)
我一直在用谷歌搜索为什么会出现这个错误。我认为它不在Bloomberg API的实现中,因为它在另一台PC上成功运行。它可能与环境变量有关?根据在任何一台机器上设置的区域设置,这行代码的日期输出:
字符串可用\u date=dateFormat.format(new java.util.date())代码>对于您的机器和您尝试的第二台机器可能不一样,这就是为什么我认为它在一台机器上工作,而不是在另一台机器上工作
Date
是自Unix纪元(1970年1月1日00:00:00 UTC)以来毫秒数的容器
t没有格式的概念
例如
Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);
输出
美国东部时间8月28日星期三16:20:39
2013-08-28-2016 2013-08-28
8月28日星期三16:20:39
美国东部时间2016
所有格式均未更改基础日期值。这就是DateFormatters的用途
尝试在日期上执行tostring,然后在该日期上使用格式化程序。希望这有帮助。我已经在元素securityDataArray=msg.getElement(“securityData”)中找到了它失败的原因代码>
我加了一句,试图检查邮件是否有响应错误
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String available_date = dateFormat.format(new java.util.Date());
if(msg.hasElement("responseError")){
System.out.println("responseError encountered! " + msg.getElement("responseError").getElement("message"));
}
Element securityDataArray = msg.getElement("securityData");
String ticker = securityDataArray.getElementAsString("security");
String line = "";
String value = "";
Element fieldDataArray = securityDataArray.getElement("fieldData");
然后,它显示以下内容。
(为了安全起见,我将uuid、SN、sid、nid替换为x)
问题电脑上的彭博终端已经达到了每月的上限,而我第一次报告代码在哪里成功运行的电脑还没有达到。(它没有遇到responseError)我尝试了以下可用字符串\u date=dateFormat.format(new java.util.date().toString())
但它给了我java.lang.IllegalArgumentException
format()方法,它只对日期对象而不是字符串进行操作。另外,我试着在两台电脑上打印日期,结果显示的格式都一样。i、 e.new java.util.Date()
2016年8月16日星期二09:44:44 SGTdateFormat.format(new java.util.Date())代码>显示两台电脑中的20160816
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String available_date = dateFormat.format(new java.util.Date());
if(msg.hasElement("responseError")){
System.out.println("responseError encountered! " + msg.getElement("responseError").getElement("message"));
}
Element securityDataArray = msg.getElement("securityData");
String ticker = securityDataArray.getElementAsString("security");
String line = "";
String value = "";
Element fieldDataArray = securityDataArray.getElement("fieldData");
responseError encountered! message = uuid: xxxxxxxx, SN: xxxxxx, sid: xxxxxxx Monthly limit reached. [nid:xxx]