El jueves, 18 de junio de 2015, 22:57:08 (UTC+2), José Álvarez de Lara
escribió:
>
>
>
> El jueves, 18 de junio de 2015, 17:26:33 (UTC+2), José Álvarez de Lara
> escribió:
>>
>>
>>
>> El jueves, 18 de junio de 2015, 7:49:55 (UTC+2), Michael Hunger escribió:
>>>
>>> And also put it please up as a github gist or repository
>>>
>>> Thanks!!
>>>
>>> Von meinem iPhone gesendet
>>>
>>> Am 18.06.2015 um 03:13 schrieb José Álvarez de Lara <[email protected]
>>> >:
>>>
>>>
>>>
>>> El jueves, 18 de junio de 2015, 0:23:31 (UTC+2), Michael Hunger escribió:
>>>>
>>>> Hi Jose,
>>>>
>>>> thanks so much for your investigative work.
>>>>
>>>> Would you mind writing this up as a blog post? And publish it, then we
>>>> can help you promote it too.
>>>>
>>>> Cheers, Michael
>>>>
>>>> Am 17.06.2015 um 00:30 schrieb José Álvarez de Lara <[email protected]
>>>> >:
>>>>
>>>> Based on "The Neo4j v2.3.0-M01 Manual" manual under "7.1. How to use
>>>> the REST API from Java"
>>>> I have tried to develop a similar code and using the latest Jersey
>>>> library to date is 2.18.
>>>>
>>>> Authentication would take place the following code snippet,
>>>>
>>>> private static WebTarget testDatabaseAuthentication()
>>>> {
>>>> // START SNIPPET: testAuthentication
>>>> Client client = ClientBuilder.newClient();
>>>> HttpAuthenticationFeature authFeature = HttpAuthenticationFeature.basic
>>>> (username, password);
>>>> client.register(authFeature); WebTarget target = client.
>>>> target(SERVER_ROOT_URI);
>>>>
>>>> Response response = target
>>>> .request()
>>>> .header("application/xml", "true")
>>>> .get();
>>>>
>>>> String entity = response.readEntity(String.class);
>>>> System.out.println( String.format(
>>>> "GET, status code [%d], returned data: "
>>>> + System.getProperty( "line.separator" ) + "%s"
>>>> ,
>>>> response.getStatus(), entity ) ); response.close
>>>> ();
>>>> return target;
>>>> // END SNIPPET: testAuthentication
>>>> }Introducir código aquí...
>>>>
>>>> being the username and password those used to log onto the Neo4j server.
>>>>
>>>> With the authentication method I recover the 'target' object of the
>>>> WebTarget
>>>> class and keep it throughout the whole program so as I do not to need
>>>> to login
>>>> in each of the different and consecutive methods again.
>>>>
>>>> I added a helper method to extract the path of each node that then I
>>>> will use
>>>> in the different methods. The code snippet is as follows,
>>>>
>>>> private static String extractPathFromNode( URI node ) {
>>>> String auxUri = node.toString();
>>>> return auxUri.replace(SERVER_ROOT_URI, "");
>>>> }Introducir código aquí...
>>>>
>>>> and what I do is to recover the resulting part of removing the
>>>> SERVER_ROOT_URI root
>>>> (the root "http://localhost:7474/db/data/" is what I used to login)
>>>> which is the
>>>> 'target' object now.
>>>>
>>>> The rest of the methods will use the 'target' object with the path
>>>> extracted from
>>>> the nodes or properties. I supply now the code snippet of each one,
>>>>
>>>>
>>>> private static void sendTransactionalCypherQuery( WebTarget target,
>>>> String query ) {
>>>> // START SNIPPET: queryAllNodes
>>>> final String txUri = "transaction/commit";
>>>> //WebResource resource = Client.create().resource( txUri );
>>>> String payload = "{\"statements\" : [ {\"statement\" : \"" + query +
>>>> "\"} ]}";
>>>>
>>>> Response response = target
>>>> .path(txUri)
>>>> .request(MediaType.APPLICATION_JSON)
>>>> .header("application/xml", "true")
>>>> .accept(MediaType.APPLICATION_JSON)
>>>> .post(Entity.entity(payload, MediaType.
>>>> APPLICATION_JSON_TYPE));
>>>>
>>>> String entity = response.readEntity(String.class);
>>>> System.out.println( String.format(
>>>> "GET, status code [%d], returned data: "
>>>> + System.getProperty( "line.separator" ) + "%s"
>>>> ,
>>>> response.getStatus(), entity ) ); response.close
>>>> ();
>>>> // END SNIPPET: queryAllNodes
>>>> }
>>>>
>>>> private static void findSingersInBands( WebTarget target, URI
>>>> startNode )
>>>> //throws URISyntaxException
>>>> {
>>>> // START SNIPPET: traversalDesc
>>>> // TraversalDefinition turns into JSON to send to the Server
>>>> TraversalDefinition t = new TraversalDefinition();
>>>> t.setOrder( TraversalDefinition.DEPTH_FIRST );
>>>> t.setUniqueness( TraversalDefinition.NODE );
>>>> t.setMaxDepth( 10 );
>>>> t.setReturnFilter( TraversalDefinition.ALL );
>>>> t.setRelationships( new Relation( "singer", Relation.OUT ) );
>>>> // END SNIPPET: traversalDesc // START SNIPPET: traverse
>>>> //URI traverserUri = new URI( startNode.toString() +
>>>> "/traverse/node" );
>>>> String auxPath = extractPathFromNode( startNode );
>>>> String traverserUri = auxPath + "/traverse/node";
>>>> String jsonTraverserPayload = t.toJson();
>>>>
>>>> // POST {} to the node entry point URI
>>>> Response response = target
>>>> .path(traverserUri)
>>>> .request(MediaType.APPLICATION_JSON)
>>>> .header("application/xml", "true")
>>>> .accept(MediaType.APPLICATION_JSON)
>>>> .post(Entity.entity(jsonTraverserPayload, MediaType.
>>>> APPLICATION_JSON_TYPE));
>>>>
>>>> System.out.println( String.format(
>>>> "POST [%s] to [%s], status code [%d], returned data: "
>>>> + System.getProperty( "line.separator" ) + "%s"
>>>> ,
>>>> jsonTraverserPayload, traverserUri, response.getStatus
>>>> (),
>>>> response.getEntity().toString() ) );
>>>>
>>>> response.close();
>>>> // END SNIPPET: traverse
>>>> }
>>>>
>>>> // START SNIPPET: insideAddMetaToProp
>>>> private static void addMetadataToProperty( WebTarget target, URI
>>>> relationshipUri,
>>>> String name, String value ) //throws URISyntaxException
>>>> {
>>>> //URI propertyUri = new URI( relationshipUri.toString() +
>>>> "/properties" );
>>>> String auxPath = extractPathFromNode( relationshipUri );
>>>> String propertyUri = auxPath + "/properties";
>>>> String entity = toJsonNameValuePairCollection( name, value );
>>>>
>>>> Response response = target
>>>> .path(propertyUri)
>>>> .request(MediaType.APPLICATION_JSON)
>>>> .header("application/xml", "true")
>>>> .accept(MediaType.APPLICATION_JSON)
>>>> .put(Entity.entity(entity, MediaType.
>>>> APPLICATION_JSON_TYPE));
>>>>
>>>> System.out.println( String.format(
>>>> "PUT [%s] to [%s], status code [%d]", entity,
>>>> propertyUri,
>>>> response.getStatus() ) );
>>>>
>>>> response.close();
>>>> }
>>>> // END SNIPPET: insideAddMetaToProp
>>>>
>>>> private static String toJsonNameValuePairCollection( String name,
>>>>
>>>>
>>>
>>>
>>> Hi Michael,
>>>
>>> Thank you for to be so kind.
>>>
>>> I will publish it in WordPress where I have opened an account.
>>>
>>> This time I will include the main method to finish completing the blog
>>> post.
>>>
>>> Kind regards,
>>> José
>>>
>>>> ...
>>>
>>> Here is the blog post I posted.
>>>
>>>
>> http://neo4j-and-java-rest-api-auth.blogspot.com.es/p/how-to-use-rest-api-from-java-when-auth.html
>>
>>> Finally I decided to Google Blogger because I did not see the way of how
>>>> to use SyntaxHighlighter in WordPress.
>>>
>>> Cheers
>>
>
> Here is the Project on GitHub repository,
>
> https://github.com/GGSvennson/Neo4jRestApi
>
> Thanks,
> Jose
>
Hi Michael,
I finished the job. Let me know if everything is
ok.
Best,
Thanks,
Jose
> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Neo4j" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>
>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.