Java/ScalaオブジェクトをProtocolBuffersメッセージに変換しようとしています。
私のオブジェクトが呼び出されIDSNumber
、doubleValue
を返すメソッドがありますjava.lang.Double
。Dozerオブジェクトの変換中に自動的にdoubleに変換されるようにしようとしています。
ここで、ScalaでDozerカスタムコンバーターを作成しました。
class IDSConverter extends DozerConverter[IDSNumber, java.lang.Double](classOf[IDSNumber], classOf[java.lang.Double]) {
def convertTo(source: IDSNumber, destination: java.lang.Double): java.lang.Double = {
source.doubleValue()
}
def convertFrom(source: java.lang.Double , destination: IDSNumber): IDSNumber = {
new IDSNumber(source)
}
}
My Protocol Buffersメッセージは次のようになります(タイプから変換する必要がありますshortFee
) 。longFee
IDSNumber
message PerformanceSettingMessage {
optional string displayCurrency = 1;
optional PeriodMessage performancePeriod = 2;
optional int64 conversionDate = 3;
optional BenchmarkOptionsMessage benchmarkOptions = 4;
optional string investmentStrategyMeaning = 5;
optional double shortFee = 6;
optional double longFee = 7;
}
私は次のようにコンバーターを使用しようとします:
val longFee = new IDSNumber(2.0)
val shortFee = new IDSNumber(3.0)
// newing up a real performance settings object with IDSNumbers for shortFee and longFee
val performanceSettings = new PerformanceSettings(Currency.apply("$"), period, fj.data.Option.none(), fj.data.Option.none(), Investment_Weighted, shortFee, longFee)
val mapper = new DozerBeanMapper() // new DozerMapper
val idsConverter = new IDSConverter() // my IDSNumber converter
mapper.setCustomConverters(java.util.Arrays.asList(idsConverter)) // make it use my IDSNumber converter
val msg = mapper.map(performanceSettings, classOf[PerformanceSettingMessage]) // map my real performanceSettings object to my PerformanceSettingsMessage generated by Protocol Buffers
上記のコードを実行すると、との代わりにとのmsg
両方が設定されます。私が間違っていることについて何か考えはありますか?おそらく、これらのオブジェクトを前後に変換するためのより良い方法(より良いライブラリ?)がありますか?ありがとう!shortFee
longFee
0.0
2.0
3.0