0

おはようございます。ローカルのNeo4jデータベースをセットアップし、Mavenの依存関係のグラフをモデル化したいと思います。Webコンソールを介して次のステートメントを実行すると、すべてが正常に機能します。

start root = node(1)
create unique root -[:ROOT]-> (n{groupId:'fancyStuff',artifactId:'somewhat', version:'1.4'})
return n

(注:rootnodeはデバッグ目的で存在し、後で実際の構造に置き換えられます)したがって、ここでは、空白の量に関係なく、または'を"に置き換えても、すべてが正常に機能します。

私のJavaアプリケーションでは、次の関数があります。

private static URI getOrCreate(Artifact artifact){
        String cypherUri = SERVER_ROOT_URI + "cypher";

        String cypherStatement="{\"query\" : \"start x  = node(1) " +
                "create unique x -[:ROOT]-> (artifact{groupId:\"" + artifact.getGroupID() +
                "\", artifactId:\"" + artifact.getArtifactID() +
                "\", version: \"" + artifact.getVersion() +
                "\"}) return artifact ,\"params\" : {}}";

        WebResource resource = Client.create()
                .resource( cypherUri );
        ClientResponse response = resource.accept( MediaType.APPLICATION_JSON_TYPE )
                .type( MediaType.APPLICATION_JSON_TYPE )
                .entity( cypherStatement )
                .post( ClientResponse.class );

        System.out.println( String.format( "POST to [%s], status code [%d]",
                cypherUri, response.getStatus() ) );

        response.close();
        return response.getLocation();
    }

基本的に私は次のようなjsonファイルを投稿します

{"query" : "start root = node(1) create unique root-[:ROOT]->(artifact{groupId:'{"query" : "start root = node(1) create unique root-[:ROOT]->(artifact{groupId:'lol',artifactId:'somewhat',version:'1.4'}) return artifact","params" : {}}

また、どのホワイトスペースまたは「/」を使用しても、関係の最初の-[:ROOT]->が無効であるというhttp500エラーが発生します。

経由で直接新しいノードを投稿する

final String nodeEntryPointUri = SERVER_ROOT_URI + "node";
WebResource resource = Client.create().resource( nodeEntryPointUri );
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON_TYPE )
         .type( MediaType.APPLICATION_JSON_TYPE )
         .entity( /*some json*/)
         .post(ClientResponse.class);

(免責事項:このバージョンが機能するように、パラメータを適切な場所にできるだけ早く移動します;))

まったく些細なエラーだと思いますが、今は半日以上これを見つめています。私のバリエーションはどれも機能したくありません。誰かが答えを知っていれば素晴らしいでしょう。

ご挨拶、フロリアン・ローム

4

2 に答える 2

0

問題は、無効な JSON があることです。あなたはquery2回繰り返します。星と星の間の部分を削除するとうまくいきますか?

**{"query" : 
    "start root = node(1) 
    create unique root-[:ROOT]->(artifact{groupId:'**
{"query" : "start root = node(1) 
  create unique root-[:ROOT]->(artifact{groupId:'lol',artifactId:'somewhat',version:'1.4'}) 
  return artifact",
 "params" : {}
}
于 2013-03-20T11:23:08.687 に答える
0

わかりました、このステートメントの違いはわかりませんが、これは機能します(上記のコードでもパラメーター分割を試しました):

String cypherUri = SERVER_ROOT_URI + "cypher";        
JSONObject jObject = new JSONObject();
        try {
            Map<String, String> params = new HashMap<String, String>();
            params.put("groupId", artifact.getGroupID());
            params.put("artifactId", artifact.getArtifactID());
            params.put("version", artifact.getVersion());
            String query = "start x  = node(1) create unique x-[:ROOT]->(n{groupId:{groupId},artifactId:{artifactId},version:{version} }) return n";
            jObject.put("query", query);
            jObject.put("params", params);
        } catch (Exception e) {
            e.printStackTrace();
        }

        WebResource resource = Client.create()
                .resource( cypherUri );
        ClientResponse response = resource.accept( MediaType.APPLICATION_JSON_TYPE )
                .type(MediaType.APPLICATION_JSON_TYPE)
                .entity(jObject.toString())
                .post(ClientResponse.class);

しかし、とにかく、2 回目の試行の方が優れているので、文句は言いません :D 何が起こっているのか分からないのは、私を悩ませているだけです...

于 2013-03-21T08:04:03.423 に答える