2016-08-15 93 views
1

我有一个代码使用彭博API向彭博社索取数据。 在修复了所需的外部JAR并安装了新的JDK(JDK 1.8)之后,它运行没有任何问题。但是,当我编辑了我想向彭博社申请的证券的公司ID后,再次运行它时,显示出以下例外情况。彭博社API遇到的NotFoundException

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"); 

我一直在谷歌上搜索,为什么我得到这个错误。我认为这不是彭博API的实现,因为它可以在另一台PC上成功运行。它可能与环境变量有关?

回答

2

我已经想通了,它之所以在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"); 

然后它,显示如下。 (我换成UUID,SN,SID,与X的安全目的NID)

responseError encountered! message = uuid: xxxxxxxx, SN: xxxxxx, sid: xxxxxxx Monthly limit reached. [nid:xxx] 

有问题的计算机上的彭博终端已达到每月限额,而在这里我首先报道了PC运行这些代码成功不是招还没有。 (它不会遇到responseError)

0

根据在任一机器上设置的区域设置,该行代码输出的日期:String available_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时二十分39秒EST

2013 2016年8月28日2013年8月28日

Wed Aug 28 16:20:39 EST 2016

没有任何格式更改了基础日期值。这是DateFormatters的用途

尝试在日期上做一个tostring,然后使用该格式化程序。希望这可以帮助。

+0

我试着做以下 'String available_date = dateFormat。format(new java.util.Date()。toString());' 但它给了我'java.lang.IllegalArgumentException' format()方法只对Date对象操作而不是字符串。 此外,我试着在两台PC上打印出日期,它给了我相同的格式。即 'new java.util.Date()'given _Tue Aug 16 09:44:44 SGT 2016_ 'dateFormat.format(new java.util.Date());''给出_20160816_ 在两台PC – Krish