informatiCup / informatiCup2020

Pandemie!
https://informaticup.github.io/informatiCup2020/
20 stars 5 forks source link

Fehlerausgabe bei Input in die Exe #15

Closed Mathu1998 closed 4 years ago

Mathu1998 commented 4 years ago

Wenn wir mit der Exe (Kommandozeilenwerkzeug) unsere, in AWS erzeugte, Schnittstelle anfragen, lässt sich in der Logdatei festellen, dass bei der ersten Antwort eine "normale" erste Runde an die Schnittstelle übergeben wird. Die Exe registriert/akzeptiert unsere Antwort ("{\"type\": \"endRound\"}") jedoch nicht und gibt uns erneut eine "erste Runde Antwort", diesmal jedoch mit einem error (failed to decode action). Liegt das daran, dass unsere Schnittstelle den falschen Datentypen zurückgibt bzw. welchen Datentyp erwartet die Exe?

Erste Antwort: Erster Request

Zweite Antwort mit Fehler: Zweiter Request mit Fehler

ghost commented 4 years ago

Ich vermute, dass ihr ein API Gateway verwendet und dieses falsch konfiguriert ist. Bitte stellt die Ausgabe einer Anfrage mit HTTPie (oder einem vergleichbaren Tool) hier zur Verfügung. Im unteren Beispiel ist die Adresse des Webservice der Beispiellösung (localhost:50123) durch die Adresse eures Webservice zu ersetzen.

http localhost:50123 round=1 outcome='pending'

HTTPie-Ausgabe:

HTTP/1.0 200 OK
Content-Length: 20
Content-Type: application/json
Date: Fri, 22 Nov 2019 15:48:31 GMT
Server: WSGIServer/0.2 CPython/3.8.0

{
    "type": "endRound"
}

Siehe auch https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-getting-started-with-rest-apis.html.

Mathu1998 commented 4 years ago

Unsere Ausgabe sieht wie folgt aus. Möglicherweise ist es noch wichtig anzumerken, dass wir die Antwort in AWS durch einen, in Java geschriebenen, requestHandler erzeugen. Wir haben aus Testgründen zwei Schnittstellen bereitgestellt, die jeweils mit einem String bzw. JSON-Objekt antworten.

Ausgabe als String:

Ausgabe String

Ausgabe als JSON:

Ausgabe JSON

ghost commented 4 years ago

Tatsächlich ist "{\"type\": \"endRound\"}" gültiges JSON, bildet aber den String {"type": "endRound"} ab. Das Kommandozeilenwerkzeug erwartet ein Objekt in JSON. Vielleicht hilft https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-pojo.html.

ghost commented 4 years ago

Ich wollte mit meinem etwas kryptischen Beitrag sagen, dass euer zweiter Webservice auch einen String in JSON zurückgibt :o)

Mathu1998 commented 4 years ago

Vielen Dank für die Hilfe, mittlerweile haben wir es geschafft :)