2013-08-25 4 views
0

매개 변수가있는 http get 요청을 보내는 java (JDK6) 코드가 있습니다. 나는에 결합하여 반환 된 기능을 실행하려고 시도하고문자열로 처리 된 javascript 함수에서 json을 가져 오는 것이 http 응답에 반환되었습니다.

function JavascriptFunction() { return { "Root" : [ { ... ] }; } 

: 내가 돌아올한다는 응답은 그 안에 다음과 같은 요청에 제공되는 쿼리 매개 변수에 대한 응답을 포함하는 JSON 트리를 포함하는 자바 스크립트 함수입니다 java에서 ScriptEngine API를 사용하여 JSON 노드를 검색하십시오. 반환되는 "것은"유형 sun.org.mozilla.javascript.internal.NativeObject의 때문에

String response = EntityUtils.toString(httpResponse.getEntity()); 
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByExtension("js"); 
scriptEngine.eval(response); 

String hopeThisIsJson = (String)((Invocable)scriptEngine).invokeFunction("JavascriptFunction"); 

나는 ClassCastException를 얻을.
"JavascriptFunction"메서드에서 원래 반환 된 json 트리 인 invokeFunction 메서드에서 반환 된이 개체를 궁극적으로 변환하는 방법을 알아 내려고합니다.

+0

여기에서 응답 값을 확인 했습니까? String response = EntityUtils.toString (httpResponse.getEntity()); –

+0

값을 확인했습니다. 그것은 문자열 화 된 자바 스크립트 함수였습니다. – user2714310

답변

0

JavaScript 기능이 JSON 인코딩되지 않은 객체를 반환하고 있습니다. 이것을 시도 할 수 있습니다 :

String json = (String) scriptEngine.eval("JSON.stringify(JavascriptFunction());"); 

JavaScript 코드에는 "JSON 트리"와 같은 것이 없습니다. 이것은 JavaScript 객체 리터럴 표현식입니다.이 표현식은 단순한 JavaScript 객체 일뿐입니다.

+0

나는 당신이 제안한 것을 시도했다. javax.script.ScriptException ... ReferenceError : "JSON"이 정의되지 않았습니다. Rhino 엔진은 "JSON"이있는 Javascript 버전을 지원하지 않을 수 있습니다. 이 경우 버전을 변경할 수 없다고 가정해야합니다. 이것을 사용하는 모든 대안? – user2714310

+1

@ user2714310 예, 적어도 Rhino 1.7 릴리스가 필요합니다. 버전을 변경할 수 없다면 json.org에서 구할 수있는 JSON 툴킷을 사용해야합니다. – Pointy

+0

정보 주셔서 감사합니다. 나는 그것을 들여다 볼 것이다. – user2714310