Showing results for 
Search instead for 
Did you mean: 

Head's Up! Site migration is underway. Phase 2: migrate recent content

How to call APOC functions from Java?

Node Link

Hello everyone.
I have a Java app working with Neo4j and APOC.
I'm facing a problem calling an APOC function from java, which is apoc.text.join.
When I run a Cypher query I got this error:
org.neo4j.cypher.SyntaxException: Unknown function 'apoc.text.join'
My register function is:

private static void registerApocProcedure(GraphDatabaseService graphDB) throws IllegalArgumentException {
		//Register APOC procedures
		Procedures procedures = ((GraphDatabaseAPI) graphDB).getDependencyResolver().resolveDependency(Procedures.class);
		List<Class<?>> apocProcedures = Arrays.asList(Xml.class, GraphRefactoring.class, apoc.text.Strings.class);
		apocProcedures.forEach((proc) -> {
			try {
			} catch (KernelException e) {
				throw new RuntimeException("Error registering "+proc,e);

I recently added apoc.text.Strings.class where it's supposed to be the Join function, but it doesn't work.
I also tried to install Neo4j with APOC plugin and run the embedded browser, the same queries with apoc.text.join work fine!
Calling: CALL'apoc.text.join'), apoc.text.join is marked as a function.

So, is the way of calling a APOC function in Java different?
Am I doing something wrong?
Many thanks!


You also have to call procedures.registerFunction(proc) with each class.

View solution in original post


You also have to call procedures.registerFunction(proc) with each class.

Can any one help how can we call the predefined apoc from java application. I am creating my own apoc in which i want to call apoc.load.jdbc. How can i do that

The same way you call other cypher statements. With db.execute(statement, params) in the Java API of the injected graph database service.

Thank Michael. Do I need to register the procedure before the executing ?

I made below custom procedure for just to test
public Stream loadPlan(@Name(value="planCode")String planCode){

	String str="This is the plan"+planCode;
	List<String> alpha = Arrays.asList(str);
	return> new PlanDTO(str));
	//return str.chars().mapToObj();	

now I want to test this apoc via another Java class .

will this syntax can be used to run function from java class also ???
db.execute(statement, params)