If I have the following:

```
public interface GetItemRequest<T extends FooBase>
{
    public long getId();
}

public class GetFooRequest implements GetItemRequest<Foo>
{
  //snip..
}

public interface GetService extends RemoteService
{
   public <T extends FooBase> T get( GetItemRequest<T> request );
}

```

And on server, I have the following execute method, which executes the request via GWT-RPC:

```
public class GetServiceImpl<T extends FooBase>
          extends RemoteServiceServlet
          implements GetSerice<T>

{
   public T get( GetItemRequest<T> request)
   { 
     //snip
   }
}

```

That does not work, and it gives the error:

> 
> Exception:
>  com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:
>  Invalid type signature for com.xxx.GetFooRequest
> 
> 
> 

However, if I change `GetItemRequest` to be an abstract class rather than an interface, i.e:

```
public abstract class GetItemRequest<T extends FooBase>
{
    public abstract long getId();
}

```

And have `GetFooRequest` extend from `GetItemRequest<Foo>` rather than `implement` it, then the request works just fine.

Strangely however, `GetFooRequest` must be completely abstract in order for this to work. If I try to implement any method, like `getId()` in `GetItemRequest` rather than in `GetFooRequest`, I get the same exception.

Anyone know the reason behind this strange behavior?