2015-07-13 2 views
1

Я пишу тестовые чехлы для аэробики junit для своих тестовых случаев. Для хранения контейнеров с аэрокосмическим оборудованием я использую ConcurrentHashMap.aerospike JUNIT Record Constructor не работает

// InMemory Map for storing AeroSpike Related Data... 
ConcurrentMap<String, Bin[]> aerospike_keyBins = new ConcurrentHashMap<String, Bin[]>(); 

// InMemory Map for storing AeroSpike Related Data... 
ConcurrentMap<String, Integer> aerospike_keyGen = new ConcurrentHashMap<String, Integer>(); 

Хранение бункеров и информации, относящейся к GenNumber, работает отлично.

Но я сталкиваюсь с проблемами при получении записи с карты (на самом деле конвертирует значения бункеров от Map до Aerospike Record).

Вот функция, которая, как ожидается, преобразует ее.

private Record binsToRecord(String stringKey, Bin... bins) { 
    Map<String, Object> mapOfBins = new HashMap<String, Object>(); 
    for (Bin bin : bins) { 
     mapOfBins.put(bin.name, bin.value); 
    } 
    return new Record(mapOfBins, aerospike_keyGen.get(stringKey), 1); 
} 

Хотя Вызов new Record в этой функции я получаю следующее сообщение об ошибке.

java.lang.ClassCastException: com.aerospike.client.Value$StringValue cannot be cast to java.lang.String 
    at com.aerospike.client.Record.getString(Record.java:66) 

отладочную этот вопрос, я обнаружил, что в Record.class из Aerospike, Следующая функция дает ошибку.

/** 
* Get bin value as String. 
*/ 
public String getString(String name) { 
    return (String) getValue(name); 
} 

getValue возвращает правильное значение, но (String) getValue(name) метание ошибки.

Любая подсказка о том, почему я получаю эту ошибку?

ответ

1

Ваш метод обработки бинов выглядит отлично.

/** 
* Get bin value as String. 
*/ 
public String getString(String name) { 
    return (String) getValue(name); 
} 

Здесь в Bin binValue является объектом StringValue, так что вы не можете сразу бросить его в строку. попробовать

(getValue(name)).toString() 
// StringValue object provide toString() method. 
+0

thanks sudhanshu. Я получил фактические проблемы в коде. –

0

На самом деле проблема была в то время как ввод значения местного HashMap. Я подталкивал тип значений StringValues ​​в локальном хэш-файле. Исправлено, что для установки стандартной строки исправлена ​​проблема.

Это новая функция binsToRecord.

/* 
* Convert Bin Set to Record Object. 
*/ 
private Record binsToRecord(String stringKey, Bin... bins) { 
    Map<String, Object> mapOfBins = new HashMap<String, Object>(); 
    for (Bin bin : bins) { 
     if (bin.value instanceof Value.StringValue) 
      mapOfBins.put(bin.name, bin.value.toString()); 
     else if (bin.value instanceof Value.LongValue) 
      mapOfBins.put(bin.name, bin.value.toLong()); 
     else if (bin.value instanceof Value.DoubleValue) 
      mapOfBins.put(bin.name, bin.value.toLong()); 

    } 
    return (new Record(mapOfBins, aerospike_keyGen.get(stringKey), 1)); 
} 
Смежные вопросы