Learn web services


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

Utolsó frissítés dátuma: 2019. február 17., Verzió 1.1.2

Bevezetés


TL;DR

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

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.

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 szabá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.

Példák


További webszolgáltatások

Celsius és Fahrenheit váltás

Egy példa webszolgáltatás

Egy SOAP webszolgáltatás található http://www.learnwebservices.com/services/hello címen, mely egy nevet vár, és egy üdvözlőszöveget ad vissza.

A SOAP webszolgáltatás WSDL dokumentuma elérhető a http://www.learnwebservices.com/services/hello?WSDL címen. (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ó.

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>
      <SayHello xmlns="http://learnwebservices.com/services/hello">
         <HelloRequest>
            <Name>John Doe</Name>
         </HelloRequest>
      </SayHello>
   </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>
      <SayHelloResponse xmlns="http://learnwebservices.com/services/hello">
         <HelloResponse>
            <Message>Hello John Doe!</Message>
         </HelloResponse>
      </SayHelloResponse>
   </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, un. 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>

Hívása SoapUI használatával

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 http://www.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.

Egy példa SoapUI projekt elérhető a GitHubon.

CURL

Tipp: ez az oldal letölthető a curl használatával is a curl www.learnwebservices.com paranccsal.

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><SayHello xmlns="http://learnwebservices.com/services/hello"> \
  <HelloRequest><Name>John Doe</Name></HelloRequest> \
  </SayHello></soapenv:Body></soapenv:Envelope>' \
  http://www.learnwebservices.com/services/hello

Hívása Javaban JAX-WS RI-vel vagy CXF-fel

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.

URL url = new URL("http://www.learnwebservices.com/services/hello?wsdl");
HelloEndpointService service = new HelloEndpointService(url);
HelloEndpoint port = service.getHelloEndpointPort();
HelloRequest request = new HelloRequest();
request.setName("John Doe");
HelloResponse response = port.sayHello(request);
System.out.println(response.getMessage());

Egy példa Java JAX-WS RI kliens elérhető a GitHubon.

Egy példa Java CXF kliens elérhető a GitHubon.

Hívása Javaban Spring Web Services-zel

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

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

JAXBElement<SayHelloResponse> response = (JAXBElement<SayHelloResponse>)
        webServiceTemplate.marshalSendAndReceive(new ObjectFactory().createSayHello(sayHello));

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

Egy példa Java Spring Web Services kliens elérhető a GitHubon.

Hívás Apache Axis2/Java library-vel

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.SayHello sayHello = 
        new HelloEndpointServiceStub.SayHello();
sayHello.setHelloRequest(helloRequest);

HelloEndpointServiceStub.SayHelloE sayHelloE = 
        new HelloEndpointServiceStub.SayHelloE();
sayHelloE.setSayHello(sayHello);

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

Egy példa Java Axis2 kliens elérhető a GitHubon.

JMeter

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!

A JMeter projekt elérhető GitHubon.

Hívása Pythonban

Használható a Zeep keretrendszer.

wsdl = 'http://www.learnwebservices.com/services/hello?wsdl'
client = zeep.Client(wsdl=wsdl)
request = {'Name': 'John Doe'}
print(client.service.SayHello(request))

Egy példa Python kliens elérhető a GitHubon.

Vanilla JS

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).

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

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

 fetch(url, fetchData)
   .then(function(response) {
     return response.text();
   })
   .then(function(xml) {
       var 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.

Egy példa Node.js kliens elérhető a GitHubon.

Hívása Node.js esetén

Használható a SOAP projekt.

var soap = require('soap');
var url = 'http://www.learnwebservices.com/services/hello?wsdl';
var args = {HelloRequest: {Name: 'John Doe'}};
soap.createClient(url, function(err, client) {
    client.SayHello(args, function(err, result) {
        console.log(result.HelloResponse.Message);
    });
});

Egy példa Node.js kliens SOAP keretrendszerrel elérhető a GitHubon.

Hívása .NET Core keretrendszerrel C# nyelven

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

Egy példa C# kliens elérhető a GitHubon.