Webservice per Javascript ansprechen

M

malt1981

Mitglied
Hallo zusammen,
ich versuche mich gerade in Webservices. Mein Plan wäre, einen Webservice per Javascript anzusprechen.
Hierfür habe ich einen rudimentären Webservice in Eclipse erstellt. Ich nutze openJDK11 und einen Tomcat9 Webserver (Axis 1).
Der Webservice scheint zu funktionieren, da ich ihn mit der SoapUi ansprechen kann. Request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test">
<soapenv:Header/>
<soapenv:Body>
<test:adder>
<test:a>5</test:a>
<test:b>1</test:b>
</test:adder>
</soapenv:Body>
</soapenv:Envelope>

liefert

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<adderResponse xmlns="http://test">
<adderReturn>6</adderReturn>
</adderResponse>
</soapenv:Body>
</soapenv:Envelope>

Leider bekomme ich es aber nicht hin, dass ein Javascript einen Respons liefert. Ich hätte es wie folgt versucht:

<html>
<head>
<title>SOAP JavaScript Client Test</title>
<script type="text/javascript">
function soap() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://localhost:8080/WebServiceTest/services/Adder', true);
xmlhttp.setRequestHeader('Content-Type', 'text/xml');

var sr =
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test">' +
'<soapenv:Header/>' +
'<soapenv:Body>' +
'<test:adder>' +
'<test:a>5</test:a>' +
'<test:b>1</test:b>' +
'</test:adder>' +
'</soapenv:Body>' +
'</soapenv:Envelope>';

xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert(xmlhttp.responseText);
// alert('done. use firebug/console to see network response');
}
}
}
// Send the POST request

xmlhttp.send(sr);

// send request

var res = xmlhttp.responseText;
alert(res);
}
</script>
</head>
<body>
<form name="Demo" action="" method="post">
<div>
<input type="button" value="SoaP" onclick="soap();" />
</div>
</form>
</body>
</html>

Ich bekomme einfach kein Ergebnis.
Ich habe mir schon die Finger wund gegoogelt, leider wirds nicht besser.

Ich wäre über jede Hilfe sehr dankbar.
 
mihe7

mihe7

Top Contributor
ich versuche mich gerade in Webservices. Mein Plan wäre, einen Webservice per Javascript anzusprechen.
Ist SOAP zwingend? Ansonsten einfach REST-Services verwenden. Außerdem: nutz die Fetch API.

Unabhängig davon: die HTML/JS Seite muss von der gleichen Quelle (Domain/Port) geliefert werden. Ist dies nicht der Fall, handelt es sich um einen Cross-Origin-Request, der aufgrund der Same-Origin-Policy der Browser "nicht einfach so" zugelassen wird. Vielmehr muss der Server einen solchen Zugriff explizit erlauben (CORS Header).
 
M

malt1981

Mitglied
Unabhängig davon: die HTML/JS Seite muss von der gleichen Quelle (Domain/Port) geliefert werden.

Vielen Dank, das wars. Der Vollständigkeit halber: Ich habe noch ergänzt:
xmlhttp.setRequestHeader( "SOAPAction", 'testStringRequest' );

Als Anfänger habe ich aber nun doch noch ein Verständnisproblem:
Wenn HTML/JS von der gleichen Quelle wie der WebService kommen müssen, wie kann man dann einen "fremden" WebService ansprechen?
Sorry für die doofe Frage, muss noch viel lernen.
Danke auch für den Tipp mit REST, schaue ich mir als Alternative auch an.
 
H

httpdigest

