JAX-RS / RestEasy Client и JSON-P - PullRequest
       32

JAX-RS / RestEasy Client и JSON-P

0 голосов
/ 07 мая 2019

В REST-клиенте, написанном с использованием JAX-RS и RestEasy в качестве реализации, я пытаюсь отправить JsonObject через POST в WebService.В проекте используется эталонная реализация JSON-P, org.glassfish.javax.json.

Когда я пытаюсь отправить запрос, я получаю следующее исключение:

javax.ws.rs.ProcessingException: RESTEASY003215: не удалось найти модуль записи для приложения с типом содержимого / типа json: org.glassfish.json.JsonObjectBuilderImpl $ JsonObjectImpl

В pom.xml присутствуют следующие артефакты:

<dependency>
   <groupId>javax.json</groupId>
   <artifactId>javax.json-api</artifactId>
   <version>1.1.4</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1.4</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.6.3.SP1</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-client</artifactId>
    <version>3.6.3.SP1</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-json-p-provider</artifactId>
    <version>3.6.3.SP1</version>
</dependency>

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

Запрос вызван следующим образом:

final JsonObjectBuilder credentialsBuilder = Json.createObjectBuilder();
credentialsBuilder.add("username", configuration.getServiceUser());
credentialsBuilder.add("password", configuration.getServicePassword());

final Entity<JsonObject> credentials = Entity
    .json(credentialsBuilder.build());
final Response response = ClientBuilder
    .newClient()
    .target("http://www.example.org/some/url")
    .request(MediaType.APPLICATION_JSON)
    .post(credentials);

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Спасибо за подсказку.Это было действительно решение.Приложение является клиентом командной строки (Java SE).Решение было - в дополнение к добавлению зависимостей - зарегистрировать поставщиков при создании экземпляра клиента:

ClientBuilder
            .newClient()
            .register(JsonArrayProvider.class)
            .register(JsonObjectProvider.class)
            .register(JsonStructureProvider.class)
            .register(JsonValueProvider.class)
... // create request
0 голосов
/ 07 мая 2019

Похоже, ваш провайдер не регистрируется;в зависимости от того, как / где вы используете Resteasy, вам может потребоваться выполнить дополнительную настройку, чтобы убедиться, что он подберет для вас такие вещи (http://docs.jboss.org/resteasy/docs/3.6.3.Final/userguide/html_single).

Например, если вы используете конфигурацию сервлетавам может понадобиться использовать resteasy-servlet-initializer или добавить помощника Spring и т. д.

Обратите внимание, что вы, скорее всего, можете явно зарегистрировать провайдера JSON-P для клиента, цели или запроса самостоятельно, когда вы 'восстановите его, если хотите (или просто тестируете)

...