# Reflection  java.lang.IllegalArgumentException



## SQL (23. Jan 2006)

Hallo 
ich will eine Datanbank anlegen, auslesen..  Ich wollte das so machen das ich mir ein große Anzahl von Klassen zur Datenhaltung schreibe. Die Klassen enthalten lediglich öffentliche Eigenschaften wie zum Beispiel public String myString.
Ich wollte mir nun eine Klasse schreiben die über Reflections diese Eigenschaften ausliest und schreibt. Dabei werden auch die Query für die Datanbankabfrage so zusammengebaut. Das Problem ist das ich folgende Exception bekomme:

java.lang.IllegalArgumentException
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source)
	at java.lang.reflect.Field.set(Unknown Source)
	at database.Query.getRSet(Query.java:635)
	at database.Query.getRow(Query.java:218)
	at database.testDB.main(testDB.java:90)


Hier ein paar ausschnitte aus dem Quellcode
//obj ist die Übergebene Instanz aus einer der obigen Klassen


	pubField= new Field[obj.getClass().getFields().length];
	pubField = obj.getClass().getFields();// hier speichere die Felder

//Jetzt erfolgt die Datanbank abfrage mit einen PreparedStatement. rSet ist ein ResultStament
//Wenn die nächste Zeile ausgeführt wird und ich nun versuche das Object der Klasse zu schreiben kommt die obige Fehlermeldung.
//Was ich nicht verstehe ist das (Unknown Source). 

	pubField_.set(pubField,rSet.getObject(pubField.getName()));


Wenn ich im Debugger mein Field anschaue steht darunter:
fieldAccessor= UnsafeObjectFieldAccessorImpl  (id=77)
Wie kommt das zustande und was ist das. Was kann ich dagen tun. Oder ist mein Ansatz schon Falsch sollte ich 
das vielleicht über Methoden machen. 

Vielen Dank und scöne Grüße

SQL_


----------



## Bleiglanz (23. Jan 2006)

lern Hibernate, du versuchst gerade das Rad neu zu erfinden

http://www.hibernate.org/


----------



## Guest (23. Jan 2006)

Hi 
Vielen Dank. Habe mir das gerade angschaut. Das ist ja ein haufen Zeug. Aber trotzdem kann mir jemand das obige erklären.


----------



## Bleiglanz (24. Jan 2006)

das ist ein Haufen, aber nur weil das Problem eben schwierig ist

ich glaube, du solltest

```
// total falsch
// pubField[i].set(pubField[i],rSet.getObject(pubField[i].getName())); 

// es soll ja das Attribut eines Objekts verändert werden
pubField[i].set(obj,rSet.getObject(pubField[i].getName()));
```

schau halt mal in die API was alles schiefgehen kann


> Sets the field represented by this Field object on the specified object argument to the specified new value. The new value is automatically unwrapped if the underlying field has a primitive type.
> 
> The operation proceeds as follows:
> 
> ...


----------

