Вам не нужно «создавать полный JavaScriptObject», JavaScriptObject на самом деле является просто средством вызова для JavaScript из мира Java, поэтому вам нужен только один метод получения нужного значенияи он даже может возвращать «вложенное» значение:
public native String getFoo() /*-{
return this.nested[0].obj.foo;
}-*/;
Будете ли вы использовать JSONP (и JsonpRequestBuilder) или «прокси-сервлет», на самом деле зависит только от возможностей «службы», которая вам нужнадля вызова: JSONP - это JavaScript, а не JSON, поэтому сервер должен возвращать «сценарий ответа JSONP», иначе вы не сможете использовать JsonpRequestBuilder (и, аналогично, вы не сможете (безопасно) использовать CORS илипрокси-сервлет, если сервер возвращает «сценарий JSONP», а не application/json
).