java.rmi.server.ExportException: el objeto remoto implementa una interfaz remota ilegal

Sep 22 2020

Recibiendo este error:

1) Error injecting constructor, java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is: 
    java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.util.List com.mycompany.repository.CustomCodeRepository.getCustomCodeEntity(java.lang.String,java.lang.String,java.lang.String)
  at com.mycompany.repository.impl.CustomCodeRepositoryImpl.<init>(CustomCodeRepositoryImpl.java:63)
  while locating com.mycompany.repository.impl.CustomCodeRepositoryImpl
  at com.mycompany.guice.GuiceConfigModule.configure(GuiceConfigModule.java:79)
  while locating com.mycompany.repository.CustomCodeRepository
    for field at com.mycompany.resource.ServerResource.customCodeRepository(ServerResource.java:53)
  while locating com.mycompany.resource.ServerResource

Para este código:

@Override
protected void configure() {
  
bind(EntityRepository.class).to(EntityRepositoryImpl.class).in(Scopes.SINGLETON);  
bind(CustomCodeRepository.class).to(CustomCodeRepositoryImpl.class).in(Scopes.SINGLETON);
}
public class CustomCodeRepositoryImpl extends UnicastRemoteObject
        implements CustomCodeRepository {

  @Inject
  @Named("xodusRoot")
  String xodusRoot;

  @Inject
  @Named("masterStore")
  String masterStore;

  @Inject 
  EntityRepository entityRepository;

  public CustomCodeRepositoryImpl() throws RemoteException {
  }

  @Override
  public String createCustomCode(String appId, String namespace, String customCodeName, String description, Long timeout, InputStream jar) {
  }
  @Override
  public List<Map<String, Comparable>> getCustomCodeEntity(String appId, String namespace, String customCodeName) {
    return entityRepository.getEntity(
            appId,
            namespace,
            Constants.ENTITYSTORE_CUSTOMCODE,
            Constants.CUSTOMCODE_NAME,
            customCodeName,
            new ArrayList<>());
  }

Respuestas

2 TomerShetah Sep 23 2020 at 06:00

Como menciona Guice en su excepción, es una excepción anidada. La excepción interna es:

java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.util.List com.mycompany.repository.CustomCodeRepository.getCustomCodeEntity(java.lang.String,java.lang.String,java.lang.String)

Supongo que estás anulando java.rmi.Remote. Si ese es el caso, citaré el método remoto ilegal en java :

Todos los métodos en una interfaz RMI Remote deben declarar RemoteException en su cláusula throws.

Eso significa que debe agregar throws RemoteExceptiona la declaración de todos los métodos en la interfaz que se está extendiendo Remote. Eso es probablemente CustomCodeRepository.