ClassCastException: класс org.jboss.resteasy.client.jaxrs.engines.ManualClosingApacheHttpClient43Engine $ 2 не может быть приведен к классу MyResponse. - PullRequest
0 голосов
/ 25 апреля 2020

Я использую raml-to-jaxrs-maven-plugin:3.0.7 для создания клиента jax-rs из файла raml. Я использую RESTEasy в качестве реализации Jakarta RESTful Web Services.

Сгенерированный прокси из raml имеет класс ответа MyResponse, который расширяет javax.ws.rs.core.Response.

В resteasy-client класс DefaultEntityExtractorFactory создает экстрактор как:

 public EntityExtractor createExtractor(final Method method)
{
  final Class returnType = method.getReturnType();
  if (isVoidReturnType(returnType))
     return createVoidExtractor();
  if (returnType.equals(Response.Status.class))
     return createStatusExtractor(true);

  if (Response.class.isAssignableFrom(returnType))
     return clientResponseExtractor;

  if (returnType.isInterface() && returnType.isAnnotationPresent(ResponseObject.class))
     return new ResponseObjectProxy(method, new ResponseObjectEntityExtractorFactory());

  return new BodyEntityExtractor(method);
}

Этот код будет истинным

if (Response.class.isAssignableFrom(returnType))
 return clientResponseExtractor;

и clientResponseExtractor будет be

 public static final EntityExtractor clientResponseExtractor = new EntityExtractor<ClientResponse>()
 {
  public ClientResponse extractEntity(ClientContext context, Object... args)
  {
     return context.getClientResponse();
  }
 };

В конечном итоге возвращаемый ответ - ManualClosingApacheHttpClient43Engine, и он не может быть преобразован в класс MyReponse.

Как я могу сказать RESTEasy преобразовать ManualClosingApacheHttpClient43Engine в MyResponse?

...