Browse Source

Expose a way to add custom path functions with minimal impact

pull/785/head
James Jervis 3 years ago
parent
commit
4139bd4a12
  1. 37
      README.md
  2. 18
      json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunctionFactory.java
  3. 2
      json-path/src/main/java/com/jayway/jsonpath/internal/path/FunctionPathToken.java

37
README.md

@ -506,8 +506,45 @@ CacheProvider.setCache(new Cache() {
});
```
### Custom PAth Functions
If you want to implement you own path functions, create your PathFunction implementation.
Initializing PathFunctionFactory should only be done when your application is being initialized.
```java
class MyPathFunction implements PathFunction {
public static final String NAME = "mypathfunc";
@Override
public Object invoke(
String currentPath,
PathRef parent,
Object model,
EvaluationContext ctx,
List<Parameter> parameters
) {
// Do something here
return model;
}
}
// Example application initialization
class ApplicationBoot {
public static void main(String[] args) {
PathFunctionFactory.add(
MyPathFunction.NAME,
MyPathFunction.class
);
PathFunctionFactory.init();
}
}
```

18
json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunctionFactory.java

@ -29,6 +29,20 @@ public class PathFunctionFactory {
static {
// New functions should be added here and ensure the name is not overridden
Map<String, Class> map = getFunctions();
FUNCTIONS = Collections.unmodifiableMap(map);
}
/**
* Returns the common/core functions.
*
* @see #FUNCTIONS
* @see PathFunction
*
* @return Map of path functions keyed by name
*/
public static Map<String, Class> getFunctions() {
Map<String, Class> map = new HashMap<String, Class>();
// Math Functions
@ -47,11 +61,11 @@ public class PathFunctionFactory {
map.put("append", Append.class);
map.put("keys", KeySetFunction.class);
FUNCTIONS = Collections.unmodifiableMap(map);
return map;
}
/**
* @deprecated
* Returns the function by name or throws InvalidPathException if function not found.
*
* @see #FUNCTIONS

2
json-path/src/main/java/com/jayway/jsonpath/internal/path/FunctionPathToken.java

@ -3,7 +3,7 @@ package com.jayway.jsonpath.internal.path;
import com.jayway.jsonpath.internal.PathRef;
import com.jayway.jsonpath.internal.function.Parameter;
import com.jayway.jsonpath.internal.function.PathFunction;
import com.jayway.jsonpath.internal.function.PathFunctionFactory;
import com.jayway.jsonpath.PathFunctionFactory;
import com.jayway.jsonpath.internal.function.latebinding.JsonLateBindingValue;
import com.jayway.jsonpath.internal.function.latebinding.PathLateBindingValue;

Loading…
Cancel
Save