Я столкнулся с той же проблемой в обратном порядке. Похоже, что объект DataTable в библиотеке источников данных Java не параллелен объекту Javascript DataTable в API визуализации Google.
Для возврата библиотеки данных источника Java объект DataTable требует использования JsonRenderer, а не сериализации по умолчанию. И, похоже, работает только передача с сервера на клиент. Не уверен, что это можно сделать в другом направлении.
@WebService
@Path("/tables")
public class DataManager extends GenericManager<db, Long> {
@Path("/hello/")
@GET
@Produces(MediaType.APPLICATION_JSON)
public DataTable getDataTable() {
DataTable data = new DataTable();
... populate object ...
return data;
}
Однако объект Java DataTable, возвращаемый сериализацией по умолчанию, отличается от javascript DataTable API визуализации Google. Вы не можете передать его на график GVis.
Вместо этого в Java вы используете класс JsonRenderer
( см. Этот электронный адрес групп Google ), чтобы преобразовать его в строку типа Json, в которой отсутствуют атрибуты для скромного сжатия в кавычках.
@Path("/hello/")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getDataTable() {
DataTable data = new DataTable();
CharSequence charSequence = JsonRenderer.renderDataTable(dataTable, true, true);
return charSequence.toString();
}
Эту строку можно проанализировать в Javascript, заключив ее в круглые скобки, не показанные в литеральной записи объекта в примерах ( см. Этот форум Группы Google ):
jQuery.ajax({
context: this,
type: 'Get',
url: url,
success: function(data) {
var args = eval('('+data+')'); // add parens around the returned string
var dataTable = new google.visualization.DataTable(args);
...
});
Я не вижу способа перехода в обратном направлении к объекту DataTable библиотеки данных Java.
Так что не совсем ответ, но вы не одиноки