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] 
> <javascript:>>:
>
> 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é 

> ...

-- 
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.

Reply via email to