2015-01-02 2 views
0

У меня проблема с клиентом вызова Restlet к службе рабочего отдыха:Использование Restlet ClientResource не может отправить объект в Restlet службы

final ClientResource resource = new ClientResource(Routes.PUBLIC_STORE_API); 
    resource.setOnResponse(new Uniform() { 
     public void handle(Request request, Response response) { 
      try { 
       Status status = response.getStatus(); 
       if(!Status.isError(status.getCode())){ 
        String jsonResponse = response.getEntity().getText(); 
       } else { 
        // Handle error 
       } 
      } catch (Exception e){ 
       callback.failure(new Throwable(e.getMessage())); 
      } 
     } 
    }); 
    JsniHelper.consoleLog("Adding object id=" + id + " type=" + type + " data=" + jsonObject); 
    resource.getReference().addQueryParameter("type", type); 
    resource.getReference().addQueryParameter("id",id); 
    resource.post(jsonObject, MediaType.APPLICATION_JSON); 

В точке бревна над объектом является действительной строкой JSON.

Restlet ServerResource может получить оба id и type Струны однако компания всегда null:

@Post("json") 
public Representation add(Representation entity){ // omitted } 

Я пытался использовать CURL и сервис Отдых был в состоянии обработать строку JSON должным образом.

В чем может быть проблема с моим кодом в GWT?

Update: У меня есть это в POM

<dependency> 
     <groupId>org.restlet.gae</groupId> 
     <artifactId>org.restlet.ext.gwt</artifactId> 
     <version>2.2-RC3</version> 
    </dependency> 
+0

Можете ли вы разделить 'curl' команду вы использовали, поэтому мы можем видеть, что он совпадает с Java, перечисленных выше? –

+0

Я сделал еще один тест здесь: 'curl -H 'Content-Type: application/json" -d' {"username": "xyz", "password": "xyz"} 'http: // localhost: 8888/publicstore ? id = null & type = user' – xybrek

+0

Тот, над чем работал и смог сохранить в хранилище данных, почтовый вызов GWT (с Restlet GWT) всегда терпит неудачу. Тем не менее, у меня есть еще один вызов: получить код аналогичного кода, и он работает нормально. Кроме того, параметры запроса в порядке, и сервер получает его, только объект представления - null. – xybrek

ответ

0

Для того, чтобы сделать этот вызов перспективе сделать следующие вещи:

  • добавить расширение JSon (org.restlet.ext. json.jar) рамок, взятых из издания GWT, в ваш проект
  • добавить следующую зависимость к вашему модулю GWT

  • затем обновить свой код следующим образом:

    resource.post (новый JsonRepresentation (MediaType.APPLICATION_JSON, JSONObject));

Я заметил, что он работает, если вы отправляете представление вместо объекта. Основная проблема заключается в том, что при обработке объекта основной модуль не выполняет сериализацию. В JVM мы можем подключить услугу, которая обнаруживает доступные конвертеры, которые автоматически преобразуют компонент в представление, мы не можем добиться этого с помощью GWT.

Сказав это, я думаю, что вы можете проще интегрировать свой клиентский и серверный код, просто используя бобы. Код клиента GWT может связываться с использованием конкретного формата сериализации GWT, любого другого клиентского кода с использованием JSON.

Посмотрите на этот код: http://restlet.com/technical-resources/restlet-framework/guide/2.3/introduction/first-steps/first-application

+0

Я обновляю фреймворк, чтобы добавить трассировку в таком случае. Это поможет отладить. –

+0

привет, вы также можете проверить эту проблему: http://stackoverflow.com/questions/28271860/bean-validation-annotation-breaks-reslet-clientproxy – xybrek