У меня есть следующий код, чтобы отслеживать, где пользователь нажимает на изображение:
Я бы хотел сделать, чтобы, когда пользователь нажимает на изображение, я хочу нарисовать точку на X, Y координаты щелчка. открытый класс Circle реализует Shape {...} @Path ("/ api / shape") public ...
У меня есть класс Resource, который пытается вернуть тип интерфейса, скажем "Shape":
public interface Shape {...}
@XmlRootElement
public class Circle implements Shape {...}
@Path("/api/shapes")
public class ShapeResource {
@GET
@Path("/{shapeId}")
public Shape get(@PathParam("shapeId") String shapeId) {
....
return new Circle();
}
}
Экспериментируя с вышеупомянутым, я вижу, что сервер возвращает XML следующим образом:
...
Итак пока все хорошо. Проблема в том, что клиент не знает, как это разобрать. Я получаю:
com.sun.jersey.api.client.ClientHandlerException: A message body for Java type, interface Shape, and MIME media type, application/xml, was not found
Учитывая WebResource, и запрос типа сущности Shape.class вызывает исключение.
Кажется, сервер делает правильные вещи. Я часами бился над тем, как заставить клиента десериализовать этот класс. Я даже попытался обернуть интерфейс, который я действительно пытаюсь получить, в оболочку, как описано здесь: https://jaxb.dev.java.net/guide/Mapping_interfaces.html . Это тоже не сработало.
Мой клиентский код выглядит следующим образом:
ClientResponse response = get(wr, ClientResponse.class); // wr == WebResource
try {
return response.getEntity(Shape.class); // <-- FAIL
} catch (Exception e) {
e.printStackTrace();
// com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java type, interface Shape, and MIME media type, application/xml, was not found
}
try {
return response.getEntity(Circle.class); // <-- WIN, but hacky and forces me to try every concrete type
} catch (Exception e) {}
return null;
Любое понимание или руководство приветствуются. Заранее спасибо.