我想用異常與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示例? –