我有以下简单的代码,当我没有依赖项时可以工作
AuthenticationToken authenticationToken = new AuthenticationToken("admin", "password");
RestApiClient restApiClient = new RestApiClient("http://192.168.20.97", 7070, authenticationToken);
UserEntity userEntity = new UserEntity("dasddasd","dsadsadasd", "", "password");
restApiClient.createUser(userEntity);
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.1.4.Final</version>
</dependency>
当我添加上面的依赖项时,它会抛出以下错误
Exception in thread "main" javax.ws.rs.ProcessingException: RESTEASY004655: Unable to invoke request
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:316)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:462)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:498)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.method(ClientInvocationBuilder.java:295)
at org.igniterealtime.restclient.RestClient.call(RestClient.java:145)
at org.igniterealtime.restclient.RestClient.post(RestClient.java:91)
at org.igniterealtime.restclient.RestApiClient.createUser(RestApiClient.java:92)
at app.Test.main(Test.java:20)
Caused by: javax.ws.rs.ProcessingException: RESTEASY003215: could not find writer for content-type application/xml type: org.igniterealtime.restclient.entity.UserEntity
at org.jboss.resteasy.core.interception.jaxrs.ClientWriterInterceptorContext.throwWriterNotFoundException(ClientWriterInterceptorContext.java:40)
at org.jboss.resteasy.core.interception.jaxrs.AbstractWriterInterceptorContext.getWriter(AbstractWriterInterceptorContext.java:146)
at org.jboss.resteasy.core.interception.jaxrs.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:121)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.writeRequestBody(ClientInvocation.java:390)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.writeRequestBodyToOutputStream(ApacheHttpClient4Engine.java:630)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.buildEntity(ApacheHttpClient4Engine.java:595)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.loadHttpMethod(ApacheHttpClient4Engine.java:483)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:305)
... 7 more
我需要上面的依赖项才能在Keycloak中创建用户
您可能只需要添加以下依赖项即可集成 jackson 框架。它将自动封送/取消封送 JSON 和 XML。
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.1.4.Final</version>
</dependency>
最终的问题是XML与JSON。 如果您查看 RestApiClient 使用的 RestClient 源代码,它总是以 XML 格式发送。 Keycloak始终是JSON,因此它无法使用XML。
看起来您可以使用 RestClientBuilder 设置Accepts
标头,但Content-Type
是硬编码的。