Hi Sven,
Here's my extension to BasePagingLoadResult (without a no-arg constructor):
Code:
public class TestBasePagingLoadResult<Data> extends BasePagingLoadResult<Data> implements Serializable {
private int unfilteredDataSize;
/**
*
*/
private static final long serialVersionUID = -3404898837876268698L;
public TestBasePagingLoadResult(List<Data> data) {
super(data);
}
public TestBasePagingLoadResult(List<Data> data, int offset, int totalLength) {
super(data, offset, totalLength);
}
public void setUnfilteredDataSize(int unfilteredDataSize) {
this.unfilteredDataSize = unfilteredDataSize;
}
public int getUnfilteredDataSize() {
return this.unfilteredDataSize;
}
}
Here's the exception I got:
Code:
com.google.gwt.user.client.rpc.SerializationException:
Type 'com.xxx.test.admin.common.extension.TestBasePagingLoadResult'
was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded.
For security purposes, this type will not be serialized.: instance = com.xxx.test.admin.common.extension.TestBasePagingLoadResult@4663bc
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:609)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:467)
This is the workaround I did which works fine:
Code:
public class TestBasePagingLoadResult<Data> extends BasePagingLoadResult<Data> implements Serializable {
private int unfilteredDataSize;
/**
*
*/
private static final long serialVersionUID = -3404898837876268698L;
TestBasePagingLoadResult() {
//workaround because BasePagingLoadResult() constructor is not visible
super(new ArrayList<Data>());
}
public TestBasePagingLoadResult(List<Data> data) {
super(data);
}
public TestBasePagingLoadResult(List<Data> data, int offset, int totalLength) {
super(data, offset, totalLength);
}
public void setUnfilteredDataSize(int unfilteredDataSize) {
this.unfilteredDataSize = unfilteredDataSize;
}
public int getUnfilteredDataSize() {
return this.unfilteredDataSize;
}
}
I don't know if this matters but here's my service and serviceImpl codes (Omitted some codes for brevity):
1. Service Interface:
Code:
public interface TestsService extends RemoteService {
PagingLoadResult<Tests> getTestsForAutomatedTestDefinition(PagingLoadConfig config, int automatedTestDefinitionId);
2. ServiceAsync
Code:
public interface TestsServiceAsync {
void getTestsForAutomatedTestDefinition(PagingLoadConfig config, int automatedTestDefinitionId, AsyncCallback<PagingLoadResult<Tests>> callback);
3. ServiceImpl:
Code:
public class TestsServiceImpl extends RemoteServiceServlet implements TestsService {
/**
*
*/
private static final long serialVersionUID = -7009686346178770259L;
@SuppressWarnings("unchecked")
@Override
public PagingLoadResult<Tests> getTestsForAutomatedTestDefinition(PagingLoadConfig config, int automatedTestDefinitionId) {
final List<Tests> tests = (ArrayList<Tests>) getTestsService()....
final int unfilteredDataSize = tests.size();
//filtering here
:
:
//sorting here
:
:
:
final int filteredSize = filtered.size();
final ArrayList<Tests> sublist = new ArrayList<Tests>();
final int start = config.getOffset();
int limit = filteredSize;
if (config.getLimit() > 0) {
limit = Math.min(start + config.getLimit(), limit);
}
for (int i = start; i < limit; i++) {
sublist.add(filtered.get(i));
}
//Create the extended BasePagingLoadResult
final TestBasePagingLoadResult result = new TestBasePagingLoadResult(sublist, start, filteredSize);
result.setUnfilteredDataSize(unfilteredDataSize);
return result;
}
}
Please let me know if there's any other possible solution to the above exception.
Thanks!