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)