Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GWT客户机中从Restlet框架接收自定义异常_Java_Gwt_Exception Handling_Restlet - Fatal编程技术网

Java 在GWT客户机中从Restlet框架接收自定义异常

Java 在GWT客户机中从Restlet框架接收自定义异常,java,gwt,exception-handling,restlet,Java,Gwt,Exception Handling,Restlet,我想对Restlet框架和GWT客户机使用异常处理。 Restlet框架支持本文中描述的注释异常的概念 在我的项目中,我创建了一个LocationNameException @Status(value = 409) public class LocationNameException extends Exception { ... /////////////////////////////////////////////////////////////////////////

我想对Restlet框架和GWT客户机使用异常处理。 Restlet框架支持本文中描述的注释异常的概念

在我的项目中,我创建了一个LocationNameException

@Status(value = 409)
public class LocationNameException extends Exception
{
    ...

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public LocationNameException(String pMessage, Throwable pCause)
    {
        super(pMessage, pCause);
    }
}
并在我的服务器资源中使用它

   @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);
    }
}
我想我必须在ClientProxyGenerator中重写Post方法

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
       {

    ...

}
    Class<?>[] exceptionTypes = method.getExceptionTypes();
    java.lang.reflect.Type[] genericExceptionTypes = method.getGenericExceptionTypes();

响应数据so中存在LocationNameException

这是路吗?或者我可以按照建议在其他地方捕获LocationNameException异常吗


因为生成的代码,所以很难尝试不同的方法。有没有一种简单的方法可以通过自定义类绕过代码生成器

如前所述,LocationNameException出现在响应数据中。 所以我们可以得到它,就像一个正常的实体

...

       public void handle(Request request, Response response)
        {
            if (getClientResource().getStatus().isError())
            {
                LocationNameException lLocationNameException = null;
                boolean serializationError = false;

                try
                {
                    if (response.isEntityAvailable())
                    {
                        if (MediaType.APPLICATION_JAVA_OBJECT_GWT.equals(response.getEntity().getMediaType()))
                        {
                            lLocationNameException = new ObjectRepresentation<LocationNameException>(
                                    response.getEntity().getText(),
                                    (SerializationStreamFactory) MyLocationListServerResourceProxyImpl.this, false)
                                    .getObject();
                        }
                        else
                        {
                            throw new IOException("Can't parse the enclosed LocationNameException.");
                        }
                    }
                }
                catch (Throwable e)
                {
                    serializationError = true;
                    callback.onFailure(new ResourceException(e));
                }

                if (!serializationError)
                {
                    callback.onFailure(lLocationNameException);
                }
            }
            else
            {

...

如前所述,LocationNameException出现在响应数据中。 所以我们可以得到它,就像一个正常的实体

...

       public void handle(Request request, Response response)
        {
            if (getClientResource().getStatus().isError())
            {
                LocationNameException lLocationNameException = null;
                boolean serializationError = false;

                try
                {
                    if (response.isEntityAvailable())
                    {
                        if (MediaType.APPLICATION_JAVA_OBJECT_GWT.equals(response.getEntity().getMediaType()))
                        {
                            lLocationNameException = new ObjectRepresentation<LocationNameException>(
                                    response.getEntity().getText(),
                                    (SerializationStreamFactory) MyLocationListServerResourceProxyImpl.this, false)
                                    .getObject();
                        }
                        else
                        {
                            throw new IOException("Can't parse the enclosed LocationNameException.");
                        }
                    }
                }
                catch (Throwable e)
                {
                    serializationError = true;
                    callback.onFailure(new ResourceException(e));
                }

                if (!serializationError)
                {
                    callback.onFailure(lLocationNameException);
                }
            }
            else
            {

...

在Jerome Louvel和Thierry Boileau的帮助下,我创建了一个新的ClientProxyGenerator(),它支持针对GWT客户端的自定义异常

只需从ServerResourceProxy(ClientProxy)中的接口指定异常

可以立即在项目中使用此自定义ClientProxyGenerator()

并将其放在服务器上的包中(例如包com.ludus.server.util)

在GWT模块XML中,在服务器上将ClientProxyGenerator更改为新版本


您已经准备好使用自定义异常,但是如果将此扩展集成到Restlet框架中,那就太好了。

在Jerome Louvel和Thierry Boileau的帮助下,我创建了一个新的ClientProxyGenerator(),它支持针对GWT客户端的自定义异常

只需从ServerResourceProxy(ClientProxy)中的接口指定异常

可以立即在项目中使用此自定义ClientProxyGenerator()

并将其放在服务器上的包中(例如包com.ludus.server.util)

在GWT模块XML中,在服务器上将ClientProxyGenerator更改为新版本


您已经准备好处理您的自定义异常,但是如果将此扩展集成到Restlet框架中,那就太好了。

在这个问题上,它仍然非常安静。。。Restlet/GWT还活着吗?有没有人在使用Restlet的GWT客户端中使用过服务器异常?嗨,罗兰,Restlet/GWT中对注释异常的支持还没有开发出来,但在技术上应该是可行的。你认为你能贡献吗?很高兴在这个过程中支持你。你好,杰罗姆,是的,我想我可以贡献。挑战不在于带注释的异常(我只能使用所描述的基本方法),而在于ClientProxyGenerator(因此GWT编译器的东西…)。我试图在我的项目中使用生成的源代码,但ServerResourceProxy_TypeSerializer存在问题。。。你有一个正在工作/正在编译的ServerResourceProxyImpl/ServerResourceProxy_类型序列化程序示例我可以使用吗?它在这个问题上保持了尴尬的安静。。。Restlet/GWT还活着吗?有没有人在使用Restlet的GWT客户端中使用过服务器异常?嗨,罗兰,Restlet/GWT中对注释异常的支持还没有开发出来,但在技术上应该是可行的。你认为你能贡献吗?很高兴在这个过程中支持你。你好,杰罗姆,是的,我想我可以贡献。挑战不在于带注释的异常(我只能使用所描述的基本方法),而在于ClientProxyGenerator(因此GWT编译器的东西…)。我试图在我的项目中使用生成的源代码,但ServerResourceProxy_TypeSerializer存在问题。。。您有一个可以使用的工作/编译ServerResourceProxyImpl/ServerResourceProxy\u类型序列化程序示例吗?
callback.onFailure(new ResourceException(getClientResource().getStatus()));