# SOAP-Nachricht mit Java



## haeppchen (15. Nov 2005)

Hallo zusammen, 

ich habe ein Java-Programm, dass eine SOAP-Nachricht an einen Web-Service schickt und eine entsprechende Antwort auf der Konsole ausgeben soll. 

Leider läuft meine Applikation noch nicht. 

Ich schicke folgende Nachricht an den Service: 

< ?xml version="1.0" encoding="UTF-8"? > 
< soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
< soapenv:Body > 
< ns1:add soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:SOAPService" > 
< number1 xsi:type="xsd:int" >123< /number1 > 
< number2 xsi:type="xsd:int" >12< /number2 > 
< /ns1:add > 
< /soapenv:Body > 
< /soapenv:Envelope > 

und erhalte jedesmal folgenden Fehler: 
java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/axis/SOAPService.jws 

Ist meine SOAP-Nachricht von der Syntax her falsch? 
Mein Service heißt "SOAPService" und meine Methode "add". 
Diese Methode bekommt die beiden Parameter "number1" und "number2" übergeben. 

Ich bin für jede Hilfe dakbar. 
Bei Bedarf kann ich auch noch den Code des SOAPClient posten. 

MfG 
Simon


----------



## Bleiglanz (16. Nov 2005)

kannst du ins logfile des Server schauen? bei einem 500er ist da sicher was drin

und bei < ?xml ist doch hoffentlich kein Blank zwischen < und ?


----------



## haeppchen (17. Nov 2005)

Folgende Meldung wird auf dem Server (Apache Tomcat 5.5.12) ausgegeben:
- Unable to find config file. Creating new servlet engine config file: /WEB-INF/server-config.wsdd

Hier der Fehlercode, der auf der Konsole ausgegeben wird:
java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/axis/SOAPService.jws at sun.net.www.protocol.http.HttpURLConnection.getInp utStream(Unknown Source) at SOAPClient.main(SOAPClient.java:52)

Ich nutze momentan folgenden Code:


```
public class SOAPClient 
{
private static StringBuffer sb = new StringBuffer();
public static String server = "http://localhost:8080/axis/SOAPService.jws";
public static String SOAP_ACTION = "http://localhost:8080/axis/SOAPService.jws";
 
public static void main(String[] args) 
{ 
    try 
    {
        URL u = new URL(server);
        URLConnection uc = u.openConnection();
        HttpURLConnection connection = (HttpURLConnection) uc;
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("SOAPAction", SOAP_ACTION);
        OutputStream out = connection.getOutputStream();
        Writer wout = new OutputStreamWriter(out);

        // die Methode soap() schreibt die SOAP-Nachricht
        // wie bereits beim ersten Posting zu sehen
        wout.write(soap().toString());
        wout.flush();
        wout.close();
 
        OutputStream out = connection.getOutputStream();
        Writer wout = new OutputStreamWriter(out);
        wout.write(soap().toString());
        wout.flush();
        wout.close();
 
         // in folgender Zeile tritt die Exception auf
        InputStream in = connection.getInputStream();
        int length;
        byte[] bytearray = new byte[1000];
 
        while ((length = in.read(bytearray)) != -1) 
        {
            System.out.write(bytearray, 0, length);
        }
        in.close();
    } 
    catch (IOException ioe)
    {ioe.printStackTrace();}
}
```


Ich bin wirklich ratlos, denn über den Internet Explorer kann ich den Server bspw. wie folgt aufrufen
http://localhost:8080/axis/SOAPService.jwsmethod=add&number1=3&number2=2
und erhalte eine korrekte Response.

Wer kann mir weiterhelfen?
Gruß Simon


----------



## Guest (17. Nov 2005)

Hilft das hier?
	
	
	
	





```
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/SOAPService")); 
// oder doch [url]http://localhost:8080/axis/services/SOAPService[/url] 
call.setOperation("add");
Integer result = (Integer)call.invoke(new Object[] {Integer.valueOf(3), Integer.valueOf(2)} );
```
Dies ernspricht dem Aufruf von http://localhost:8080/axis/SOAPService?method=add&number1=3&number2=2
im Browser.


----------



## haeppchen (17. Nov 2005)

Danke erstmal für deinen Tipp.
Das wäre sicherlich eine Alternative.

Aber es muss doch auch so gehen, wie von mir bereits implementiert.
Mir fehlt ja "nur" die server-config.wsdd Datei. ("Unable to find config file. Creating new servlet engine config file: /WEB-INF/server-config.wsdd")
Kann ich die nachträglich einfügen/generieren?


----------



## Guest (17. Nov 2005)

Zuerst wird die Konfigurationsdatei in WEB-INF der Anwendung gesucht, 
dann im Classpath. In axis.jar ist auch eine drin.


----------



## haeppchen (17. Nov 2005)

Habe die service-config.wsdd mal ins Verzeichnis /WEB-INF kopiert. Der Classpath ist auch gesetzt.
Aber ich kriege weiterhin die Fehlermeldung.

Liegt vielleicht ein Installationsfehler vor?


----------



## Guest (17. Nov 2005)

haeppchen hat gesagt.:
			
		

> Liegt vielleicht ein Installationsfehler vor?


Was sagt HappyAxis dazu?  :wink: 
http://localhost:8080/axis/happyaxis.jsp


----------



## Guest (17. Nov 2005)

Wenn ich das hier
...axis\WEB-INF\lib\*axis.jar*\org\apache\axis\server\server-config.wsdd
nach 
...axis\WEB-INF\server-config.wsdd
kopiere, dann wird die Warnung nicht mehr angezeigt.


----------

