2017-03-24 15 views
0

NiFiでは、JOLTプロセッサでエラーが発生しますが、「高度な」プロセッサインターフェイス内のテストは完璧に機能しますが!いくつかのflowfilesがエラーなしで変換されNiFi JoltTransformJSON

- 大半は、しかし失敗 - 例えば:

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" } 
     } 
    } 
    } 
] 

誰もが前に、この種のエラーに遭遇しましたか?

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

スタックトレースは、プロセッサがフローファイルからJSONを読み込めないことを示唆していると思います。失敗したフローファイルの実際のコンテンツは、あなたが上に貼り付けたものとAdvanced UIに異なるものですか? – James

+0

コンテンツには特殊文字が含まれています。 '' 1.0 "| 2.0 | 3.0" 'inside" "" – Daniel

+0

JSONを解析する別のNiFiプロセッサーや外部ツールを使用してJSONをロードして、整形式JSONであることを確認できますか? EvaluateJsonPathが機能するかもしれません。 – James

答えて

2

私は再現することができませんでしたが、私はJoltのライブラリのアップグレードだけでなく、JoltTransformJSONプロセッサにいくつかの変更があります(いくつかの点でNiFi 1.2.0になります)最新のソースコードを使用しています。私は上記のJSONと仕様に貼り付けて、うまく変換しました。

JSONがJoltTransformJSONにJavaのデフォルト以外の文字セット(たいていの場合UTF-8)を使用して渡されていますか?その場合は、JoltTransformJSONプロセッサの前にConvertCharacterSetプロセッサを試してください。

1

mattybのように私もこれを試しましたが、最新のソースを使って再現することもできませんでした。失敗したコンテンツをキャプチャして投稿できる場合は、使用しているNiFiのバージョンとともに、問題を再現してそこから調査することができます。