2010-10-29 33 views
2

Nous avons une petite application avec Restlet sur le serveur GAE et les clients GWT et Android. Restlet fournit des réponses sérialisées GWT aux clients GWT et JSON aux clients Android.RESET POSTing JSON à l'erreur Appengine

Tout va bien avec la sérialisation GWT à la fois localement et sur les serveurs de production AppEngine.

Tout va bien avec les clients Android (JSON) qui parlent au serveur de développement local.

Android prenant en production le serveur AppEngine GETs réponses JSON, mais le test POST échoue. Il n'y a pas d'erreur ou d'avertissement dans les journaux. La fonction sur le serveur est appelée mais le paramètre passé est null.

C'est le code incriminé:

@Post("json") 
public void createLocationJSON(Location location) { // location is always null 
    // do something with 'location' 
} 

Répondre

3

Juste pour tout le monde sache: j'ai réussi à GAE + Restlet + JSON + GWT travail après beaucoup tripoter. Le processus était vraiment chaotique (m'a rappelé des jours de programmation pour le Win32): Je changeais juste les paramètres jusqu'à ce qu'il commence à fonctionner.

Le problème que je faisais est:

  1. Il a été au service de la mauvaise représentation (JSON, XML, GWT) aux mauvais clients. Plus tard, il s'est avéré que je devais faire attention à l'ordre des méthodes dans la classe. WTF ??
  2. Je ne pouvais pas le faire fonctionner sur le sous-chemin, par ex. /du repos/*.

Je ne vais pas utiliser Restlet pour les raisons suivantes (hint aux auteurs):

  1. Documentation sont rares, imprécises et parfois contradictoires (expliquant chose de différentes façons dans les différentes parties de la documentation) .
  2. La configuration n'est pas standard JAX-RS. Je sais qu'ils ont une option pour le configurer comme JAX-RS, mais tous les exemples dans docs ne sont pas basés sur ceci.

Depuis lors, je suis passé à Jersey.

+0

Comment est Jersey travaille pour vous? –

+0

En fait très bien, jusqu'à ce que 1.5 qui a cessé de travailler sur appengine (résolu plus tard via la configuration): http://java.net/jira/browse/JERSEY-630 –

+0

En attendant, nous l'avons remplacé par Resteasy, qui à mon humble avis a de meilleurs docs. –

1

Vous avez rencontré une limitation de GAE à laquelle plusieurs utilisateurs de Restlet étaient confrontés.

Il y a quelque temps, GAE a cessé de prendre en charge l'acceptation d'une entité HTTP segmentée. Nous avons reproduit ce problème avec les servlets GAE POST et PUT et raw, donc ce n'est pas lié à Restlet. Voir problème GAE: http://code.google.com/p/googleappengine/issues/detail?id=129

La seule solution de contournement que nous avons trouvée est de ne pas tronquer des entités, ce qui signifie être capable de calculer leur taille à l'avance. Dans la version de Restlet 2.1 M3 que nous venons de publier, nous avons ajouté une simple propriété "entityBuffering" sur ClientResource pour faciliter cela (mise à 'false' par défaut).

Nous sommes en train de mettre à jour notre exemple "Première application" pour illustrer la solution de contournement. Nous avons également dû faire face à la compatibilité de GWT 2.2 avec sa précédente API de base GWT 2.1, donc Restlet 2.1 ne fonctionnera que sur GWT.

détails d'addition sont disponibles sur cette page: http://wiki.restlet.org/docs_2.1/13-restlet/21-restlet/318-restlet/303-restlet.html

Meilleures salutations,

Jerome

Restlet ~ Fondateur et Responsable technique ~ http://www.restlet.org

Noelios Technologies ~ http://www.noelios.com

+0

Salut Jerome. Merci pour le -1. Très classe. Il y a quelques choses que je voudrais ajouter: –

+0

1. Votre réponse est quelques mois en retard. Où étais-tu quand j'avais besoin d'aide? La question est étiquetée «restlet» et je m'attendrais à ce que vous surveilliez SO comme ce site de questions-réponses pour les développeurs. –

+1

2. Le numéro de GAE date de 2008. J'ai eu des problèmes en octobre 2010. Vous avez une édition de Restlet spécifiquement destinée à GAE. Pourquoi n'avez-vous pas déclaré clairement dans les documents qu'il y a un problème sérieux? –