2016-08-15 89 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