같은 OBJ 특성을 얻을 수있다, 나는 어댑터에 자바 스크립트 객체를 통과 할 수 있기를 원하고 그것이 자바 스크립트 객체를 업데이트 반환해야합니다. 두 가지 방법이있는 것처럼 보입니다. 첫 번째는 며칠 전에 직렬화 및 자바 스크립트 개체의 unserializing 함께 무엇을 대답했다. 다른 하나는 ScriptableObject 클래스를 사용하고 있습니다. 내가 원하는 것은 javascript 객체를 전달하기 위해 설명 된대로 어댑터 프레임 워크를 사용하는 것이 었습니다. 이렇게하면 Adapter JS-impl 코드가 다음과 같이 표시됩니다.
function add2(a) {
return {
result: com.ibm.us.roberso.Calculator.add2(a)
};
위 어댑터를 호출하는 클라이언트 응용 프로그램의 JavaScript 코드입니다. 어댑터 프레임 워크에 매개 변수로 javascript 객체를 전달하는 테스트하는 함수가 있습니다. 아래 invocationData.parameters 참조 : runAdapterCode2 (에서
function runAdapterCode2() {
// x+y=z
var jsonObject = { "x": 1, "y" : 2, "z" : "?" };
var invocationData = {
adapter : "CalculatorAdapter",
procedure : 'add2',
parameters : [jsonObject]
};
var options = {
onSuccess : success2,
onFailure : failure,
invocationContext : { 'action' : 'add2 test' }
};
WL.Client.invokeProcedure(invocationData, options);
}
)을, 당신은 어댑터에 모든 매개 변수를 전달하는 것처럼 자바 스크립트 객체가 전달됩니다. 작업 표시 줄이 Java 메소드를 실행하려고하면 Object 또는 ScriptableObject (NativeObject 아님)를 가져 오는 메소드 서명을 찾습니다. 자바 리플렉션 API를 사용하여 전달되는 클래스와 계층 구조를 확인했습니다. ScriptableObject에서 정적 메서드를 사용하면 개체의 값을 쿼리하고 수정할 수 있습니다. 메서드가 끝나면 Scriptable 객체를 반환 할 수 있습니다. 이렇게하면 invocationResults.result 필드에 자바 스크립트 객체가 다시 생깁니다. 아래는 이것을 지원하는 자바 코드입니다. 어떤 객체 유형이 실제로 전달되는지에 대한 조사의 일부로 코드의 상당 부분이 존재한다는 점에 유의하십시오. 메소드의 맨 아래에는 javascript 객체로 작업하는 데 필요한 몇 줄의 코드가 있습니다.
@SuppressWarnings({ "unused", "rawtypes" })
public static ScriptableObject add2(ScriptableObject obj) {
// code to determine object class being passed in and its heirarchy
String result = "";
Class objClass = obj.getClass();
result = "objClass = " + objClass.getName() + "\r\n";
result += "implements=";
Class[] interfaces = objClass.getInterfaces();
for (Class classInterface : interfaces) {
result += " " + classInterface.getName() ;
}
result += "\r\nsuperclasses=";
Class superClass = objClass.getSuperclass();
while(superClass != null) {
result += " " + superClass.getName();
superClass = superClass.getSuperclass();
}
// actual code working with the javascript object
String a = (String) ScriptableObject.getProperty((ScriptableObject)obj, "z");
ScriptableObject.putProperty((ScriptableObject)obj, "z", new Long(3));
return obj;
}
자바 스크립트 개체의 경우 숫자 값은 Long이며 int가 아닙니다. 문자열은 여전히 문자열입니다.
요약 지금까지 찾은 자바 스크립트 개체를 전달하는 데는 두 가지 방법이 있습니다.
- 문자열을 자바 스크립트로 변환하고 문자열을 java로 전달한 다음 JSONObject로 다시 구성합니다.
- 자바 스크립트 객체를 전달하고 ScriptableObject 클래스를 사용하여 자바 측에서 조작합니다.
그냥 문자열로 전달하고 자바에서 사용할 수있는 무수히 많은 JSON 라이브러리를 사용하면됩니다. https://github.com/douglascrockford/JSON-java/blob/master/JSONObject.java – Zarathuztra