JAX-RS / RestEasy客户端和JSON-P

时间:2019-05-07 18:51:26

标签: jax-rs resteasy

在使用JAX-RS和RestEasy作为实现编写的REST客户端中,我尝试通过POST将JsonObject发送到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 :(得分:0)

您的提供者似乎没有被注册;取决于您使用Resteasy的方式/位置,您可能需要进行其他配置,以确保它为您提供了这类东西(http://docs.jboss.org/resteasy/docs/3.6.3.Final/userguide/html_single)。

例如,如果您正在使用servlet配置,则可能需要使用resteasy-servlet-initializer,或添加spring助手等。

请注意,如果您要构建(或只是进行测试),则很可能会在构建JSON-P提供程序时向客户端,目标或请求本身显式注册

答案 1 :(得分:0)

感谢您的提示。确实是解决方案。该应用程序是命令行客户端(Java SE)。解决方案是-除了添加依赖项以外-在创建客户端实例时要注册提供程序:

ClientBuilder
            .newClient()
            .register(JsonArrayProvider.class)
            .register(JsonObjectProvider.class)
            .register(JsonStructureProvider.class)
            .register(JsonValueProvider.class)
... // create request