【Salesforce】Data Loaderでjava.lang.NullPointerException
Salesforce上のデータを、VBAとデータローダて処理するExcelを修正していると、データローダ内でエラーが発生しました。
java.lang.NullPointerException
javaなんかでもよく見るエラーなのですが、データローダの中で発生しているので何が原因か特定できません。
今回はデータローダでUpsertを行う処理です。
実際に発生していたエラーはこんな感じです。
java.lang.RuntimeException: java.lang.NullPointerException at com.salesforce.dataloader.process.ProcessRunner.run(ProcessRunner.java:162) at com.salesforce.dataloader.process.ProcessRunner.run(ProcessRunner.java:100) at com.salesforce.dataloader.process.ProcessRunner.main(ProcessRunner.java:253) Caused by: java.lang.NullPointerException at java.lang.String$CaseInsensitiveComparator.compare(Unknown Source) at java.lang.String$CaseInsensitiveComparator.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at java.util.AbstractCollection.addAll(Unknown Source) at java.util.TreeSet.addAll(Unknown Source) at com.salesforce.dataloader.mapping.Mapper.<init>(Mapper.java:87) at com.salesforce.dataloader.mapping.LoadMapper.<init>(LoadMapper.java:51) at com.salesforce.dataloader.controller.Controller.createMapper(Controller.java:195) at com.salesforce.dataloader.process.ProcessRunner.run(ProcessRunner.java:146) ... 2 more
エラーの内容から判断すると、何かのマッピングの際にエラーが発生しているように見えます。
データローダでマッピングに関連するものといえば、sdlとcsvのマッピングでしょうか。
csvのヘッダには日本語を使用していますが、sdlファイルの中身はコードポイントの形式で記述されていました。
csvとsdlのマッピングも問題が無さそうに見えました。
このバッチはVBAで作成したcsvを、VBAから呼び出したバッチで処理していました。
問題を確認するため、csvファイルを自分で作成して同じバッチを動かしたところ、こちらは問題なく処理が行われました。
ということは、VBAから吐き出されるcsvファイルの内容が怪しいですね。
VBAから吐き出されたcsvファイルを確認すると、このような状態になっていました。
"ID", "電話", "メール", "" "{SFID}", "{電話番号}", "{メールアドレス}", "" ...
csvファイルのヘッダに、空白の列が存在することが分かるかと思います。
つまり、この空白列を元にマッピングの処理を行った際にエラーが発生したと考えることができます。
そこで、VBAから出力されたcsvファイルのヘッダ部分を修正してバッチを動かしました。
"ID", "電話", "メール" "{SFID}", "{電話番号}", "{メールアドレス}" ...
結果を確認すると、正常に処理が行われていました。
csvファイルの中身が原因だったようですね。
バッチからデータローダを呼び出した際にエラーが発生すると、意外と原因が分からなかったりしますね。
元々が自分で作成した処理ではないため、VBAやバッチに関連するファイルの中身を確認していて思ったより時間がかかってしまいました。
ともあれ、原因が分かってよかったです。
No comments.