Skip to main content
Dear FME community,

 

 

we have a webservice with a SOAP interface. The service gives the geometries for linestrings. We have tested it with the following request in the firefox plugin RESTClient.

 

Some of the attributes in the xml request are dynamic, for example: pVNK, pNNK, pVST and

 

pBST. They are read from an excel spread and change for each request.

 

 

We want to create the same response in FME to get the geometries like the result in firefox. Already tried the SOAPSender, but it's not described what to enter in parameters.

 

 

Anyone here with experience in the SOAP field who can help?

 

 

Kind regards

 

Thomas 
 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.saxhisto.list.smwa.de/">    <soapenv:Header/>    <soapenv:Body>       <web:gibAktuellenAbschnitt>          <pVNK>4540047O</pVNK>          <pNNK>4440019O</pNNK>          <pVST>72</pVST>          <pBST>554</pBST>       </web:gibAktuellenAbschnitt>    </soapenv:Body> </soapenv:Envelope>
 

 

The result is: 
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">     <soap:Body>     <ns2:gibAktuellenAbschnittResponse xmlns:ns2="http://webservice.saxhisto.list.smwa.de/">     <return>     <ablaenge>1767</ablaenge>     <bisStation>554</bisStation>     <geometry>4532142.19,5705969.5 4532144.02,5705972.29 4532147.81,5705978.85 4532173.82,5706028.09 4532192.51,5706063.7 4532212.21,5706101.33 4532220.54,5706115.98 4532230.64,5706133.4 4532245.04,5706156.38 4532261.7,5706182.89 4532286.71,5706222.54 4532314.99,5706268.25 4532333.42,5706297.79 4532363.22,5706344.51 4532378.12,5706368.75 4532420.54,5706435.92 4532490.49,5706546.53 4532521.55,5706595.78 4532630.39,5706768.76 4532674.34,5706838.46 4532738.73,5706940.23 4532769.54,5706988.46 4532783.67,5707010.43 4532789.73,5707020.02 4532806.15,5707047.3 4532812.97,5707060.18 4532817.01,5707069.77 4532821.56,5707080.88 4532826.6,5707093.51 4532832.41,5707108.91 4532841.51,5707132.39 4532852.11,5707159.17 4532862.21,5707183.16 4532876.86,5707216.74 4532890.49,5707245.66 4532918.53,5707302.6 4532928.88,5707323.06 4532947.07,5707355.63 4532973.83,5707401.85 4532997.57,5707440.48 4533030.4,5707496.3</geometry>     <gueltigvon>2010-07-16T00:00:00+02:00</gueltigvon>     <klasse>B</klasse>     <nnk>4440019</nnk>     <nummer>2</nummer>     <vnk>4540047</vnk>     <vonStation>72</vonStation>     <wkt>LINESTRING (4532176.329437762 5706032.871224113, 4532212.21 5706101.33, 4532220.54 5706115.98, 4532230.64 5706133.4, 4532245.04 5706156.38, 4532261.7 5706182.89, 4532286.71 5706222.54, 4532314.99 5706268.25, 4532333.42 5706297.79, 4532363.22 5706344.51, 4532378.12 5706368.75, 4532420.54 5706435.92, 4532426.703234856 5706445.665752786)</wkt>     <zusatz>     </zusatz>     <id>S894A969198C049489248C84313D2C58A</id>     </return>     </ns2:gibAktuellenAbschnittResponse>     </soap:Body>     </soap:Envelope>
 Our attemps in the SOAPSender:

 

0684Q00000ArEzkQAF.png

 

 

In the attribute _result is the following: 
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.saxhisto.list.smwa.de/">    <soapenv:Header/>    <soapenv:Body>       <web:gibAktuellenAbschnitt>          <pVNK>{fme:get-attribute("Anfangs-Netzknoten")}</pVNK>          <pNNK>{fme:get-attribute("End-Netzknoten")}</pNNK>          <pVST>{fme:get-attribute("Von Station")}</pVST>          <pBST>{fme:get-attribute("Nach Station")}</pBST>       </web:gibAktuellenAbschnitt>    </soapenv:Body> </soapenv:Envelope>
I got the following solution from the developer of the transformer, Juan Chu Chow from Safe. It works perfectly.

 

  
 You’ll need to route the “SOAP body” onto an XMLTemplater transformer first to populate the <pVNK>, <pNNK>, etc… elements first.   In the attached I placed some dummy uri namespaces the “web” and the default namespace, I don’t know what their namespace are, so you’ll need to route this:   <web:gibAktuellenAbschnitt xmlns="dummy:what:is:default:ns" xmlns:web="dummy:what:is:web:ns">          <pVNK>{fme:get-attribute("Anfangs-Netzknoten")}</pVNK>          <pNNK>{fme:get-attribute("End-Netzknoten")}</pNNK>          <pVST>{fme:get-attribute("Von Station")}</pVST>          <pBST>{fme:get-attribute("Nach Station")}</pBST>       </web:gibAktuellenAbschnitt>   Into the XMLTemplater, make sure your feature has corresponding “Anfangs-Netzknoten”, “End-Netzknoten”, … attributes populated.   The result attribute will become the input for the “SOAP Body” in the “SOAPSender” custom transformer.   The SOAP request being sent in the attached workspace looks something like this:   ‘_soap_request' has value `<?xml version="1.0" encoding="UTF-8"?> <soap11:Envelope xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"> <soap11:Header>                             </soap11:Header> <soap11:Body>             <web:gibAktuellenAbschnitt xmlns="dummy:what:is:default:ns" xmlns:web="dummy:what:is:web:ns">          <pVNK>4540047O</pVNK>          <pNNK>4440019O</pNNK>          <pVST>72</pVST>          <pBST>554</pBST>       </web:gibAktuellenAbschnitt>          </soap11:Body> </soap11:Envelope>
 

 

Kind regards

 

Thomas

 

 

Hello @Thomas,

Do you have a complete example of a workbench how to proces a soapsend request?


Reply