1

Jackson と同様に、値が数値、文字列、ブール値、オブジェクト (マップ) または配列 (リスト) である Map<String,Object> の JSON 構造に似た JavaScript 呼び出しの結果を取得しようとしています。値をマップに変換する場合。

Value.as(Map.class) 呼び出しを使用する場合、 Map の値がこれらのルールに従うことを期待します

未加工の Map.class または Object コンポーネント型が使用されている場合、リストの戻り値の型は Object ターゲット型マッピング規則に再帰的に従います。

ドキュメントのさらに下 (オブジェクト マッピングのルール 8)

値に配列要素があり、配列サイズが Integer.MAX_VALUE 以下の場合、結果の値は List を実装します。

ただし、このテストは失敗します

public class TestGraalMap {
    static String JS_CODE = "(function myFun(){ return { listProperty: ['listValue']};})";

    @Test
    public void testList() {
        try (Context context = Context.create()) {
            Value value = context.eval("js", JS_CODE);
            Value result = value.execute();
            Map<String,Object> resultMap = result.as(Map.class);
            assertThat(resultMap).hasEntrySatisfying("listProperty", testArray -> {
                assertThat(testArray).asList().containsExactly("listValue");
            });
        }
    }
}

次のエラーで。

 Expecting:
  <{}>
to be an instance of:
  <java.util.List>
but was instance of:
  <com.oracle.truffle.polyglot.PolyglotMap>

私は何が欠けていますか?

4

1 に答える 1