Learn web services

Ingyenes, publikus, példa SOAP webszolgáltatások

Utolsó frissítés dátuma: 2022. június 12.
Verzió 2.0.0

Bevezetés


TL;DR

Ha szükséged van egy webszolgáltatásra, amit gyorsan kipróbálhasz, itt egy WSDL, és mögötte egy működő SOAP webszolgáltatás:

Ismeretlen

(A WSDL dokumentum egy XML dokumentum, melyet a Firefox nem jelenít meg, csak a View Page Source menüpontra kattintva. A WSDL állomány olvasható formában itt található.

Az oldal célja

Ez az oldal azért jött létre, hogy ingyenes, publikus példa SOAP webszolgáltatásokat biztosítson tanuláshoz, oktatáshoz, kísérletezéshez. Az itt található webszolgáltatások kitűnőek a technológia bemutatásához és megismeréséhez, különböző eszközök és keretrendszerek teszteléséhez. Ezen webszolgáltatásokat lehet használni dokumentációkban, példákban, tutoriálokban, videókban, hisz célom, hogy hosszú távon megmaradjanak. Az oldalon ezen kívül megtalálhatóak különböző programozási nyelven implementált kliens programok (forráskóddal együtt), melyek jó kiindulási alapot biztosíthatnak a technológia használatba vételéhez. Gyakran frissítem ezeket, ahogy kijönnek a nyelvek és keretrendszerek új verziói.

Ha kérdésed van, felteheted ebben a Gitter szobában.

Webszolgáltatásokról

A SOAP webszolgáltatások alkalmazások közötti adatcserére valók. XML és főleg HTTP(S) technológiákra támaszkodnak. Ezért ember és számítógép által is könnyen értelmezhetőek, valamint a legtöbb platformon használhatóak, ezért különösen alkalmasak különböző platformon és programozási nyelven fejlesztett alkalmazások együttműködésére. A SOAP webszolgáltatások az OASIS és W3C szabványügyi szervezetek által karbantartott szabványokon nyugszanak. WS-I szervezet több profilt fejlesztett ki a különböző implementációk együttműködésének segítségére. A SOAP egy XML alapú üzenetformátum, mely egy SOAP borítékot definiál, melyben az üzenetek utaznak. A WSDL szintén egy XML alapú interfészleíró nyelv. A SOAP webszolgáltatásokat a modernebb, egyszerűbben használható RESTful webszolgáltatások kezdik kiszorítani. Azonban még történeti jelleggel sok helyen találhatóak SOAP webszolgáltatások, melyekhez modern programokból is csatlakozni kell.

Részletek


Egy példa webszolgáltatás

A webszolgáltatás egy nevet vár, és egy üdvözlőszöveget ad vissza.

A címre a következő formátumban kell posztolni egy XML dokumentumot (a WSDL-ben leírtaknak megfelelően). A Name tag értéke tetszőlegesen módosítható.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
        <HelloRequest xmlns="http://learnwebservices.com/services/hello">
          <Name>John Doe</Name>
        </HelloRequest>
   </soapenv:Body>
</soapenv:Envelope>

Ennek hatására a SOAP webszolgáltatás a következő válaszüzenetet adja vissza. A név alapján változó üzenetet a Message tag tartalmazza.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
        <HelloResponse xmlns="http://learnwebservices.com/services/hello">
          <Message>Hello John Doe!</Message>
        </HelloResponse>
   </soap:Body>
</soap:Envelope>

Hibakezelés

Amennyiben hiba történik a webszolgáltatás hívása közben, pl. hibás üzenetet küldünk be, ún. SOAP faultot kapunk.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: Unexpected '&lt;' character in element (missing closing '>'?)
 at [row,col {unknown-source}]: [6,13]</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

További webszolgáltatások


Celsius to Fahrenheit converter

Ismeretlen

Szerver alkalmazás


Egy Spring Boot alkalmazás szolgálja ki a példa webszolgáltatásokat.

Forráskód

Az alkalmazás elérhető a Docker Hub-on is.

A következő paranccsal futtatható.

docker run -p 8080:8080 --name my-lwsapp vicziani/lwsapp

Utána elérhető a http://localhost:8080 címen!

Kliens Implementációk


SoapUI használatával a hivatalos dokumentáció alapján létre kell hozni egy új SOAP projektet, és a Initial WSDL beviteli mezőben megadni a https://apps.learnwebservices.com/services/hello?WSDL címet, majd kiválasztani bal oldalon a SayHello operációt, és megnyitni a Request 1 példa kérést. A nevet megadni a Name tagen belül lehet. Majd meg kell nyomni a zöld Submit request gombot.

Kattints a képre, ha egy animációt néznél meg arról, hogy kell SoapUI-jal kérést létrehozni!

SoapUI projekt fájl

Kattints a képre, ha egy animációt néznél meg arról, hogy kell egy Postman kérést létrehozni!

Postman Collection fájl

Az Apache JMeter használható SOAP webszolgáltatások terheléses tesztelésére is.

Kattints a képre, ha egy animációt néznél meg arról, hogy kell egy JMeter projektet létrehozni!

JMeter projekt fájl

A webszolgáltatás a curl segítségével is meghívható a következő módon. Egyrészt POST metódust kell használni, majd meg kell adni, hogy a tartalom típusa XML, végül a http kérés törzsében az elküldendő SOAP kérést.

curl --request POST --header "Content-Type: text/xml;charset=UTF-8"  \
  --data '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/> \
  <soapenv:Body> \
  <HelloRequest xmlns="http://learnwebservices.com/services/hello"><Name>John Doe</Name></HelloRequest> \
  </soapenv:Body></soapenv:Envelope>' \
  https://apps.learnwebservices.com/services/hello

A webszolgáltatás Wget parancs használatával a következő módon hívható meg.

wget -qO - --header "Content-Type: text/xml;charset=UTF-8"  \
  --post-data '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/> \
  <soapenv:Body> \
  <HelloRequest xmlns="http://learnwebservices.com/services/hello"><Name>John Doe</Name></HelloRequest> \
  </soapenv:Body></soapenv:Envelope>' \
  https://apps.learnwebservices.com/services/hello

A webszolgáltatás HTTPie parancs használatával a következő módon hívható meg.

echo '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/> \
  <soapenv:Body> \
  <HelloRequest xmlns="http://learnwebservices.com/services/hello"><Name>John Doe</Name></HelloRequest> \
  </soapenv:Body></soapenv:Envelope>' | \
  http -b POST https://apps.learnwebservices.com/services/hello  'Content-Type:text/xml;charset=UTF-8'

SOAP webszolgáltatás meghívása Javaban JAX-WS RI library-vel, jaxws-maven-plugin Maven pluginnel.

A kód ugyanez CXF library-vel és cxf-codegen-plugin Maven pluginnel.

HelloEndpointService service = new HelloEndpointService();
HelloEndpoint port = service.getHelloEndpointPort();
HelloRequest request = new HelloRequest();
request.setName("John Doe");
HelloResponse response = port.sayHello(request);
System.out.println(response.getMessage());

Forráskód JAX-WS RI-vel

Forráskód Java CXF-fel

Javaban Spring Web Services library-vel, JAX-B marshallerrel, maven-jaxb2-plugin Maven pluginnel.

HelloRequest helloRequest = new HelloRequest();
helloRequest.setName("John Doe");

JAXBElement<HelloResponse> response = (JAXBElement<HelloResponse>)
        webServiceTemplate.marshalSendAndReceive(new ObjectFactory().createHelloRequest(helloRequest));

System.out.println(response.getValue().getMessage());

Forráskód

A következő kód mutatja be, hogy kell webszolgáltatást hívni Apache Axis2/Java library, Axis2 Databinding Framework és axis2-wsdl2code-maven-plugin Maven plugin használatával.

HelloEndpointServiceStub stub =
        new HelloEndpointServiceStub();

HelloEndpointServiceStub.HelloRequest helloRequest =
        new HelloEndpointServiceStub.HelloRequest();
helloRequest.setName("John Doe");

HelloEndpointServiceStub.HelloRequestE sayHelloE =
        new HelloEndpointServiceStub.HelloRequestE();
sayHelloE.setHelloRequest(helloRequest);

HelloEndpointServiceStub.HelloResponseE sayHelloResponseE =
        stub.sayHello(sayHelloE);
System.out.println(sayHelloResponseE
        .getHelloResponse()
        .getMessage());

Forráskód

Webszolgáltatás hívása Goovy nyelven groovy-wslite library használatával.

@Grab('com.github.groovy-wslite:groovy-wslite:1.1.2')
import wslite.soap.*

def client = new SOAPClient('https://apps.learnwebservices.com/services/hello')
def response = client.send {
    body {
        HelloRequest('xmlns':'http://learnwebservices.com/services/hello') {
          Name("John Doe")
        }
    }
}

println(response.HelloResponse.Message)

Forráskód

Használható a Zeep library.

wsdl = 'https://apps.learnwebservices.com/services/hello?wsdl'
client = zeep.Client(wsdl=wsdl)
request = 'John Doe'
print(client.service.SayHello(request))

Forráskód

A webszolgáltatást böngészőből is meg lehet hívni, ha ugyanazon a domainen van, vagy be van állítva a Cross-Origin Resource Sharing (CORS).

const url = "https://apps.learnwebservices.com/services/hello";
const request = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <HelloRequest xmlns="http://learnwebservices.com/services/hello">
            <Name>John Doe</Name>
        </HelloRequest>
    </soapenv:Body>
 </soapenv:Envelope>`;

 const fetchData = {
    method: 'POST',
    body: request
 };

 fetch(url, fetchData)
   .then(function(response) {
     return response.text();
   })
   .then(function(xml) {
       const xmlDoc = new DOMParser().parseFromString(xml, "text/xml");
       console.log(xmlDoc.getElementsByTagNameNS("http://learnwebservices.com/services/hello", "Message")[0].textContent);
   })
   .catch(function(error) {
     console.log("Error calling webservice: " + error);
   });

Az alábbi űrlapon a gombra kattintva megtörténik a webszolgáltatás hívás.

Forráskód

Használható a SOAP projekt.

const soap = require("soap");
const url = "https://apps.learnwebservices.com/services/hello?wsdl";
const args = {Name: "John Doe"};
soap.createClient(url, function(err, client) {
    client.SayHello(args, function(err, result) {
        console.log(result.Message);
    });
});

Forráskód

HelloEndpointClient proxy = new HelloEndpointClient();
var request = new helloRequest
{
    Name = "John Doe"
};
var response = await proxy.SayHelloAsync(request);
Console.WriteLine(response.Body.HelloResponse.Message);

Forráskód

A következő példa mutatja, hogy kell webszolgáltatás hívni Ruby-ban, Savon library használatával.

require 'savon'

client = Savon.client(wsdl: 'https://apps.learnwebservices.com/services/hello?WSDL')
response = client.call(
  :say_hello,
  soap_action: '',
  message: { 'Name' => 'John Doe' }
)
puts response.body[:hello_response][:message]

Forráskód

A következő példa mutatja, hogy kell webszolgáltatás hívni PHP-ban, SOAP bővítménnyel.

<?php

$client = new SoapClient('https://apps.learnwebservices.com/services/hello?wsdl');
echo $client
	->SayHello(
		[
				'Name' => 'John Doe'
		]
	)
	->Message
;

Forráskód

Közreműködők