ClassCastException выбрасывается, даже если нет приведения - PullRequest
0 голосов
/ 21 января 2019

У меня есть HashMap<ObjectId, Integer>, в который я хочу добавить новую запись. ObjectId - это класс BSON, в моем случае MongoDB-Driver.

 1   @Expose private Map<ObjectId, Integer> usedPaths;
 2   
 3   public Project()
 4   {
 5      this.usedPaths = new HashMap<>();
 6   }
 7
 8   public void usePath(ObjectId someId, int pathId)
 9   {
10      this.usedPaths.put(someId, pathId);
11   }
12
13   public void debug()
14   {
15      usePath(new ObjectId("5bfd98a2c06178796e66c204"), 1);
16   }

Когда я вызываю метод отладки, выдается ClassCastException:

    SCHWERWIEGEND: Servlet.service() for servlet [Jersey Web Application] in context with path [/KnowledgerServer] threw exception [java.lang.ClassCastException:
org.bson.types.ObjectId cannot be cast to java.lang.String] with root cause
java.lang.ClassCastException: org.bson.types.ObjectId cannot be cast to java.lang.String
    at org.bson.BasicBSONObject.put(BasicBSONObject.java:36)
    at de.knowledger.model.Project.usePath(Project.java:10)
    at de.knowledger.model.Project.debug(Project.java:15)

Насколько я знаю и вижу, я даже не пытаюсь привести ObjectId к String, более того, я никогда не получаю доступ к классу BasicBSONObject в своем коде, ObjectId также не расширяет его.

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Проблема заключалась в том, что я пытался сохранить и загрузить HashMap в / из MongoDB, его драйвер Java обрабатывает любую переданную карту как DBObject.

Спасибо за ваши советы!

0 голосов
/ 21 января 2019

Насколько я вижу, в предоставленном вами фрагменте кода нет ошибки.Исключение проясняет, что класс является частью сервлета.Проблема может заключаться в том, что происходит до и после вызова метода usePath(...).

...