forcedotcom/wscにプルリクエストを送ってみた
先日Qiitaにこんな記事を書きました。その続きです。
さて、変換仕様をwscを使ってアップロードするメソッドは2つあります。
void BulkConnection#createTransformationSpecFromStream(JobInfo, InputStream)
TransformationSpecRequest BulkConnection#createTransformationSpec(JobInfo)
Qiitaでは前者の方だけ紹介しました。
使い分けですが、それぞれのメソッドのシグネチャを見ると想像がつく通り、CSVファイル(やその他何かしらのストリーム)がそのまま渡せる場合は前者を、プログラム的に変換仕様を渡したい場合は後者を使う、みたいな感じだと思います*1。
後者の場合の利用例は以下のような感じ。
TransformationSpecRequest specRequest = connection.createTransformationSpec(job); specRequest.addSpecRow("Name", "Full Name", "", ""); specRequest.addSpecRow("Title", "Job Title", "", ""); specRequest.addSpecRow("LeadSource", "Lead Source", "Import", ""); specRequest.addSpecRow("Description", "", "Imported from XYZ.csv", ""); specRequest.addSpecRow("Birthdate", "Date of Birth", "", "dd MMM yy"); specRequest.completeRequest();
変換仕様は、データ項目の対応付け | Bulk API 開発者ガイド | Salesforce Developersでサンプルとして載っているspec.csvと同等のものです。
しかし、これがどうしてもエラーで動かず、最終的にwscのバグという結論に落ち着きました。
そこでコードを修正し、正常に期待した動きになるところまで確認したので、プルリクを送ってみました。
正直なところ、業務で使っているわけでもないので、別にマージされなくてもいいやと思ってはいるのですが、プルリクを送るまでの手順だけ、メモとして残しておこうと思います。
以下の流れです。
(追記:無事、マージされました。)
- forcedotcom/wsc を clone する
- clone してきたソースコードを修正する
- ビルド
- 動作確認用のコードにおいて、依存関係を修正し、Mavenリポジトリや(Salesforceからダウンロードしてきたものでなく)3. で自前ビルドしたjarを参照するようにする
- 期待する動作になることを確認
- プルリクを送る
このうち、 3. と 4. のところだけメモ。
3. wscのビルド
READMEの通りです(要Maven)。きちんと既存のテストがパスすることは確認します。
mvn clean package -Dgpg.skip
ビルドが成功すると、 target フォルダの下に force-wsc-35.2.6.jar のようなファイルが作られるので、これを使います。
4. 依存関係の修正
私はビルドにGradleを使っているので、元々、
dependencies { compile "com.force.api:force-wsc:35.2.7" compile "com.force.api:force-partner-api:35.0.1" }
のようにしていたところを、
dependencies { compile files('/path/to/wsc/target/force-wsc-35.2.6.jar') compile ("com.force.api:force-partner-api:35.0.1") { transitive = false } compile 'org.antlr:ST4:4.0.7' compile 'org.codehaus.jackson:jackson-core-asl:1.9.13' compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13' }
のように修正します。force-partner-apiがforce-wscに依存関係を持っているので、推移的な依存関係を無効にしつつ(transitive = true)、ST4やらjacksonやらの必要なものだけ別途追加してます。
修正内容
ちなみに修正内容ですが、10行程度の修正の中で3〜4つのバグを直した(つもり)です。
- 書き込んでいるCSVの内容が正しくない(先頭の項目の頭に余計なカンマが入ったり、改行されていなかったり)
- completeRequestで処理の成否を判定する時に、常にリクエスト失敗と判定される
- 生CSVしか扱えないのに、
Transport#connect
でZIPフラグがtrueで処理されている
*1: 正直、プログラム中で変換仕様を組み立てたい場合でもByteArrayInputStreamあたりを渡せば事足りますが…。