2017-03-24 2 views
0

NiFi wirft einen Fehler im JOLT Prozessor - obwohl der Test innerhalb der "fortgeschrittenen" Prozessorschnittstelle einwandfrei funktioniert!NiFi JoltTransformJSON

Einige flowfiles ohne Fehler umgewandelt - die Mehrheit jedoch nicht - zB:

JSON:

{ 
    "abc": { 
     "HEADER": { 
      "A": "WDD2132041A2213962", 
      "B": "75268508" 
     }, 
     "BODY": { 
      "C": "OK", 
      "D": "1" 
     }, 
     "ABCDEFG": "Time[s] | X | Y | Z | A/B [%] | X/Y [%] " 
    } 
} 

JOLT:

[ 
    { 
    "operation": "shift", 
    "spec": { 
     "abc": { 
     "HEADER": { "*": "&" }, 
     "SUMMARY": { "*": "&" }, 
     "*": { "$": "ITEM", "@": "VAL" } 
     } 
    } 
    } 
] 

Hat jemand, bevor sie in diese Art von Fehler laufen?

2017-03-24 15:12:35,765 ERROR [Timer-Driven Process Thread-6] o.a.n.p.standard.JoltTransformJSON 
java.lang.RuntimeException: Unable to load JSON object from InputStream. 
     at com.bazaarvoice.jolt.JsonUtilImpl.jsonToObject(JsonUtilImpl.java:105) ~[json-utils-0.0.21.jar:0.0.21] 
     at com.bazaarvoice.jolt.JsonUtils.jsonToObject(JsonUtils.java:117) ~[json-utils-0.0.21.jar:0.0.21] 
     at org.apache.nifi.processors.standard.JoltTransformJSON.onTrigger(JoltTransformJSON.java:244) ~[nifi-standard-processors-1.1.0.2.1.1.0-2.jar:1.1.0.2.1.1.0-2] 
     at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) [nifi-api-1.1.0.2.1.1.0-2.jar:1.1.0.2.1.1.0-2] 
     at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1099) [nifi-framework-core-1.1.0.2.1.1.0-2.jar:1.1.0.2.1.1.0-2] 
     at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:136) [nifi-framework-core-1.1.0.2.1.1.0-2.jar:1.1.0.2.1.1.0-2] 
     at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) [nifi-framework-core-1.1.0.2.1.1.0-2.jar:1.1.0.2.1.1.0-2] 
     at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:132) [nifi-framework-core-1.1.0.2.1.1.0-2.jar:1.1.0.2.1.1.0-2] 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_77] 
     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_77] 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_77] 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_77] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_77] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_77] 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_77] 
Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.ArrayIndexOutOfBoundsException) (through reference chain: java.util.LinkedHashMap["xml"]) 
     at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:177) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase.wrapAndThrow(ContainerDeserializerBase.java:88) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:507) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:341) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer.deserialize(UntypedObjectDeserializer.java:220) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3702) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2784) ~[jackson-databind-2.6.1.jar:2.6.1] 
     at com.bazaarvoice.jolt.JsonUtilImpl.jsonToObject(JsonUtilImpl.java:102) ~[json-utils-0.0.21.jar:0.0.21] 
     ... 14 common frames omitted 
+0

Ich glaube, die Stack-Trace schlägt vor, dass der Prozessor JSON aus Ihrem Flowfile nicht lesen kann. Unterscheidet sich der tatsächliche Inhalt des fehlerhaften Flowfiles von dem, was Sie oben eingefügt haben, und in der erweiterten Benutzeroberfläche? – James

+0

Der Inhalt enthält Sonderzeichen - wie z. '" 1.0 | 2.0 | 3.0 "' aber innen "" – Daniel

+0

Können Sie überprüfen, ob es sich um einen wohlgeformten JSON handelt, indem Sie ihn mit einem anderen NiFi-Prozessor oder einem externen Tool, das JSON analysiert, laden? EvaluateJsonPath funktioniert möglicherweise. – James

Antwort

2

Ich war nicht in der Lage zu reproduzieren, aber ich bin die neueste Quellcode mit (was an einem gewissen Punkt wurde Nifi 1.2.0), das auch einige Änderungen an dem JoltTransformJSON Prozessor ein Upgrade der Jolt Bibliothek . Ich habe den obigen JSON und die Spezifikation eingefügt, und es wurde gut umgesetzt.

Wird JSON an JoltTransformJSON übergeben, wobei ein anderer Zeichensatz als der Java-Standard (häufig UTF-8) verwendet wird? Wenn ja, versuchen Sie einen ConvertCharacterSet Prozessor vor dem JoltTransformJSON-Prozessor.

1

Wie Mattyb habe ich das auch versucht und konnte auch nicht reproduzieren (mit der neuesten Quelle). Wenn Sie gescheiterte Inhalte erfassen und zusammen mit der von Ihnen verwendeten NiFi-Version posten können, kann ich das Problem zumindest neu erstellen und von dort aus nachforschen.