# IllegalArgumentException (Dringend)



## paedubucher (4. Apr 2006)

Hallo allerseits

Ich schreibe derzeit eine Client/Server-Datenbankapplikation, welche verschiedene Entitäten verwaltet. Der Client greift auf die Entitäts-Implementierungen jeweils mit dem folgenden Interface zu:


```
package net.sourceforge.customercare.server.entities;

import java.rmi.Remote;
import java.util.Iterator;

import net.sourceforge.customercare.server.exceptions.CustomerCareException;

/**
 * the business logic for an entity 
 */
public interface EntityLogic extends Remote
{
  /**
   * creates an entry
   * @return a new entry
   * @throws CustomerCareException
   */
  public Entry create() throws CustomerCareException;
  
  /**
   * saves an entry
   * @param entry
   * @throws CustomerCareException
   */
  public void save(Entry entry) throws CustomerCareException;
  
  /**
   * removes an entry
   * @param id
   */
  public void remove(Integer id) throws CustomerCareException;
  
  /**
   * gets an entry by its id
   * @param id
   * @return an entry
   * @throws CustomerCareException
   */
  public Entry get(Integer id) throws CustomerCareException;
  
  /**
   * gets all entries
   * @return all entries
   * @throws CustomerCareException
   */
  public Iterator<Entry> getAll() throws CustomerCareException;
}
```

Die Implementierung dieses Interfaces erweitert "UnicastRemoteObject", wie es sich für Objekte gehört, welche entfernt verwendet werden dürfen.

Beim ausführen meines JUnit-Tests (der nur lokal, nicht über RMI agiert), erhalte ich immer folgende Exception:


```
java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is: 
	java.lang.IllegalArgumentException: illegal remote method encountered:
public abstract net.sourceforge.customercare.server.entities.Entry
net.sourceforge.customercare.server.entities.EntityLogic.get(java.lang.Integer) throws
net.sourceforge.customercare.server.exceptions.CustomerCareException
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:171)
	at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:293)
	at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:235)
	at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:133)
	at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:119)
	at net.sourceforge.customercare.server.entities.supportlevel.SupportlevelLogic.<init>(SupportlevelLogic.java:44)
	at net.sourceforge.customercare.server.testing.SupportlevelLogicTest.setUp(SupportlevelLogicTest.java:46)
	at junit.framework.TestCase.runBare(TestCase.java:125)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.IllegalArgumentException: illegal remote method encountered: public abstract
net.sourceforge.customercare.server.entities.Entry
net.sourceforge.customercare.server.entities.EntityLogic.get(java.lang.Integer) throws
net.sourceforge.customercare.server.exceptions.CustomerCareException
	at sun.rmi.server.Util.checkMethod(Util.java:244)
	at sun.rmi.server.Util.getRemoteInterfaces(Util.java:223)
	at sun.rmi.server.Util.getRemoteInterfaces(Util.java:193)
	at sun.rmi.server.Util.createProxy(Util.java:126)
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:169)
	... 16 more
```

Irgend ein Argument scheint er also nicht zu vertragen. Woran könnte das liegen?

Ich bin auf Hilfe angewiesen, am Freitag soll diese Applikation laufen und von 16 Entitäten habe ich bisher erst zwei ausprogrammiert (wenn das mit RMI nicht geht, ist das Projekt gescheitert).

Besten Dank für die Hilfe!

Gruss,

paedubucher


----------



## paedubucher (4. Apr 2006)

Schien wohl eher ein Objektorientiertes Problem zu sein...

Wie man sieht, werfe ich jeweils "CustomerCareExceptions". Diese Exceptions habe ich selbst ausprogrammiert und sie erweitert die Klasse "RemoteException".

Warum darf ich also nicht einfach CustomerCareExceptions werfen? Die "beinhaltet" ja die Remote-Exception, oder?


----------



## vadimiron (4. Apr 2006)

> Warum darf ich also nicht einfach CustomerCareExceptions werfen? Die "beinhaltet" ja die Remote-Exception, oder?



Eigentlich dachte ich, dass es genau umgekehrt ist, mit einer Mutter-Klasse kann man alle vererbenden Klassen abfangen


----------

