Bloomberg API 遇到 NotFoundException
Bloomberg API NotFoundException encountered
我有一个代码可以使用 Bloomberg API 从 Bloomberg 请求数据。
在我修复了所需的外部 JAR 并安装了新的 JDK (JDK 1.8) 之后,它 运行 没有任何问题。但是,当我编辑了我想从彭博社请求其证券的公司 ID 后再次 运行 时,它显示了以下异常。
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" 所在的行)
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String available_date = dateFormat.format(new java.util.Date());
Element securityDataArray = msg.getElement("securityData");
String ticker = securityDataArray.getElementAsString("security");
String line = "";
String value = "";
Element fieldDataArray = securityDataArray.getElement("fieldData");
我一直在谷歌搜索为什么会收到此错误。我认为它不在 Bloomberg API 的实施中,因为它 运行 在另一台 PC 上成功。可能跟环境变量有关?
根据两台机器上设置的语言环境,这行代码输出的日期:String available_date = dateFormat.format(new java.util.Date());
可能与您的机器和您尝试的第二台机器不同,这就是我认为它的原因在一台机器上工作,在另一台机器上工作。
Date
是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数容器。
没有格式的概念。
例如...
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);
输出...
Wed Aug 28 16:20:39 EST
2013 08-28-2016 2013-08-28
Wed Aug 28 16:20:39
EST 2016
None 格式更改了基础日期值。这是 DateFormatters
的目的
尝试在日期上做一个 tostring,然后在上面使用格式化程序。希望这有帮助。
我已经在Element securityDataArray = msg.getElement("securityData");
中找到失败的原因了
我添加了尝试检查消息是否有 responseError
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");
然后,显示如下。
(为了安全起见,我用 x 替换了 uuid、SN、sid、nid)
responseError encountered! message = uuid: xxxxxxxx, SN: xxxxxx, sid: xxxxxxx Monthly limit reached. [nid:xxx]
有问题的 PC 上的 bloomberg 终端已达到每月限制,而我首先报告代码成功运行的 PC 尚未达到。 (不会遇到responseError)
我有一个代码可以使用 Bloomberg API 从 Bloomberg 请求数据。 在我修复了所需的外部 JAR 并安装了新的 JDK (JDK 1.8) 之后,它 运行 没有任何问题。但是,当我编辑了我想从彭博社请求其证券的公司 ID 后再次 运行 时,它显示了以下异常。
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" 所在的行)
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String available_date = dateFormat.format(new java.util.Date());
Element securityDataArray = msg.getElement("securityData");
String ticker = securityDataArray.getElementAsString("security");
String line = "";
String value = "";
Element fieldDataArray = securityDataArray.getElement("fieldData");
我一直在谷歌搜索为什么会收到此错误。我认为它不在 Bloomberg API 的实施中,因为它 运行 在另一台 PC 上成功。可能跟环境变量有关?
根据两台机器上设置的语言环境,这行代码输出的日期:String available_date = dateFormat.format(new java.util.Date());
可能与您的机器和您尝试的第二台机器不同,这就是我认为它的原因在一台机器上工作,在另一台机器上工作。
Date
是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数容器。
没有格式的概念。
例如...
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);
输出...
Wed Aug 28 16:20:39 EST
2013 08-28-2016 2013-08-28
Wed Aug 28 16:20:39 EST 2016
None 格式更改了基础日期值。这是 DateFormatters
的目的尝试在日期上做一个 tostring,然后在上面使用格式化程序。希望这有帮助。
我已经在Element securityDataArray = msg.getElement("securityData");
我添加了尝试检查消息是否有 responseError
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");
然后,显示如下。 (为了安全起见,我用 x 替换了 uuid、SN、sid、nid)
responseError encountered! message = uuid: xxxxxxxx, SN: xxxxxx, sid: xxxxxxx Monthly limit reached. [nid:xxx]
有问题的 PC 上的 bloomberg 终端已达到每月限制,而我首先报告代码成功运行的 PC 尚未达到。 (不会遇到responseError)