Permalänk
Medlem

Posta SOAP med Java

Hej,

Jag har krånglat tillräckligt med detta nu känns det som. Är det någon som vet någon schysst guide eller bara ett svar på hur man postar en SOAP request med Java.
Problemet jag har nu är att jag inte lyckas ta emot hela svaret från Web Servicen!

Använder mig av följande kod. Säg gärna till om detta är helt fel metod!

String hostname = "xx.xx.se" int port = 80; InetAddress addr = InetAddress.getByName(hostname); System.out.println(addr.toString()); Socket sock = new Socket(addr, port); //Send header String path = "/RequestService.svc/ws"; BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8")); wr.write("POST " + path + " HTTP/1.1\r\n"); wr.write("Host: "+hostname+"\r\n"); wr.write("Content-Length: " + xmldata.length() + "\r\n"); wr.write("Content-Type: application/soap+xml; charset=\"utf-8\"\r\n"); wr.write("\r\n"); //Send data wr.write(xmldata); wr.flush(); // Response BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream(),"UTF-8"),20); String line; int i = 0; while((line = rd.readLine()) != null && i < 16) { i++; System.out.println("-- " + line.toString()); }

Det jag får tillbaka är

-- HTTP/1.1 200 OK -- Content-Length: 742 -- Content-Type: application/soap+xml; charset=utf-8 -- Server: Microsoft-IIS/7.5 -- X-Powered-By: ASP.NET -- Date: Wed, 17 Aug 2011 06:22:23 GMT --

Det går ett tag och sen får jag felmeddelandet: java.net.SocketException: Connection Reset

Jag har googlat satan men kan inte begripa hur jag ska fortsätta.

Visa signatur

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan

Permalänk

http://stackoverflow.com/questions/669764/how-to-consume-wcf-...

Jag hade strul med nått liknande och lösningen för mig den gången var att lägga till en "Expect: 100-continue" header. Osäker om samma gäller för ditt fall, jag har inte tid att läsa så noga just nu.

Permalänk
Medlem

Testa att stänga din BufferedWriter efter att du skrivit färdigt din request. Om den hålls öppen kanske (?) webbservern tolkar det som att du vill skicka mer data.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Testa att stänga din BufferedWriter efter att du skrivit färdigt din request. Om den hålls öppen kanske (?) webbservern tolkar det som att du vill skicka mer data.

Det fungerar tyvärr inte, blir det "SocketException: socket closed" eftersom Socketen håller den öppen och läser från den under hela anslutningen. Tack ändå, värt att testa.

Visa signatur

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan

Permalänk
Medlem
Skrivet av ePoint:

Det fungerar tyvärr inte, blir det "SocketException: socket closed" eftersom Socketen håller den öppen och läser från den under hela anslutningen. Tack ändå, värt att testa.

Finns det någon särskild anledning till att du bara vill läsa 16 rader, eller att din BufferedReader har en kapacitet på 20 bytes? Testa att köra utan dessa.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Hej!

Jag blandar mig in i det hela och spekulerar också

Då du verkar få en korrekt header-del från servern så kanske det är så att det svar du får från servern helt enkelt inte avslutas med ett enterslag? Ditt anrop till readLine försöker ju läsa in så mycket tecken den kan tills den får ett enterslag. Nu när den inte gör det så blir den "givetvis" sur och slänger ett exception.

//C

PS. Om du inte vill hålla på och fippla med det där manuellt så kan du ju alltid kolla in en java-standard för att anropa SOAP-tjänster dvs JAX-WS http://download.oracle.com/docs/cd/E17802_01/webservices/webs...