Skip to content

Commit f3ded6a

Browse files
committed
finish
1 parent c38788d commit f3ded6a

1 file changed

Lines changed: 79 additions & 4 deletions

File tree

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
package sha0w.pub.jsonNifi.processors;
22

3+
import com.jayway.jsonpath.JsonPath;
4+
import org.apache.commons.io.IOUtils;
35
import org.apache.nifi.annotation.behavior.SideEffectFree;
46
import org.apache.nifi.annotation.documentation.CapabilityDescription;
57
import org.apache.nifi.annotation.documentation.Tags;
6-
import org.apache.nifi.processor.AbstractProcessor;
7-
import org.apache.nifi.processor.ProcessContext;
8-
import org.apache.nifi.processor.ProcessSession;
8+
import org.apache.nifi.components.PropertyDescriptor;
9+
import org.apache.nifi.flowfile.FlowFile;
10+
import org.apache.nifi.processor.*;
911
import org.apache.nifi.processor.exception.ProcessException;
12+
import org.apache.nifi.processor.io.InputStreamCallback;
13+
import org.apache.nifi.processor.io.OutputStreamCallback;
14+
import org.apache.nifi.processor.util.StandardValidators;
15+
16+
import java.io.IOException;
17+
import java.io.InputStream;
18+
import java.io.OutputStream;
19+
import java.util.*;
20+
import java.util.concurrent.atomic.AtomicReference;
21+
22+
import static java.lang.System.in;
1023

1124
/**
1225
* Created by coco1 on 2017/7/18.
@@ -15,8 +28,70 @@
1528
@Tags({"JSON","SHA0W.PUB"})
1629
@CapabilityDescription("Fetch value from json path.")
1730
public class JsonProcessor extends AbstractProcessor{
31+
32+
private List<PropertyDescriptor> properties;
33+
private Set<Relationship> relationships;
34+
35+
public static final String MATCH_ATTR = "match";
36+
37+
public static final PropertyDescriptor JSON_PATH = new PropertyDescriptor.Builder()
38+
.name("Json Path")
39+
.required(true)
40+
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
41+
.build();
42+
43+
public static final Relationship SUCCESS = new Relationship.Builder()
44+
.name("SUCCESS")
45+
.description("Succes relationship")
46+
.build();
47+
@Override
48+
public void init(final ProcessorInitializationContext context ) {
49+
ArrayList<PropertyDescriptor> properties = new ArrayList<>();
50+
properties.add(JSON_PATH);
51+
// 防止多线程ADD
52+
this.properties = Collections.unmodifiableList(properties);
53+
Set<Relationship> relationships = new HashSet<>();
54+
relationships.add(SUCCESS);
55+
// 防止多线程ADD
56+
this.relationships = Collections.unmodifiableSet(relationships);
57+
}
58+
1859
@Override
1960
public void onTrigger(ProcessContext processContext, ProcessSession processSession) throws ProcessException {
20-
61+
final AtomicReference<String> value = new AtomicReference<>();
62+
63+
FlowFile flowFile = processSession.get();
64+
65+
processSession.read(flowFile, in -> {
66+
try{
67+
String json = IOUtils.toString(in);
68+
String result = JsonPath.read(json, "$.hello");
69+
value.set(result);
70+
}catch(Exception ex){
71+
ex.printStackTrace();
72+
getLogger().error("Failed to read json string.");
73+
}
74+
});
75+
76+
String results = value.get();
77+
if(results != null && !results.isEmpty()){
78+
flowFile = processSession.putAttribute(flowFile, "match", results);
79+
}
80+
81+
// To write the results back out ot flow file
82+
flowFile = processSession.write(flowFile, out -> out.write(value.get().getBytes()));
83+
84+
processSession.transfer(flowFile, SUCCESS);
85+
86+
}
87+
88+
@Override
89+
public Set<Relationship> getRelationships(){
90+
return relationships;
91+
}
92+
93+
@Override
94+
public List<PropertyDescriptor> getSupportedPropertyDescriptors(){
95+
return properties;
2196
}
2297
}

0 commit comments

Comments
 (0)