-
Webservices über Axis-Tools aufrufen
Hallo,
hat zufällig schon mal jemand von Euch über die Axis-Tools einen Webservice über SSL mit Basic-Authentication aufgerufen? Ich hab das jetzt mit der Anleitung von IBM versucht:
https://www.ibm.com/support/pages/ho...n-rest-or-soap
Egal wie ich es versuche, ich erhalte vom Server immer einen Http 400 Fehler (Bad Request). Aus folgendem Axis-Trace werde ich leider auch nicht schlau.
Code:
30/11/2021 17:46:45:929 00000055 transport > HTTPTransport::openConnection():
30/11/2021 17:46:45:929 00000055 transport > HTTPTransport::closeConnection():
30/11/2021 17:46:45:929 00000055 transport > HTTPTransport::resetInputStateMachine():
30/11/2021 17:46:45:930 00000055 transport < HTTPTransport::resetInputStateMachine():
30/11/2021 17:46:45:930 00000055 transport > TCPChannel::close():
30/11/2021 17:46:45:930 00000055 transport < TCPChannel::close():
30/11/2021 17:46:45:930 00000055 transport < HTTPTransport::closeConnection():
30/11/2021 17:46:45:930 00000055 transport > TCPChannel::open():
30/11/2021 17:46:45:931 00000055 transport D TCPChannel::open(): Connecting to: apitest.payengine.de:443
30/11/2021 17:46:45:941 00000055 transport < TCPChannel::open():
30/11/2021 17:46:45:941 00000055 transport > TCPChannel::doSSLHandshake():
30/11/2021 17:46:45:942 00000055 transport > TCPChannel::createGSKitEnvironment():
30/11/2021 17:46:45:942 00000055 transport D TCPChannel::createGSKitEnvironment(): Attempting to set keyring file using '*SYSTEM'
30/11/2021 17:46:45:942 00000055 transport D TCPChannel::createGSKitEnvironment(): Disabling SSLV2
30/11/2021 17:46:45:943 00000055 transport D TCPChannel::createGSKitEnvironment(): Disabling SSLV3
30/11/2021 17:46:45:943 00000055 transport D TCPChannel::createGSKitEnvironment(): Disabling TLSV1
30/11/2021 17:46:45:943 00000055 transport D TCPChannel::createGSKitEnvironment(): Enabled TLSV11
30/11/2021 17:46:45:943 00000055 transport D TCPChannel::createGSKitEnvironment(): Enabled TLSV12
30/11/2021 17:46:45:943 00000055 transport < TCPChannel::createGSKitEnvironment(): Exit with return code of AXIS_SUCCESS
30/11/2021 17:46:45:975 00000055 transport < TCPChannel::doSSLHandshake(): Exit with boolean true
30/11/2021 17:46:45:975 00000055 transport < HTTPTransport::openConnection(): Exit with return code of AXIS_SUCCESS
30/11/2021 17:46:45:975 00000055 transport > HTTPTransport::flushOutput():
30/11/2021 17:46:45:976 00000055 transport > HTTPTransport::generateHTTPHeaders():
30/11/2021 17:46:45:976 00000055 transport > HTTPTransport::setTransportProperty():
30/11/2021 17:46:45:976 00000055 transport D HTTPTransport::setTransportProperty(): Transport property to set: Authorization=Basic dasistnureintestbase64code (replace=true)
30/11/2021 17:46:45:976 00000055 transport < HTTPTransport::setTransportProperty(): Exit with return code of AXIS_SUCCESS
30/11/2021 17:46:45:976 00000055 transport < HTTPTransport::generateHTTPHeaders():
30/11/2021 17:46:45:977 00000055 transport > TCPChannel::writeBytes():
30/11/2021 17:46:45:977 00000055 transport D TCPChannel::writeBytes(): Using SSL output stream.
30/11/2021 17:46:45:977 00000055 transport D TCPChannel::writeBytes():
GET /v1/orders HTTP/1.1
Host: apitest.payengine.de
Accept: application/json
Authorization: Basic dasistnureintestbase64code
30/11/2021 17:46:45:977 00000055 transport < TCPChannel::writeBytes(): Exit with integer value of 1114
30/11/2021 17:46:45:978 00000055 transport > HTTPTransport::resetOutputStateMachine():
30/11/2021 17:46:45:978 00000055 transport < HTTPTransport::resetOutputStateMachine():
30/11/2021 17:46:45:978 00000055 transport < HTTPTransport::flushOutput():
30/11/2021 17:46:45:978 00000055 engine < axiscTransportFlush():
30/11/2021 17:46:45:978 00000055 engine > axiscTransportReceive():
30/11/2021 17:46:45:978 00000055 engine D axiscTransportReceive(): user buffer length is 16000000
30/11/2021 17:46:45:979 00000055 engine D axiscTransportReceive(): reading transport data
30/11/2021 17:46:45:979 00000055 transport > HTTPTransport::getBytes():
30/11/2021 17:46:45:979 00000055 transport D HTTPTransport::getBytes(): number of bytes to read is 131072
30/11/2021 17:46:45:979 00000055 transport D HTTPTransport::getBytes(): GetBytesState: eWaitingForHTTPHeader
30/11/2021 17:46:45:979 00000055 transport D HTTPTransport::getBytes(): No data to read, so read HTTP header
30/11/2021 17:46:45:980 00000055 transport > HTTPTransport::readHTTPHeader():
30/11/2021 17:46:45:980 00000055 transport > HTTPTransport::resetInputStateMachine():
30/11/2021 17:46:45:980 00000055 transport < HTTPTransport::resetInputStateMachine():
30/11/2021 17:46:45:980 00000055 transport > TCPChannel::readBytes():
30/11/2021 17:46:45:980 00000055 transport D TCPChannel::readBytes(): Using SSL input stream.
30/11/2021 17:46:45:986 00000055 transport D TCPChannel::readBytes(): number of bytes read is 376
30/11/2021 17:46:45:986 00000055 transport D TCPChannel::readBytes():
HTTP/1.1 400 Bad Request
Date: Tue, 30 Nov 2021 16:46:46 GMT
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
30/11/2021 17:46:45:987 00000055 transport < TCPChannel::readBytes(): Exit with integer value of 376
30/11/2021 17:46:45:987 00000055 transport > HTTPTransport::processHTTPHeader():
30/11/2021 17:46:45:987 00000055 transport < HTTPTransport::processHTTPHeader():
30/11/2021 17:46:45:987 00000055 transport < HTTPTransport::readHTTPHeader():
30/11/2021 17:46:45:987 00000055 transport > HTTPTransport::getBytes_MessageHasContentLength():
30/11/2021 17:46:45:988 00000055 transport D HTTPTransport::getBytes_MessageHasContentLength(): Message has been completely received, input state is waiting for HTTP header
30/11/2021 17:46:45:988 00000055 transport D HTTPTransport::getBytes_MessageHasContentLength(): Bytes available to be consumed: 226
30/11/2021 17:46:45:988 00000055 transport < HTTPTransport::getBytes_MessageHasContentLength(): Exit with integer value of 226
30/11/2021 17:46:45:988 00000055 transport D HTTPTransport::getBytes(): copied 226/226 bytes to passed-in buffer
30/11/2021 17:46:45:988 00000055 transport < HTTPTransport::getBytes():
30/11/2021 17:46:45:988 00000055 engine D axiscTransportReceive(): transport status: TRANSPORT_FINISHED
30/11/2021 17:46:45:989 00000055 engine D axiscTransportReceive(): bytes read: 226
30/11/2021 17:46:45:989 00000055 transport > HTTPTransport::getTransportProperty():
30/11/2021 17:46:45:989 00000055 transport < HTTPTransport::getTransportProperty(): Exit with string "true"
30/11/2021 17:46:45:989 00000055 engine D axiscTransportReceive(): converting data from UTF8 to job CCSID
30/11/2021 17:46:45:989 00000055 engine D axiscTransportReceive(): total number of available bytes to read: 226
30/11/2021 17:46:45:990 00000055 engine < axiscTransportReceive():
30/11/2021 17:46:45:990 00000055 engine > axiscTransportReceive():
30/11/2021 17:46:45:990 00000055 engine D axiscTransportReceive(): user buffer length is 15999774
30/11/2021 17:46:45:990 00000055 engine D axiscTransportReceive(): total number of available bytes to read: 0
30/11/2021 17:46:45:990 00000055 engine < axiscTransportReceive():
Beim Service-Anbieter kommt angeblich gar kein Request an. Ich stehe jetzt irgendwie auf dem Schlauch.
Habt Ihr eine Idee wo der Fehler liegen könnte?
Danke,
KM
-
Hallo KM,
Da scheinen ja die Spezialisten beim Service-Anbieter zu sein
Nach deinem Log zu urteilen, hast die HTTP Verbindung (mit Basic-Auth geklappt) und du hast auch vom Server eine Antwort bekommen: HTTP 400 Bad Request.
Wenn sie nichts bei sich erkennen können, dann nur deshalb weil deren WebServer in solch einem Fall kein Log produziert, oder sie nicht wissen wo das Log zu finden ist.
Der Fehler scheint darin zu liegen, dass der Pfad in der URL nicht korrekt ist und dadurch der WebServer nicht weiß wohin er den Request leiten soll.
Oder deine HTTP Request Methode ist nicht die Erforderliche.
Ich glaube hier herauslesen zu können, dass du ein JSON schickst mit einem HTTP GET Request auf apitest.payengine.de/v1/orders?
Dies müsste dann eher ein POST Request sein.
Ich hoffe das hilft dir etwas weiter.
lg Andreas
-
... Natürlich könntest du das ganze auch über SQL machen.
Nach dem letzten TR ist das auch nicht mehr mit Java im Hintergrund, wodurch die Performance besser geworden ist (zumindest beim ersten Aufruf).
-
Hallo Andreas,
danke schon mal für Deine Antwort!
Der GET ist hier schon richtig. Es sollen nämlich alle Orders aufgelistet werden. Das steht auch so in der Webservice-Beschreibung. Ich schicke kein JSON mit. Ich hab nur den Header mit der Basic-Authentication. Mit einem anderen Webservice-Client (z.B. SoapUI) funktioniert der Aufruf ja auch. Es muss also irgendwie mit diesen Axis-Tools zu tun haben. Nur leider finde ich nicht heraus wo das Problem liegt, da ich alles so mache wie es von IBM beschrieben ist.
Ich sehe das eigentlich auch so, dass die Connection zustande kommt und nur irgendwas an der URI oder ähnliches nicht passt. Vielleicht eine Zeichencodierung oder sowas. Aber ich seh's halt nicht. Normalerweise sollte der Webservice-Anbieter das ja in seinen Logs sehen. Ich hab da auch nochmal hingeschrieben. Mal sehen was sie antworten.
Wir haben vergangenes Wochenende auch das neue TR installiert. So kann ich auch die neuen SQL-Funktionen (HTTP_GET, etc.) ohne Java im Hintergrund verwenden. Das hatte ich auch schon getestet und funktioniert. Die alten Funktionen (mit Java) waren einfach nicht performant genug. Deshalb hatte ich für uns ja diesen Wrapper über die Axis-Tools programmiert. Wenn ich das nun richtig sehe, scheinen diese neuen Funktionen wohl auch diese Axis-Tools im Hintergrund zu verwenden.
Das einzige Problem, das ich hiermit habe, ist dass es offenbar keine Funktion für einen Http PATCH gibt. Das benötigen wir aber, da bei den Webservices dieses Anbieters öfters auch PATCH erforderlich ist. Deshalb wollte ich eigentlich alles mit meinem Wrapper-Programm lösen.
Viele Grüße,
KM
-
Vielleicht fehlt dir ein Slash (/) am Ende der URL.
Man könnte auch 2 mal einen TCP Trace auf der IBM i starten.
Einmal mit einer funktionierenden Lösung (z.B. mit der SQL Funktion).
Und einmal mit dem Axis.
Das Ergebnis kann man dann dann miteinander auf Packetebene vergleichen.
Natürlich, wenn der Service Anbieter seine Logs lesen kann, oder das Debuglevel höher setzt um mehr Infos zu bekommen, ist es einfacher.
Similar Threads
-
By ML-Software in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 29-03-21, 11:22
-
By Flappes in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 23-02-21, 11:07
-
By MR-BN in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 02-10-15, 15:40
-
By Bergsoft in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 02-04-03, 06:22
-
By ppedv in forum Archiv NEWSboard Events
Antworten: 0
Letzter Beitrag: 24-10-02, 09:58
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks