# java.lang.NullPointerException



## fenerli23 (24. Januar 2008)

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:


```
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...?!


----------



## fenerli23 (24. Januar 2008)

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?


----------



## Matze (24. Januar 2008)

1. Code
2. Hast du das Array auch initialisiert, bzw greifst du auch nur auf Felder mit Inhalt zu?


----------



## fenerli23 (24. Januar 2008)

Matze from HwI hat gesagt.:


> 1. Code
> 2. Hast du das Array auch initialisiert, bzw greifst du auch nur auf Felder mit Inhalt zu?



ich greife so zu:

```
zelle[0][0] [0][1] ....
zell[zeile][spalte]
```

hier noch code dazu:

```
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 ...


----------



## Matze (24. Januar 2008)

fenerli23 hat gesagt.:


> ```
> Zelle[] zeile = (Zelle[]) it.next();
> inhalt[i] = zeile;
> ```



Und das funktioniert .
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?


----------



## fenerli23 (24. Januar 2008)

Matze from HwI hat gesagt.:


> Und das funktioniert .
> 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...


----------



## TheJadix (24. Januar 2008)

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  :


```
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


----------



## fenerli23 (25. Januar 2008)

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.

```
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);
```


----------

