2016-08-15 3 views
1

Bloomberg API를 사용하여 Bloomberg로부터 데이터를 요청하는 코드가 있습니다. 필요한 외부 JAR을 수정하고 새 JDK (JDK 1.8)를 설치 한 후 아무런 문제없이 실행되었습니다. 그러나 블룸버그에서 증권을 요청하고자하는 회사 ID를 편집 한 후 다시 실행했을 때 다음 예외가 표시되었습니다.Bloomberg 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

난 이미 그 이유를 알아 냈어. (I는 UUID를 교체, SN, SID, 보안 목적 X 년대와 NID)

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

처음보고 된 PC는 코드가 성공적으로 hasn 실행 위치를하는 동안 문제가 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); 

출력 ...

물 팔월 28 동부 표준시 16시 20분 39초

2,013 2016년 8월 28일 2013년 8월 28일

수요일 8월 28일 16시 20분 39초 EST 2016

서식의 기본 날짜 값이 변경되지 않았습니다. 이것이 DateFormatters의 목적입니다.

날짜에 tostring을 수행 한 다음 포맷터를 사용하십시오. 희망이 도움이됩니다. 그것이 내가 메시지가

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이 있는지 확인하려고 추가 된 Element securityDataArray = msg.getElement("securityData");

에 실패하는 이유

+0

다음을 시도했습니다. 'String available_date = dateFormat.format (new java.util.Date(). toString()); 하지만 java.lang.IllegalArgumentException을 제공합니다. format() 메소드는 문자열이 아닌 Date 객체에서만 작동합니다. 또한 필자는 두 PC 모두에서 날짜를 인쇄 해 보았습니다. 즉 'new java.util.Date()'는 _Tue를 제공합니다. Aug 16 09:44:44 SGT 2016_ 'dateFormat.format (new java.util.Date());'는 두 PC 모두에서 _20160816_ 을 제공합니다. – Krish

관련 문제