java.rmi.server.ExportException: objeto remoto implementa interface remota ilegal

Sep 22 2020

Obtendo este erro:

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<>());
  }

Respostas

2 TomerShetah Sep 23 2020 at 06:00

Como referência em sua exceção, é uma exceção aninhada. A exceção interna é:

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)

Eu acho que você está substituindo java.rmi.Remote. Se for esse o caso, vou citar o método remoto ilegal em java :

Todos os métodos em uma interface remota RMI devem declarar RemoteException em sua cláusula throws.

Isso significa que você precisa adicionar throws RemoteExceptionà declaração de todos os métodos da interface que está sendo estendida Remote. Provavelmente sim CustomCodeRepository.