gwt-rpc call needs concrete class type to do the serialization. So the 
generated autobean proxy won' t be serialized. 

If you do want to send your autobean object to server side, you need to 
use com.google.gwt.http.client.RequestBuilder (client side) to send the 
encoded string to server side, and create a servlet to handle this request.

I attached two files (used in our project), hope these can help you.


Le jeudi 20 décembre 2012 14:55:50 UTC+1, Cenk Oguz a écrit :
>
> I have a small application where I am using autobeans extensively both on 
> server and gwt side. I have an issue though with gwt-rpc calls, autobeans 
> are apparently not serializable which causes gwt to fail with: 
>
> com.google.gwt.user.client.rpc.SerializationException: Type '$Proxy85' was 
> not included in the set of types which can be serialized by this 
> SerializationPolicy
>
> Is there any obvious way that autobeans could be sent client->server side? 
> Gwt-rpc is not good enough? Sending it over as a JSON string imposes some 
> manual labor, seems overkill, would rather just go with POJOs in that case.
>
> /Cenk
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/NMbom9Fr3WMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

package com.exemple.client.service;

import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.StatusCodeException;
import com.exemple.client.ClientAutoBeanUtils;
import com.exemple.domain.autobean.ServerInfoBean;

public class ServerInfoService {
	
	public final static String PATH = "/serverInfo";

	public void getServerInfo(final AsyncCallback<ServerInfoBean> callback){
	
		RequestBuilder request = new RequestBuilder(RequestBuilder.POST, PATH);
		request.setCallback(new RequestCallback() {			
			@Override
			public void onResponseReceived(Request request, Response response) {
				if(callback == null) return;
				if(200 == response.getStatusCode()){
					try{
						callback.onSuccess(ClientAutoBeanUtils.decode(response.getText(), ServerInfoBean.class));
					}catch(Exception caught){
						callback.onFailure(caught);
					}
				}else{
					callback.onFailure(new StatusCodeException(response.getStatusCode(), response.getText()));
				}
			}
			
			@Override
			public void onError(Request request, Throwable exception) {
				if(callback != null){
					callback.onFailure(exception);
				}else if(GWT.getUncaughtExceptionHandler() != null){
					GWT.getUncaughtExceptionHandler().onUncaughtException(exception);
				}
			}
		});
		try {
			request.send();
		} catch (RequestException exception) {
			if(callback != null){
				callback.onFailure(exception);
			}else if(GWT.getUncaughtExceptionHandler() != null){
				GWT.getUncaughtExceptionHandler().onUncaughtException(exception);
			}
		}
		
	}
	
}
package com.exemple.server.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.web.bindery.autobean.shared.AutoBean;
import com.exemple.client.service.ServerInfoService;
import com.exemple.domain.autobean.ServerInfoBean;
import com.exemple.server.ServerAutoBeanUtils;

@WebServlet(ServerInfoService.PATH)
public class ServerInfoServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.sendRedirect("/");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		AutoBean<ServerInfoBean> bean = ServerAutoBeanUtils.createServerInfoBean();
		bean.as().setAvailable(true);
		bean.as().setVersion("");
		String responsePayload = ServerAutoBeanUtils.encode(bean);
		// now you can write your response into resp...
	}
}

Reply via email to