我想用异常与Restlet框架和GWT的客户端处理。 Restlet框架支持本文中描述的注释异常的概念;接收来自Restlet框架自定义异常在GWT客户
http://restlet.com/company/blog/2015/12/21/exception-handling-with-restlet-framework/
在我的项目我创建了一个LocationNameException
@Status(value = 409)
public class LocationNameException extends Exception
{
...
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public LocationNameException(String pMessage, Throwable pCause)
{
super(pMessage, pCause);
}
}
在我ServerResource使用;
@Override
@Transactional(rollbackOn = LocationNameException.class)
public LocationDto postLocation(LocationDto pLocationDto) throws LocationNameException
{
...
Location lLocation = new Location(pLocationDto);
try
{
LocationDao lLocationDao = getLocationDao();
lLocationDao.persist(lLocation);
}
catch (PersistenceException pPersistenceException)
{
throw new LocationNameException("Location requires unique Name", pPersistenceException);
}
...
return lLocationDto;
}
随着接口
public interface LocationListServerResourceInt
{
...
@Post
LocationDto postLocation(LocationDto pLocationDto) throws LocationNameException;
...
}
这工作,在出现异常的情况下,调用返回码409;
,并在GWT客户端onFailure处()被调用;
private class PostLocationCallback implements AsyncCallback<LocationDto>
{
...
@Override
public void onFailure(Throwable pCaught)
{
mCallback.onFailure(pCaught, mLocationDto);
}
}
但参数pCaught只含有状态码409 我LocationNameException不包括在根本原因堆栈ResourceException。 我需要此LocationNameException来处理适当的错误消息。
原因是所生成的ServerResourceProxy LocationListServerResourceProxyImpl通过的Restlet GWT ClientProxyGenerator;
public void postLocation(LocationDto param1, final LocationDto> callback)
{
...
public void handle(Request request, Response response)
{
if (getClientResource().getStatus().isError())
{
callback.onFailure(new ResourceException(getClientResource().getStatus()));
}
else
{
...
}
我想我必须重写ClientProxyGenerator中的Post方法;
的LocationNameException存在于响应数据,以便the Basic approach using the getResponseEntity() method of the ClientResource class should be possible。
这是要走的路?或者我可以在Catching annotated exceptions建议的地方捕获LocationNameException异常吗?
这是真的很难去尝试的,因为生成的代码不同的方法。有没有一种简单的方法来绕过自定义类的代码生成器?
围绕这个问题,它仍然非常安静...... Restlet/GWT还活着吗?任何人都曾在使用Restlet的GWT客户端中使用服务器异常? –
Hi Roland,对Restlet/GWT中注释异常的支持尚未开发,但它应该在技术上可行。你认为你可以贡献它吗?很高兴在此过程中为您提供支持。 –
你好杰罗姆,是的,我认为我可以贡献它。挑战不是注释异常(我可以使用描述的基本方法),而是ClientProxyGenerator(因此GWT编译器的东西...)。我试图在我的项目中使用生成的源代码,但是ServerResourceProxy_TypeSerializer存在问题...您是否有可以使用的工作/编译ServerResourceProxyImpl/ServerResourceProxy_TypeSerializer示例? –