2017-03-09 9 views
4

MarkLogicのXQueryの評価呼び出しで、文字列のリストを返します。私は結果を処理するために以下のコードを使用します。 Jsonドキュメントのリストを返す別の呼び出しがありますが、EvalResultにJsonDocumentドキュメントを渡す方法がわかりません。 Json Documentsを処理するために以下のコードを変更するにはどうすればよいですか?Java処理Mark LogicのevalレスポンスがJSONドキュメントを提供しています

public static ArrayList<String> getStringList(DatabaseClient client, String query) 
    { 
     ArrayList<String> strings = new ArrayList<String>(); 
     ServerEvaluationCall eval = client.newServerEval(); 
     EvalResultIterator eri = eval.xquery(query).eval(); 
     while (eri.hasNext()) 
     { 
     EvalResult er = eri.next(); 
     String s = er.getString(); 
     strings.add(s); 
     } 
     return strings; 
    } 

答えて

2

まず、私はそれがセキュリティホールを開くこととして、あなたは最後の手段としてのみevalを使用することをお勧めしてみましょう。サーバーから実行されるコードをクライアントから送信しないと、攻撃は不可能です。最初にすぐに使用できる機能を使用してください。十分でない場合は、evalを使用する代わりにresource extensionと書くことを検討してください。 2つの例は、ResourceExtensionJavascriptResourceExtensionです。

しかし、あなたの質問に答える、この変更するには:

 JacksonHandle handle = er.get(new JacksonHandle()); 
    JsonNode json = handle.get(); 

またはこのショートカット:これまで

 String s = er.getString(); 

完全例えば

 JsonNode json = er.getAs(JsonNode.class); 

を、MyArrayというの取り扱いを参照してくださいmyObject EvalTest.evalAndInvokeXQuery(もちろん、runAndTestXQuery)とevaltest.xqy

これらのジャクソンのハンドルは、ドキュメントの読み取り、検索、評価からJSON結果を取得しても、同じように機能します。 ioのショートカットについては、hereを参照してください。 Jacksonのサンプルコードについては、JacksonHandleExample,JacksonHandleTest,JacksonStreamTest、およびJacksonDatabindTestを参照してください。

+0

ありがとうございます - 私はそれを試みます。 –

+0

はい、うまくいきました! FYI - 私はとても近かった - 私が試みたことは(他のものの中でも)er.getAs(JacksonHandle.class)でしたが、それはただ例外を与えました。 –

関連する問題