java.lang.NullPointerException

fenerli23

Erfahrenes Mitglied
hi,

es geht um eine Client/ Server Anwendung, dass problem ist, wenn ich denn Client starte und durchführen lasse, bekomme ich eine Fehlermeldung die etwa so aussieht:

Code:
org.apache.axis2.AxisFault: java.lang.NullPointerException
	at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:486)
	at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:343)
	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
	at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
	at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
	at service.KServiceStub.Email(KServiceStub.java:172)
	at service.Client.sucheK(Client.java:27)
	at service.Client.main(Client.java:43)

was komisch ist, dass der Service an sich die daten auf der Console richtig anzeigt, wenn ich entsprechende "System.out.println(...)" hinzufüge. Der Service hat an sich ein Problem mit dem Rückgabewert an den Client woran kann das denn liegen...?!
 
Das Problem tritt auf, wenn ich ein zweidimensionales Array mit hinein beziehen will.

Sobald dieses zweidimensionale Array auch gesetzt wird, entseht keine Rückgabe an den Client...
Wie auch oben beschrieben gibt er als Fehlermeldung "java.lang.NullPointerException" aus...

Kann man keine zweidimensionale arrays an den client zurückgeben?
 
1. Code
2. Hast du das Array auch initialisiert, bzw greifst du auch nur auf Felder mit Inhalt zu?

ich greife so zu:
Code:
 zelle[0][0] [0][1] ....
zell[zeile][spalte]

hier noch code dazu:
Java:
Zelle[][] inhalt = new Zelle[zeilen.size()][columns.length];
int i=0;
for (Iterator it = zeilen.iterator(); it.hasNext();) {
       Zelle[] zeile = (Zelle[]) it.next();
       inhalt[i] = zeile;
       i++;
}
--> wenn ich das ganze auf der Console ausgeben lasse wird der richtige Inhalt dargestellt, ausgegeben.

die Klasse Zelle besitzt noch setters und getters für einzelne Typen die eine Datenbank enthalten kann wie VARCHAR2, NUMBER, DATE ...
 
Und das funktioniert :confused:.
Also, erstmal deklarierst du inhalt als 2D-Array, aber du greifst drauf zu als wäre es 1D.
Dann erzeugst du an der Stelle ein neues (leeres) Array und füllst damit dein anderes. Ist das wircklich richtig so?

ja wahrscheinlich nicht, denn es wird nciht zurückgegeben ich habe gelesen, dass man irgendwie einen zwischen Array erzeugen kann und danach die zeileninhalte reinliest...
 
Hi,

mal so ne Frage :

Was verbirgt sich hinter dem Objekt "zeilen" welches du dort Iterierst ?
Den Cast auf "Zelle[]" dort möchte ich nämlich gern verstehen.

Die initialisierung des Arrays ist so etwas unsinnig !

Ein Zelle[][] inhalt = new Zelle[zeilen.size()][] würde hier reichen, da du später ganze Arrays der zweiten Dimension auswechselst.

Nur mit zum Verständnis, folgendes wäre ja möglich :

Code:
String[][] test = new String[10][];

test[0] = String[20];
test[1] = String[10];

System.out.println(test[0][15]); // Gibt "null" aus
System.out.println(test[1][15]); // Gibt ärger ;-)

Gruß JAdix
 
mmh ich wollte eigentlich nun diese hier, versuchen mit einem sogenannten zwischenarray aufzulösen und auszugeben, denn wie ich erfahren habe kommt der Axis2 mit einem zweidimensionalen Array nicht klar:

nur weiss ich nicht genau wie die Realisierung hier ausehen könnte.
Code:
Vector<Zelle[]> zeilen = new Vector<Zelle[]>();
while (rs.next()) {
    Zelle[] zeile = new Zelle[columns.length];
    for (int i = 0; i < columns.length; i++) {
	Zelle z = new Zelle();
	if (columns[i].getTyp().equals("NUMBER")) {
            z.setDoubleInhalt(rs.getDouble(i + 1));
	}
	if (columns[i].getTyp().equals("VARCHAR2")) {
            z.setStringInhalt(rs.getString(i + 1));
	} 
	if (columns[i].getTyp().equals("DATE")) {
            z.setDateInhalt(rs.getDate(i));
 	}
	zeile[i] = z;
    }
    zeilen.add(zeile);
}
Zelle[][] inhalt = new Zelle[zeilen.size()][];
int i=0;
for (Iterator it = zeilen.iterator(); it.hasNext();) {
    Zelle[] zeile = (Zelle[]) it.next();
    inhalt[i] = zeile;
    i++;
}
	
resp.setZellen(inhalt);
 
Zurück