Version: SmartGWT.Mobile 7/5/2013
I'm trying to call my SQL Datasources from SmartGWT.Mobile. I see the server execute the call correctly and returns proper XML, but my callback in SmartGWT.Mobile is not called.
I would normally create a standalone example in the showcase to demonstrate the problem but the mobile showcase does not have a server module. In any case, here is my client code:
On the server, I have added the Isomorphic RESTHandler to my web.xml like this:
Which generates the request in firebug:
And I see the following response in firebug:
The problem being that my execute override is never called.
I was wondering if the fact that it returns in XML format is an issue so I tried several ways to get it to come back in JSON without success.
I tried modifying the Showcase sample to return XML instead of JSON and saw the same behaviour (callback not called):
I can work towards getting a self-contained sample that demonstrates the issue but since the mobile showcase does not have a server, this will be large. Happy to hear suggestions.
Thanks!
Matt
I'm trying to call my SQL Datasources from SmartGWT.Mobile. I see the server execute the call correctly and returns proper XML, but my callback in SmartGWT.Mobile is not called.
I would normally create a standalone example in the showcase to demonstrate the problem but the mobile showcase does not have a server module. In any case, here is my client code:
Code:
DataSource ds = new DataSource("get_count_info");
ds.setMetaDataPrefix("");
ds.setDataURL("/restAPI/");
DataSource.setDefaultDataURL("/restAPI/");
ds.setFetchDataURL("/restAPI/");
ds.fetchData(null, new DSCallback() {
@Override
public void execute(DSResponse dsResponse, Object rawData,
DSRequest dsRequest) {
if ( dsResponse != null ) {
if (dsResponse.getErrors() != null) {
Record r = dsResponse.getData()[0];
totalDevices = r.getAttributeAsInt( "device_count" );
buttonDevicesBrowse[0].setTitle(String.valueOf(totalDevices) + " " + "Browse Devices");
buttonDevicesBrowse[1].setTitle(String.valueOf(totalDevices) + " " + "Browse Devices");
devicesInError = r.getAttributeAsInt( "error_count" );
buttonDevicesInError[0].setTitle(String.valueOf(devicesInError) + " " + "Devices in Error");
buttonDevicesInError[1].setTitle(String.valueOf(devicesInError) + " " + "Devices in Error");
devicesOutOfPaper = r.getAttributeAsInt( "no_paper_count" );
buttonDevicesOutOfPaper[0].setTitle(String.valueOf(devicesOutOfPaper) + " " + "Devices out of Paper");
buttonDevicesOutOfPaper[1].setTitle(String.valueOf(devicesOutOfPaper) + " " + "Devices out of Paper");
devicesOutOfToner = r.getAttributeAsInt( "no_toner_count" );
buttonDevicesOutOfToner[0].setTitle(String.valueOf(devicesOutOfToner) + " " + "Devices out of Toner");
buttonDevicesOutOfToner[1].setTitle(String.valueOf(devicesOutOfToner) + " " + "Devices out of Toner");
return;
}
}
//TODO: Handle error
}
});
Code:
<servlet>
<servlet-name>RESTHandler</servlet-name>
<servlet-class>com.isomorphic.servlet.RESTHandler</servlet-class>
<init-param>
<param-name>defaultDataFormat</param-name>
<param-value>json</param-value>
</init-param>
<init-param>
<param-name>wrapJSONResponses</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>RESTHandler</servlet-name>
<url-pattern>/restAPI/*</url-pattern>
</servlet-mapping>
Code:
GET /restAPI/?operationType=fetch&useStrictJSON=true&dataSource=get_count_info&isc_metaDataPrefix= HTTP/1.1 Host: 10.85.22.218:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0 Accept: application/json,*/* Accept-Language: en,fr-ca;q=0.9,zh;q=0.7,ja;q=0.6,de;q=0.4,en-us;q=0.3,nl;q=0.1 Accept-Encoding: gzip, deflate Referer: http://10.85.22.218:8080/index.html?gwt.codesvr=127.0.0.1:9997&locale=en Cookie: GLog=%7B%0D%20%20%20%20left%3A1754%2C%20%0D%20%20%20%20top%3A44%2C%20%0D%20%20%20%20width%3A1165%2C%20%0D%20%20%20%20height%3A1067%2C%20%0D%20%20%20%20priorityDefaults%3A%7B%0D%20%20%20%20%20%20%20%20Log%3A4%0D%20%20%20%20%7D%2C%20%0D%20%20%20%20defaultPriority%3A3%2C%20%0D%20%20%20%20trackRPC%3Atrue%0D%7D; JSESSIONID=1hd44mb9ecb5318n8vlmgzmmqc; login_token=8D101B2700E8852BCA1E4BCDAF947440; is_mobile=1 Connection: keep-alive
Code:
<?xml version="1.0"?>
<response>
<status>0</status>
<queueStatus>0</queueStatus><startRow>0</startRow>
<endRow>1</endRow>
<totalRows>1</totalRows>
<data>
<record>
<device_count>229</device_count>
<map_device_count>0</map_device_count>
<no_paper_count>29</no_paper_count>
<no_toner_count>0</no_toner_count>
<group_count>9</group_count>
<error_count>69</error_count>
<map_count>0</map_count>
</record>
</data>
</response>
I was wondering if the fact that it returns in XML format is an issue so I tried several ways to get it to come back in JSON without success.
I tried modifying the Showcase sample to return XML instead of JSON and saw the same behaviour (callback not called):
Code:
public class CountriesDataProviderServlet extends HttpServlet{
private static final long serialVersionUID = -7449311593970677641L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int start = 0;
String startRowParam = req.getParameter("startRow");
if (startRowParam != null) {
try {
start = Integer.parseInt(startRowParam);
} catch (NumberFormatException ex) {}
}
if (start < 0) start = 0;
int end = 5;
String endRowParam = req.getParameter("endRow");
if (endRowParam != null) {
try {
end = Integer.parseInt(endRowParam);
} catch (NumberFormatException ex) {}
}
if (end > 100) end = 100;
resp.setContentType("text/xml");
PrintWriter wr = resp.getWriter();
wr.write("<?xml version=\"1.0\"?><response><status>0</status><queueStatus>0</queueStatus><startRow>0</startRow><endRow>1</endRow><totalRows>1</totalRows><data><record> <device_count>229</device_count> <map_device_count>0</map_device_count> <no_paper_count>29</no_paper_count> <no_toner_count>0</no_toner_count> <group_count>9</group_count> <error_count>69</error_count> <map_count>0</map_count></record></data></response>");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
Thanks!
Matt
Comment