JAX-RS: десериализация JSON для устаревших объектов - как предоставить помощников / фабрики для устаревших интерфейсов? - PullRequest
1 голос
/ 08 июля 2019

У меня возникла ситуация при создании тестового сервера-заглушки для тестирования нашего недавно написанного клиента для устаревшей системы, где я хотел бы десериализовать тело входящего запроса JSON в иерархию объектов, предоставленную поставщиком для той же устаревшей системы.

Другими словами, я хотел бы использовать классы вендоров вместо создания своих собственных.

Мне удалось заставить клиента Eclipse Microplatform (работающего в последней версии TomEE) дойти до того, чтобы начатьзаполнить базовый унаследованный объект, но затем происходит сбой, так как не удается создать экземпляр интерфейса внутри объекта, что имеет смысл, поскольку для этого нет метаданных.

  @POST
    @Produces({ MediaType.APPLICATION_JSON })
    @Consumes({MediaType.APPLICATION_JSON})
    public String post(MessageObject messageObject) {
<code>

Root Cause

javax.json.bind.JsonbException: interface /vendor interface class/ not instantiable
    org.apache.johnzon.jsonb.JohnzonJsonb.fromJson(JohnzonJsonb.java:200)
    org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider.readFrom(JsonbJaxrsProvider.java:182)
...
</code>

Поскольку у меня нет источника для этих классов, я думал о том, можно ли десериализатору сказать иначе (например, «Провайдеры в внедрении зависимостей»), как создавать экземпляры интерфейсов.У меня есть полный контроль над клиентом.

Я не очень знаком с этим, поэтому я был бы признателен, зная, как обойти это, или это неудачная причина?

...