2017-06-10 3 views
0

neu an Groovy übergeben, also bitte verzeihen Sie für den Mangel an Wissen (seit zwei Wochen groovig zu lernen). Wie auch immer, ich versuche, eine Soap-Anfrage an globalweather.asmx WSDL zu senden, während GetWeather als Parameter übergeben wird, anstatt XML-Text zu übergeben, aber ich kann nicht scheinen, das richtige Ergebnis zu erhalten. Ich habe versucht, nach einem Tutorial zu suchen, wie dies erreicht werden kann, aber es ist fehlgeschlagen, die meisten Tutorials geben das eigentliche XML weiter. Unten ist was ich bisher versucht habe.httpBuilder - GetWeather als Parameter

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1') 

import groovyx.net.http.ContentType 
import groovyx.net.http.HTTPBuilder 
import groovyx.net.http.Method 


def http  = new HTTPBuilder('http://www.webservicex.com/globalweather.asmx?WSDL') 
def postBody = ['Newark', 'USA']; 
//body = postBody 
println http.get(path: '', query: [GetWeather: postBody]) 

Antwort

1

Wir würden viel mehr Informationen benötigen wirklich, Ihnen zu helfen: versuchen Sie das WS als SOAP oder REST WebService anfordern? Wenn letzteres GET oder POST?

Da Sie die get Methode von HTTPBuilder verwenden, nehme ich an, dass Sie für die REST GET-Version gehen. In diesem Fall ist das, was Sie versuchen, das programmatische Äquivalent, Ihren Browser auf die URL http://www.webservicex.com/globalweather.asmx/GetWeather?CityName=Newark&CountryName=USA zu verweisen.

Lassen Sie uns zuerst analysieren, was das bedeutet. Wenn Sie auf diesen Link klicken, sendet Ihr Browser eine HTTP-GET-Anfrage an den Server www.webservicex.com. Diese Anfrage ist nichts besonderes, das einzige wirklich interessante Bit ist die URL selbst.

  • Gastgeber: www.webservicex.com
  • Der Weg: /globalweather.asmx/GetWeather
  • Die Abfrageparameter Allerdings wird der Server die URL in 3 Teilen (schematisiert der Einfachheit halber) zersetzen : [Cityname: 'Newark', Countryname: 'USA']

Wie Sie GetWeather sehen können, ist kein Parameter, sondern ein Teil selbst aus dem Weg. Außerdem, da es verwirrend aussieht, würde ich postBody, das wie eine Variable für den Hauptteil einer HTTP-POST-Anfrage aussieht, in query umbenennen (oder in diesem Fall die Daten direkt an die get-Methode übergeben).

Was uns die folgende Code gibt (auch nicht verwendete Importe zu entfernen):

import groovyx.net.http.HTTPBuilder 

def http  = new HTTPBuilder('http://www.webservicex.com/globalweather.asmx?WSDL') 
println http.get(path: '/globalweather.asmx/GetWeather', query: [CityName: 'Newark', CountryName: 'USA']) 

Welche arbeitet: der Wert zurückgegeben (Data Not Found) gleich wie wenn sie mit dem gleichen Eingang des Formular auf http://www.webservicex.com/New/Home/ServiceDetail/56 in einem Browser Werte.

Dokumentation verwendet:

+0

Ah, ich sehe, habe ich versucht, dies vor, aber bekam internen Serverfehler. Vielleicht etwas, auf das ich nicht achtete. Das hilft mir sehr, Danke! Auch die Verwirrung mit postBody tut mir leid. – xlordt