Я пытаюсь получить GWT + RESTlet для связи с службой RESTful, которая не является «GWT aware».RESTlet на GWT не удалось получить ресурс RESTful, не поддерживаемый сервером с поддержкой GWT
На клиенте GWT, я что-то вроде
Reference ref = new Reference("http://localhost:8080/control/programs/");
ProgramListResourceProxy clientResource = GWT.create(ProgramListResourceProxy.class);
clientResource.setReference(proxyRef);
clientResource.setFollowingRedirects(true);
clientResource.accept(MediaType.APPLICATION_JSON );
clientResource.accept(MediaType.APPLICATION_XML );
ProgramListResourceProxy resource = RestClient.createProgramListResource();
resource.retrieve(new Result<ArrayList<ProgramRef>>()
{
@Override
public void onFailure(Throwable caught)
{
while(caught != null)
{
Window.alert("Error retrieving programs.\n" + caught.getMessage());
caught = caught.getCause();
}
}
@Override
public void onSuccess(ArrayList<ProgramRef> result)
{
Window.alert("Programs: " + result);
programs = result;
view.setRowData(toStringList(result));
}
});
Если я прошу ресурс из браузера, я получаю
[{"name":"niclas","link":{"action":"GET","path":"/control/programs/niclas/"}}]
, как и ожидалось.
Но когда вы делаете код выше в GWT, я получаю всплывающее предупреждение, сообщающее мне, что есть проблема, и во вложенном исключении;
Error retrieving programs.
Can't parse the enclosed entity because of its media type.
Expected <application/x-java-serialized-object+gwt> but was
<application/json>. Make sure you have added the
org.restlet.client.ext.gwt.jar file to your server.
MediaTypes соответствует запросу/ответу, и трафик выглядит следующим образом.
Запрос;
GET /control/programs/ HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Accept: application/json, application/xml
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Referer: http://localhost:8080/connect/Connect.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Реакция;
HTTP/1.1 200 OK
Date: Sat, 30 Mar 2013 15:46:04 GMT
Content-Type: application/json; charset=UTF-8
Date: Sat, 30 Mar 2013 15:46:04 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.1.2
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Transfer-Encoding: chunked
4E
[{"name":"niclas","link":{"method":"GET","path":"/control/programs/niclas/"}}]
Может кто-нибудь объяснить, почему Restlet ожидает «применение/х-ява-сериализованная-объект + GWT», а не набор MediaType в ресурсе ??
Связано это с использованием org.restlet.client.resource.ClientProxy? Если да, есть ли другой способ выполнить эти асинхронные запросы с помощью RESTlet?
Я использую RESTlet 2.1.2 и GWT 2.2.0.
Спасибо заранее.
Благодарим за предложение. Я думаю, что нет никакого обучения лучше, чем ваша собственная борьба, и много вариантов. Я опубликовал длинный ответ на то, что я закончил, и теперь он довольно плавный. –