Top Contributor
Folgende Möglichkeiten:
1. CORS (wie von @mihe7 ja bereits erwähnt)
2. Du lädtst das JavaScript von der Domäne des fremden WebServices (falls dieser einen JavaScript-Client bereitstellt) - Same Origin Policy bedeutet ja nur, dass JavaScript, welches von Domäne X geladen wurde, nur XHR Requests auf diese Domäne ausführen darf. Du kannst aber sehr wohl JavaScript einer anderen Domäne Y laden (z.B. per <script src="https://Y/whatever.js"></script>, so dass dieses JavaScript dann Aufrufe auf diese Domäne Y durchführen darf.
3. Üblicherweise ruft man keine WebServices vom Frontend aus auf, sondern tut dies in seinem eigenen Backend. Also triggerst du vom Frontend/Browser aus per irgendwie geartetem Request dein Backend und dieses ruft dann Drittservices auf
 
M

malt1981

Mitglied
ok, vielen Dank für die Aufklärung. Wenn Variante 3 die Übliche ist, mache ich mich wohl auf diesen Weg :)
Danke euch beiden.
 
mihe7

mihe7

Top Contributor
Wobei man bei Punkt 3 von @httpdigest anmerken muss, dass sich die Aussage in erster Linie auf Services (meist Dritter) bezieht, die für die Anwendungslogik relevant sind.

Anders formuliert: es gibt selbstverständlich Services, die man vom Frontend aus anspricht. Das sind häufig z. B. "REST"-Services, mit denen Daten zwischen Frontend und Backend ausgetauscht werden, vornehmlich im JSON-Format (REST habe ich dabei mal in Anführungszeichen gesetzt, da diese oft nicht das charakteristische Kriterium erfüllen, im Praxis-Alltag trotzdem so bezeichnet werden). Daneben können aber auch Dienste vom Frontend angesprochen werden, die nur für das Frontend interessant sind (z. B. Kartendienste wie WMS/WMTS oder Geocoding APIs, ggf. auch Abfragen fremder Datenbanken, wenn es nur um die Anzeige der Ergebnisse geht, Wetterdienste usw. usf.)

Möglichkeiten gibt es auf jeden Fall mehr als genug :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Mit Javascript eine Textdatei auslesen... HTML / CSS 28
S jqmath in javascript einbinden HTML / CSS 3
M Javascript: HTML-Datei erstellen und auf Festplatte speichern HTML / CSS 8
M Javascript: Farbkontrast überprüfen auf einer Webseite HTML / CSS 14
M Javascript: CSS Parsen um herauszufinden ob relativer Schriftgrößen verwendet werden HTML / CSS 23
M HTML-Code einer fremden Webseite auslesen - geht das mit Javascript HTML / CSS 19
S Sicherheitsaspekt JavaScript HTML / CSS 3
G php in javascript einbinden HTML / CSS 13
E Javascript/ Eventlistener ohne click? HTML / CSS 2
A Nur bestimmte Zeichen in HTML input Feld erlauben (JavaScript) HTML / CSS 11
J JavaScript Woerter erkenen HTML / CSS 4
C Eclipse und Javascript full autocomplete? HTML / CSS 1
A DragDrop mehrerer Shapes im SVG per Javascript? HTML / CSS 0
M Javascript Tastatureingabe HTML / CSS 2
B javascript ausgabe in Text HTML / CSS 2
E Javascript Status Abfrage HTML / CSS 7
J Javascript im DOM einer Webseite ändern HTML / CSS 1
H javascript - html Beispiel LQH, verwirklichung HTML / CSS 1
P JavaScript var an bean Setter übergeben HTML / CSS 2
Z Erste Website CSS3 HTML5 Javascript Jquery - Kritik HTML / CSS 3
P RSS FEED/ JSON/ Filter By Date/ Handlebars / Javascript HTML / CSS 0
B Externes Suchfeld - Javascript. REST? HTML / CSS 0
S JavaScript und Ajax Erfahrene Gesucht!!!! HTML / CSS 0
V Javascript Adobe Acrobat XI Pro Formular Dropdown-Liste -> vorbelegte Checkboxen HTML / CSS 1
0 Javascript Leaflet Marker Popup mit Adresse HTML / CSS 1
J Element ohne Klasse oder ID ansprechen HTML / CSS 2
A class über diverse For-Schleifen und if-Bedingungen ansprechen HTML / CSS 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben