Вложенный внутренний класс игнорируется в OSGI? - PullRequest
0 голосов
/ 27 мая 2018

Я использую gson, чтобы связать немного json с pojo.Когда я не использую OSGI, все связывается идеально, поэтому я чувствую, что тип класса полностью игнорируется из-за какой-то проблемы с загрузчиком классов, потому что вложенная коллекция становится пустой после анализа.

У меня есть абстрактный обобщенный класс, который выполняет привязку в отдельном пакете:

  public <T> T deserialize(String jsonString, Class<T> clazz) {
    GsonBuilder builder = new GsonBuilder();
    Gson gson = builder.create();
    return gson.fromJson(jsonString, clazz);
  }

Этот подход работает без OSGI, но когда я использую OSGI, он связывает только элементы верхнего уровнякоторые существуют в классе T, но не во вложенном внутреннем классе.

Чтобы лучше проиллюстрировать элементы «верхнего уровня», title и description правильно десериализованы в POJO, но theThings равно null.Нужно ли как-то встраивать этот вложенный подтип в общий?

Это сигнатура класса, содержащая метод deserialize.

public abstract class MyAbstractClass<T>

{
  "title": "my awesome title",
  "description": "all the awesome things",
  "theThings": [
    {
      "thing": "coolThing1",
      "association-type": "thing"
    },
    {
      "thing": "coolThing2",
       "association-type": "thing"
      }

  ]
}

Класс POJO, к которому привязан JSON:

package things;

import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class ThingsPOJO implements Serializable
{
  @SerializedName("title")
  @Expose
  public String title = "";

  @SerializedName("description")
  @Expose
  public String description = "";

  @SerializedName("theThings")
  @Expose
  public List<TheThing> theThings = null;

  private class TheThing implements Serializable
  {

    @SerializedName("thing")
    @Expose
    public String thing = "";

    @SerializedName("association-type")
    @Expose
    public String associationType = "";

  }
}
...