2016-05-04 8 views
0

ich bei Erzeugen einer POST-Meldung aus AnyPoint Studio bin Fehler:Fehler beim Senden der HTTP-Anfrage. Nachrichtennutzlast ist vom Typ: HashMap

Was ich versuche Schlüssel-Wert-Paar zu erreichen, ist mit 3 eine POST zu unserem Kykloud api Endpunkt zu senden, wie die Payload als x-www-form-urlencodierten Inhalt.

Dies ist die aktuelle visuelle Setup:

enter image description here

(Nebenbei bemerkt:. Ich weiß, dass seine schlechte Praxis Geheimnisse zu speichern und Login-Daten in der normalen Ansicht Ich werde versuchen, herauszufinden, wie man dies richtig zu tun später)

die entsprechende XML wie folgt aussieht:

<flow name="LoginFlow"> 
    <set-payload value="#[['ApiToken': 'xxxXXXxxxXXXxxxXXX']]" doc:name="Set ApiToken"/> 
    <set-payload value="#[['Email':'serv[at]someaddress.com']]" doc:name="Set Email"/> 
    <set-payload value="#[['Password':'VeryLongPenis']]" doc:name="Set Password"/> 
    <http:request config-ref="KyklouConnectorns" path="/api/v2/sessions?format=json" method="POST" doc:name="Login to Kykloud" port="80" /> 
    <logger level="INFO" message="SessionId is #[message.payload.'SessionId']" doc:name="Logger"></logger> 
</flow> 

In der Theorie sollte die Antwort einige JSON mit einem Sessi sein onId-Objekt darin.

Was ich eigentlich in POSTMAN empfangen ist:

Error sending HTTP request. Message payload is of type: HashMap 

Offensichtlich ich etwas falsch mache meine Nutzlast bei der Definition, aber sie Dokumentation zu diesem Thema ist nicht klar, wie es die richtige Art und Weise zu tun:

HTTP Request Body Die Mule Message-Payload wird in ein Byte Array konvertiert und als HTTP-Request-Body gesendet. Dieses Verhalten wird aus immer ausgeführt, außer in den folgenden Szenarien:

Die Mule Nachricht der Payload eine Karte von Schlüsseln und Werten

Die Nachricht

Outbound-Anhänge hat

Generieren Sie die Anfrage Körper mit Content- Geben Sie Folgendes ein: application/x-form-urlencoded Immer wenn die Nachricht Nutzlast eine Zuordnung ist, generiert der Connector automatisch eine HTTP-Anfrage mit der Kopfzeile Content-Type: application/x-www-form-urlencoded. Die Schlüssel und Werte der Karte in der Nutzlast werden in Formparameterschlüssel und Werte in den Hauptteil der HTTP-Anforderung konvertiert.

+0

Es sagt, die Nutzlast ist eine Karte von Schlüsseln und Werten. Sie haben eine HashMap. Während sie ähnlich sind, sind sie nicht genau gleich. Bevor Sie Ihren Code zum Senden der Nachricht ausführen, konvertieren Sie Ihre hashmap in eine Map mit 'Map map2 = myHashMap;' – MattCorr

+0

@MattCorr Ich hätte sagen sollen, dass dies mein erster Tag mit diesem Produkt ist und ich keine Ahnung wie um dies in XML zu tun. – Marco

Antwort

0

Sie brauchen nicht einen Satz Nutzlast für jeden der Parameter ei (Benutzername/PWD/api Token) in Satz Nutzlast zu tun haben, werden Sie nur die Inhalte, die Sie veröffentlichen wollen, die nicht in Ihrem Fall benötigt wird . Sie müssen (username/pwd/api-Token) als Header in Ihrer HTTP-Anfrage festlegen. Zusätzlich zu den obigen drei müssen Sie möglicherweise auch den Content-Typ als application/json setzen, dies hängt von Ihrer API ab.

+0

Das ist falsch. Kykloud verlangt diese kvps im Körper der Anfrage. – Marco

+0

Dann versuchen Sie, alle 3 Schlüssel-Werte zusammen in einem Set-Payload zu setzen. Was Sie tun, würde am Ende die Nutzlast überschreiben, das ist nicht gut. – scorpion

+0

Ich habe jede mögliche Kombination ausprobiert.Da wir das alles nicht können, haben wir Mulesoft vorerst aufgegeben. – Marco