The Jersey Client API reuses many aspects of the JAX-RS and the
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target("http://example.com/rest/");
The uri passed to the method as a String is the URI of the targeted web resource that represents a context root of a RESTful application. If there is a resource exposed on the URI "http://example.com/rest/resource", a WebTarget instance can be used to derive other web targets.
WebTarget resourceWebTarget = webTarget.path("resource");
The resourceWebTarget now points to the resource on URI "http://example.com/rest/resource"
In our example program, once the server is started, we’ll check the connection to it. 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 }
In order to enable http authentication support in Jersey client register the HttpAuthenticationFeature. For our example I’ve used basic pre-emptive authentication. I’ll keep the 'target' object along the whole program so I don’t to need to login in each of the different methods again.
The main method should look as follows,
private static final String SERVER_ROOT_URI = "http://localhost:7474/db/data/"; private static final String username = "neo4j_username"; private static final String password = "neo4j_password"; public static void main( String[] args ) //throws URISyntaxException { WebTarget target = testDatabaseAuthentication(); // START SNIPPET: nodesAndProps URI firstNode = createNode( target ); addProperty( target, firstNode, "name", "Joe Strummer" ); URI secondNode = createNode( target ); addProperty( target, secondNode, "band", "The Clash" ); // END SNIPPET: nodesAndProps // START SNIPPET: addRel URI relationshipUri = addRelationship( target, firstNode, secondNode, "singer", "{ \"from\" : \"1976\", \"until\" : \"1986\" }" ); // END SNIPPET: addRel // START SNIPPET: addMetaToRel addMetadataToProperty( target, relationshipUri, "stars", "5" ); // END SNIPPET: addMetaToRel // START SNIPPET: queryForSingers findSingersInBands( target, firstNode ); // END SNIPPET: queryForSingers sendTransactionalCypherQuery( target, "MATCH (n) WHERE has(n.name) RETURN n.name AS name" ); }
If you want you can download the code from my GitHub
All the best,
José