Embulkのエラーメッセージからエラーの原因を特定するための参考エラーメッセージ


Embulkのエラーメッセージからエラーの原因を特定するための参考エラーメッセージ

※ エラーメッセージがわかりやすくなるまでの暫定

## まとめ

エラーの内容は結局``Can not deserialize instance of java.lang.String out of START_OBJECT``のところに注目し

``Can not deserialize instance of Embulkが期待している型 of 間違っている型``というふうに読めば良いようです。

また、プラグインがJRubyで書かれている場合は、`Invalid value for :hash`のところに注目し、`Invalid value for 期待している型`と読めばよいようです。

## Can not deserialize instance of java.lang.String out of START_OBJECT

```
org.embulk.exec.PartialExecutionException: org.embulk.config.ConfigException: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: N/A; line: -1, column: -1]
    at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(org/embulk/exec/BulkLoader.java:363)
    at org.embulk.exec.BulkLoader.doRun(org/embulk/exec/BulkLoader.java:572)
    at org.embulk.exec.BulkLoader.access$000(org/embulk/exec/BulkLoader.java:33)
    at org.embulk.exec.BulkLoader$1.run(org/embulk/exec/BulkLoader.java:374)
    at org.embulk.exec.BulkLoader$1.run(org/embulk/exec/BulkLoader.java:370)
    at org.embulk.spi.Exec.doWith(org/embulk/spi/Exec.java:25)
    at org.embulk.exec.BulkLoader.run(org/embulk/exec/BulkLoader.java:370)
    at org.embulk.EmbulkEmbed.run(org/embulk/EmbulkEmbed.java:180)
    at java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:498)
    at RUBY.run(/Users/user/.embulk/bin/embulk!/embulk/runner.rb:84)
    at RUBY.run(/Users/user/.embulk/bin/embulk!/embulk/command/embulk_run.rb:306)
    at RUBY.<top>(/Users/user/.embulk/bin/embulk!/embulk/command/embulk_main.rb:2)
```

* [Liquidを使っているのに拡張子にliquidを付け忘れた。](https://github.com/embulk/embulk/issues/436)
* [liquidのinclude構文を使っていたが、template側のsyntaxが間違っていた。
(`{{}}`と書くべきところ`{}`と書いた)](https://qiita.com/shase428q/items/d4b2f51a4417993ed599)

## Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

```
org.embulk.exec.PartialExecutionException: org.embulk.config.ConfigException: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
 at [Source: N/A; line: -1, column: -1]
    at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(org/embulk/exec/BulkLoader.java:363)
    at org.embulk.exec.BulkLoader.doRun(org/embulk/exec/BulkLoader.java:572)
    at org.embulk.exec.BulkLoader.access$000(org/embulk/exec/BulkLoader.java:33)
```

* [配列を書くべきところ文字列を指定してしまった。](http://ja.stackoverflow.com/questions/27479)

## org.jruby.proxy.org.embulk.config.ConfigException$Proxy1: Invalid value for :hash

```
org.embulk.exec.PartialExecutionException: org.jruby.proxy.org.embulk.config.ConfigException$Proxy1: Invalid value for :hash
        at org.embulk.exec.BulkLoader$LoaderState.buildPartialExecuteException(BulkLoader.java:340)
        at org.embulk.exec.BulkLoader.doRun(BulkLoader.java:566)
        at org.embulk.exec.BulkLoader.access$000(BulkLoader.java:35)
        at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:353)
        at org.embulk.exec.BulkLoader$1.run(BulkLoader.java:350)
        at org.embulk.spi.Exec.doWith(Exec.java:22)
        at org.embulk.exec.BulkLoader.run(BulkLoader.java:350)
        at org.embulk.EmbulkEmbed.run(EmbulkEmbed.java:178)
        at org.embulk.EmbulkRunner.runInternal(EmbulkRunner.java:292)
        at org.embulk.EmbulkRunner.run(EmbulkRunner.java:156)
        at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:433)
        at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:90)
        at org.embulk.cli.Main.main(Main.java:64)
```

ハッシュで書くべきところ、配列にしてしまっていてた。

間違い

```yaml
# 間違い
   time_partitioning:
   - {type: DAY}
   - {require_partition_filter: true}

# 正しい
　　time_partitioning: {type: DAY, require_partition_filter: true}
```

* [参考](https://gist.github.com/shase/794230fde6907db239904d7fb66c3b45)
* [twitter](https://twitter.com/shase428/status/1128945566942031872)


## その他

```
$ embulk example foo
2021-05-18 21:51:37.106 +0900: Embulk v0.9.23
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Option.builder(Ljava/lang/String;)Lorg/apache/commons/cli/Option$Builder;
at org.embulk.deps.cli.OptionDefinitionImpl.<init>(http://OptionDefinitionImpl.java:22)
```

```
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
```

多分古いJDKを使っていると起きるエラーembulk 0.9.17以降を使うと発生する

[参考](https://twitter.com/hiroysato/status/1394650143257817096?s=20)


## 開発編

### `java.lang.ClassCastException: java.lang.String cannot be cast to org.embulk.standards.CsvParserPlugin$QuoteCharacter`

Jacksonのバージョンがコンフリクトすると出るらしい。[参考](https://twitter.com/joker1007/status/1171698195425923074?s=20)