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.
