2

Java/ScalaオブジェクトをProtocolBuffersメッセージに変換しようとしています。

私のオブジェクトが呼び出されIDSNumberdoubleValueを返すメソッドがありますjava.lang.DoubleDozerオブジェクトの変換中に自動的に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) 。longFeeIDSNumber

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両方が設定されます。私が間違っていることについて何か考えはありますか?おそらく、これらのオブジェクトを前後に変換するためのより良い方法(より良いライブラリ?)がありますか?ありがとう!shortFeelongFee0.02.03.0

4

0 に答える 0