Как преобразовать объект Java / Scala в сообщение с буфером протокола? - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь преобразовать объект Java / Scala в сообщение «Буферы протокола».

Мой объект называется IDSNumber, и у него есть метод doubleValue, который возвращает java.lang.Double.Я пытаюсь сделать так, чтобы он автоматически конвертировался в двойной при Dozer преобразовании объектов.

Я создал Dozer Custom Converter в Scala, здесь:

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.Есть мысли о том, что я делаю не так?Возможно, есть лучший способ (лучшая библиотека?) Конвертировать эти объекты назад и вперед?Спасибо!

...