Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

5
Task/SOAP/00-META.yaml Normal file
View file

@ -0,0 +1,5 @@
---
category:
- Less Than 10 Examples
from: http://rosettacode.org/wiki/SOAP
note: Networking and Web Interaction

3
Task/SOAP/00-TASK.txt Normal file
View file

@ -0,0 +1,3 @@
In this task, the goal is to create a SOAP client which accesses functions defined at '''http://example.com/soap/wsdl''', and calls the functions '''soapFunc( )''' and '''anotherSoapFunc( )'''.
{{Clarify_task}}

View file

@ -0,0 +1,16 @@
import mx.rpc.soap.WebService;
import mx.rpc.events.ResultEvent;
var ws:WebService = new WebService();
ws.wsdl = 'http://example.com/soap/wsdl';
ws.soapFunc.addEventListener("result",soapFunc_Result);
ws.anotherSoapFunc.addEventListener("result",anotherSoapFunc_Result);
ws.loadWSDL();
ws.soapFunc();
ws.anotherSoapFunc();
// method invocation callback handlers
private function soapFunc_Result(event:ResultEvent):void {
// do something
}
private function anotherSoapFunc_Result(event:ResultEvent):void {
// do another something
}

View file

@ -0,0 +1,11 @@
WS_Initialize()
WS_Exec("Set client = CreateObject(""MSSOAP.SoapClient"")")
WS_Exec("client.MSSoapInit ""http://example.com/soap/wsdl""")
callhello = client.soapFunc("hello")
callanother = client.anotherSoapFunc(34234)
WS_Eval(result, callhello)
WS_Eval(result2, callanother)
Msgbox % result . "`n" . result2
WS_Uninitialize()
#Include ws4ahk.ahk ; http://www.autohotkey.net/~easycom/ws4ahk_public_api.html

54
Task/SOAP/C/soap-1.c Normal file
View file

@ -0,0 +1,54 @@
#include <curl/curl.h>
#include <string.h>
#include <stdio.h>
size_t write_data(void *ptr, size_t size, size_t nmeb, void *stream){
return fwrite(ptr,size,nmeb,stream);
}
size_t read_data(void *ptr, size_t size, size_t nmeb, void *stream){
return fread(ptr,size,nmeb,stream);
}
void callSOAP(char* URL, char * inFile, char * outFile) {
FILE * rfp = fopen(inFile, "r");
if(!rfp)
perror("Read File Open:");
FILE * wfp = fopen(outFile, "w+");
if(!wfp)
perror("Write File Open:");
struct curl_slist *header = NULL;
header = curl_slist_append (header, "Content-Type:text/xml");
header = curl_slist_append (header, "SOAPAction: rsc");
header = curl_slist_append (header, "Transfer-Encoding: chunked");
header = curl_slist_append (header, "Expect:");
CURL *curl;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_data);
curl_easy_setopt(curl, CURLOPT_READDATA, rfp);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, wfp);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)-1);
curl_easy_setopt(curl, CURLOPT_VERBOSE,1L);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
int main(int argC,char* argV[])
{
if(argC!=4)
printf("Usage : %s <URL of WSDL> <Input file path> <Output File Path>",argV[0]);
else
callSOAP(argV[1],argV[2],argV[3]);
return 0;
}

10
Task/SOAP/C/soap-2.c Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dom="http://example.com/soap/wsdl">
<soapenv:Header/>
<soapenv:Body>
<dom:soapFunc soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</soapenv:Body>
</soapenv:Envelope>

10
Task/SOAP/C/soap-3.c Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dom="http://example.com/soap/wsdl">
<soapenv:Header/>
<soapenv:Body>
<dom:anotherSoapFunc soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</soapenv:Body>
</soapenv:Envelope>

View file

@ -0,0 +1,5 @@
(require '[clj-soap.core :as soap])
(let [client (soap/client-fn "http://example.com/soap/wsdl")]
(client :soapFunc)
(client :anotherSoapFunc))

View file

@ -0,0 +1,3 @@
<cfset client = createObject("webservice","http://example.com/soap/wsdl")>
<cfset result = client.soapFunc("hello")>
<cfset result = client.anotherSoapFunc(34234)>

View file

@ -0,0 +1,9 @@
apt_knowledge(webservices); // Commanding apt_protocol(SOAP); will also apt_knowledge(webservices);
set_namespace(rosettacode);
add_webserv(ws)_protocol(SOAP)_wdsl(http://example.com/soap/wsdl)_me();
invoke_webserv(ws)_soapFunc(hello)_msg()_result()_me();
me_msg()_invoke(ws)_anotherSoapFunc(32234); // alternative syntax
reset_namespace();

View file

@ -0,0 +1,5 @@
open Microsoft.FSharp.Data.TypeProviders
type Wsdl = WsdlService<"http://example.com/soap/wsdl">
let result = Wsdl.soapFunc("hello")
let result2 = Wsdl.anotherSoapFunc(34234)

53
Task/SOAP/Go/soap-1.go Normal file
View file

@ -0,0 +1,53 @@
package main
import (
"fmt"
"github.com/tiaguinho/gosoap"
"log"
)
type CheckVatResponse struct {
CountryCode string `xml:"countryCode"`
VatNumber string `xml:"vatNumber"`
RequestDate string `xml:"requestDate"`
Valid string `xml:"valid"`
Name string `xml:"name"`
Address string `xml:"address"`
}
var (
rv CheckVatResponse
)
func check(err error) {
if err != nil {
log.Fatal(err)
}
}
func main() {
// create SOAP client
soap, err := gosoap.SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl")
// map parameter names to values
params := gosoap.Params{
"vatNumber": "6388047V",
"countryCode": "IE",
}
// call 'checkVat' function
err = soap.Call("checkVat", params)
check(err)
// unmarshal response to 'rv'
err = soap.Unmarshal(&rv)
check(err)
// print response
fmt.Println("Country Code : ", rv.CountryCode)
fmt.Println("Vat Number : ", rv.VatNumber)
fmt.Println("Request Date : ", rv.RequestDate)
fmt.Println("Valid : ", rv.Valid)
fmt.Println("Name : ", rv.Name)
fmt.Println("Address : ", rv.Address)
}

7
Task/SOAP/Go/soap-2.go Normal file
View file

@ -0,0 +1,7 @@
import soap
procedure main(A)
soap := SoapClient(A[1] | "http://example.com/soap/wsdl") # Allow override of default
write("soapFunc: ",soap.call("soapFunc"))
write("anotherSoapFunc: ",soap.call("anotherSoapFunc"))
end

20
Task/SOAP/Go/soap-3.go Normal file
View file

@ -0,0 +1,20 @@
import soap
procedure main()
server := SoapServer("http://example.com/soap/wsdl")
server.addService("soapFunc", soapFunc)
server.addService("anotherSoapFunc", anotherSoapFunc)
msg := server.handleRequest()
write(msg)
exit(0)
end
procedure soapFunc(A[])
every (s := " ") ||:= (!A || " ")
return "Hello" || s[1:-1]
end
procedure anotherSoapFunc(A[])
every (s := " ") ||:= (!A || " ")
return "Goodbye" || s[1:-1]
end

View file

@ -0,0 +1,31 @@
using LibCURL
function callSOAP(url, infilename, outfilename)
rfp = open(infilename, "r")
wfp = open(outfilename, "w+")
header = curl_slist_append(header, "Content-Type:text/xml")
header = curl_slist_append(header, "SOAPAction: rsc");
header = curl_slist_append(header, "Transfer-Encoding: chunked")
header = curl_slist_append(header, "Expect:")
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, URL)
curl_easy_setopt(curl, CURLOPT_POST, 1L)
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_data)
curl_easy_setopt(curl, CURLOPT_READDATA, rfp)
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data)
curl_easy_setopt(curl, CURLOPT_WRITEDATA, wfp)
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header)
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)-1)
curl_easy_setopt(curl, CURLOPT_VERBOSE,1L)
curl_easy_perform(curl)
curl_easy_cleanup(curl)
end
try
callSOAP(ARGS[1], ARGS[2], ARGS[3])
catch y
println("Usage : $(@__FILE__) <URL of WSDL> <Input file path> <Output File Path>")
end

View file

@ -0,0 +1,59 @@
// Kotlin Native v0.6
import kotlinx.cinterop.*
import platform.posix.*
import libcurl.*
fun writeData(ptr: COpaquePointer?, size: size_t, nmeb: size_t, stream: COpaquePointer?)
= fwrite(ptr, size, nmeb, stream?.reinterpret<FILE>())
fun readData(ptr: COpaquePointer?, size: size_t, nmeb: size_t, stream: COpaquePointer?)
= fread(ptr, size, nmeb, stream?.reinterpret<FILE>())
fun callSOAP(url: String, inFile: String, outFile: String) {
val rfp = fopen(inFile, "r")
if (rfp == null) {
perror("Read File Open: ")
exit(1)
}
val wfp = fopen(outFile, "w+")
if (wfp == null) {
perror("Write File Open: ")
fclose(rfp)
exit(1)
}
var header: CPointer<curl_slist>? = null
header = curl_slist_append (header, "Content-Type:text/xml")
header = curl_slist_append (header, "SOAPAction: rsc")
header = curl_slist_append (header, "Transfer-Encoding: chunked")
header = curl_slist_append (header, "Expect:")
val curl = curl_easy_init()
if (curl != null) {
curl_easy_setopt(curl, CURLOPT_URL, url)
curl_easy_setopt(curl, CURLOPT_POST, 1L)
curl_easy_setopt(curl, CURLOPT_READFUNCTION, staticCFunction(::readData))
curl_easy_setopt(curl, CURLOPT_READDATA, rfp)
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, staticCFunction(::writeData))
curl_easy_setopt(curl, CURLOPT_WRITEDATA, wfp)
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header)
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, -1L)
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L)
curl_easy_perform(curl)
curl_easy_cleanup(curl)
}
curl_slist_free_all(header)
fclose(rfp)
fclose(wfp)
}
fun main(args: Array<String>) {
if (args.size != 3) {
println("You need to pass exactly 3 command line arguments, namely :-")
println(" <URL of WSDL> <Input file path> <Output File Path>")
return
}
callSOAP(args[0], args[1], args[2])
}

View file

@ -0,0 +1,3 @@
InstallService["http://example.com/soap/wsdl"];
soapFunc["Hello"];
anotherSoapFunc[12345];

14
Task/SOAP/PHP/soap.php Normal file
View file

@ -0,0 +1,14 @@
<?php
//load the wsdl file
$client = new SoapClient("http://example.com/soap/definition.wsdl");
//functions are now available to be called
$result = $client->soapFunc("hello");
$result = $client->anotherSoapFunc(34234);
//SOAP Information
$client = new SoapClient("http://example.com/soap/definition.wsdl");
//list of SOAP types
print_r($client->__getTypes());
//list if SOAP Functions
print_r($client->__getFunctions());
?>

8
Task/SOAP/Perl/soap.pl Normal file
View file

@ -0,0 +1,8 @@
use SOAP::Lite;
print SOAP::Lite
-> service('http://example.com/soap/wsdl')
-> soapFunc("hello");
print SOAP::Lite
-> service('http://example.com/soap/wsdl')
-> anotherSoapFunc(34234);

58
Task/SOAP/Phix/soap.phix Normal file
View file

@ -0,0 +1,58 @@
(notonline)-->
<span style="color: #000080;font-style:italic;">--
-- demo\rosetta\SOAP.exw
-- =====================
--
-- translated from https://gist.github.com/p120ph37/8281362ae9da042f3043
--</span>
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (libcurl)</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #000000;">libcurl</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #000000;">xml</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- xml_encode()</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">write_callback</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">pData</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">size</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">nmemb</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000080;font-style:italic;">/*pUserdata*/</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">bytes_written</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">size</span><span style="color: #0000FF;">*</span><span style="color: #000000;">nmemb</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">peek</span><span style="color: #0000FF;">({</span><span style="color: #000000;">pData</span><span style="color: #0000FF;">,</span><span style="color: #000000;">bytes_written</span><span style="color: #0000FF;">}))</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">bytes_written</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">write_cb</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">call_back</span><span style="color: #0000FF;">({</span><span style="color: #008000;">'+'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">write_callback</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">compose_soap_frobnicate</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">foo</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">bar</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">baz</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&gt;
&lt;soap:Body&gt;
&lt;frobnicate xmlns="http://example.com/frobnicate"&gt;
&lt;foo&gt;%s&lt;/foo&gt;
&lt;bar&gt;%s&lt;/bar&gt;
&lt;baz&gt;%s&lt;/baz&gt;
&lt;/frobnicate&gt;
&lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;"""</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">xml_encode</span><span style="color: #0000FF;">(</span><span style="color: #000000;">foo</span><span style="color: #0000FF;">),</span><span style="color: #000000;">xml_encode</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bar</span><span style="color: #0000FF;">),</span><span style="color: #000000;">xml_encode</span><span style="color: #0000FF;">(</span><span style="color: #000000;">baz</span><span style="color: #0000FF;">)})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #7060A8;">curl_global_init</span><span style="color: #0000FF;">()</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">curl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_easy_init</span><span style="color: #0000FF;">()</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CURLOPT_URL</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"https://ameriwether.com/cgi-bin/info.pl"</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">soap</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">compose_soap_frobnicate</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"'Ein'"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"&gt;Zwei&lt;"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"\"Drei\""</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CURLOPT_POSTFIELDS</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">soap</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CURLOPT_HTTPAUTH</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CURLAUTH_BASIC</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CURLOPT_USERNAME</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"user"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CURLOPT_PASSWORD</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"password"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CURLOPT_WRITEFUNCTION</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">write_cb</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">headers</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">NULL</span>
<span style="color: #000000;">headers</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_slist_append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">headers</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Content-Type: text/xml; charset=utf-8"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">headers</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_slist_append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">headers</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"SOAPAction: \"https://ameriwether.com/cgi-bin/info.pl/frobnicate\""</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">headers</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_slist_append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">headers</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Accept: text/plain"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- Example output easier to read as plain text.</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CURLOPT_HTTPHEADER</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">headers</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- Make the example URL work even if your CA bundle is missing.</span>
<span style="color: #7060A8;">curl_easy_setopt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CURLOPT_SSL_VERIFYPEER</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">false</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">CURLcode</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_easy_perform</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">!=</span><span style="color: #004600;">CURLE_OK</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"curl_easy_perform() failed: %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">curl_easy_strerror</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #7060A8;">curl_slist_free_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">headers</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_easy_cleanup</span><span style="color: #0000FF;">(</span><span style="color: #000000;">curl</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">curl_global_cleanup</span><span style="color: #0000FF;">()</span>
<!--

View file

@ -0,0 +1,5 @@
XIncludeFile "COMatePLUS.pbi"
Define.COMateObject soapObject = COMate_CreateObject("MSSOAP.SoapClient")
soapObject\Invoke("MSSoapInit('http://example.com/soap/wsdl')")
result = soapObject\Invoke("soapFunc('hello')")
result2 = soapObject\Invoke("anotherSoapFunc(34234)")

4
Task/SOAP/Python/soap.py Normal file
View file

@ -0,0 +1,4 @@
from SOAPpy import WSDL
proxy = WSDL.Proxy("http://example.com/soap/wsdl")
result = proxy.soapFunc("hello")
result = proxy.anotherSoapFunc(34234)

12
Task/SOAP/Raku/soap.raku Normal file
View file

@ -0,0 +1,12 @@
# Reference:
# https://github.com/retupmoca/P6-SOAP
# http://wiki.dreamfactory.com/DreamFactory/Tutorials/Temp_Conversion_SOAP_API
use v6;
use SOAP::Client;
my $request = SOAP::Client.new('http://www.w3schools.com/xml/tempconvert.asmx?WSDL') or die;
say $request.call('CelsiusToFahrenheit', Celsius => 100 ) or die;
say $request.call('FahrenheitToCelsius', Fahrenheit => 212 ) or die;

10
Task/SOAP/Ruby/soap.rb Normal file
View file

@ -0,0 +1,10 @@
require 'soap/wsdlDriver'
wsdl = SOAP::WSDLDriverFactory.new("http://example.com/soap/wsdl")
soap = wsdl.create_rpc_driver
response1 = soap.soapFunc(:elementName => "value")
puts response1.soapFuncReturn
response2 = soap.anotherSoapFunc(:aNumber => 42)
puts response2.anotherSoapFuncReturn

View file

@ -0,0 +1,7 @@
| service client response1 response2 |
service := SprayWSDLService onUrl: 'http://example.com/soap/wsdl'.
client := service createClient.
response1 := client send: 'soapFunc' withArguments:{ 'hello' }.
response2 := client send: 'anotherSoapFunc' withArguments:{ 34234 }.

9
Task/SOAP/Tcl/soap.tcl Normal file
View file

@ -0,0 +1,9 @@
package require WS::Client
# Grok the service, and generate stubs
::WS::Client::GetAndParseWsdl http://example.com/soap/wsdl
::WS::Client::CreateStubs ExampleService ;# Assume that's the service name...
# Do the calls
set result1 [ExampleService::soapFunc "hello"]
set result2 [ExampleService::anotherSoapFunc 34234]

View file

@ -0,0 +1,6 @@
variables
string result1, result2
endvariables
activate "webservice".soapFunc("hello", result1)
activate "webservice".anotherSoapFunc(34234, result2)

View file

@ -0,0 +1,6 @@
Dim client
Dim result
Set client = CreateObject("MSSOAP.SoapClient")
client.MSSoapInit "http://example.com/soap/wsdl"
result = client.soapFunc("hello")
result = client.anotherSoapFunc(34234)

View file

@ -0,0 +1,10 @@
LOCAL oSoapClient AS OBJECT //OLEAUTOOBJECT
LOCAL cUrl AS STRING
LOCAL uResult AS USUAL
oSoapClient := OLEAutoObject{"MSSOAP.SoapClient30"}
cUrl := "http://example.com/soap/wsdl"
IF oSoapClient:fInit
oSoapClient:mssoapinit(cUrl,"", "", "" )
uResult := oSoapClient:soapFunc("hello")
uResult := oSoapClient:anotherSoapFunc(34234)
ENDIF

View file

@ -0,0 +1,67 @@
/* soap.wren */
var CURLOPT_URL = 10002
var CURLOPT_POST = 47
var CURLOPT_READFUNCTION = 20012
var CURLOPT_READDATA = 10009
var CURLOPT_WRITEFUNCTION = 20011
var CURLOPT_WRITEDATA = 10001
var CURLOPT_HTTPHEADER = 10023
var CURLOPT_POSTFIELDSIZE_LARGE = 30120
var CURLOPT_VERBOSE = 41
foreign class File {
foreign static url
foreign static readFile
foreign static writeFile
construct open(filename, mode) {}
}
foreign class CurlSlist {
construct new() {}
foreign append(s)
}
foreign class Curl {
construct easyInit() {}
foreign easySetOpt(opt, param)
foreign easyPerform()
foreign easyCleanup()
}
var soap = Fn.new { |url, inFile, outFile|
var rfp = File.open(inFile, "r")
if (rfp == 0) Fiber.abort("Error opening read file.")
var wfp = File.open(outFile, "w+")
if (wfp == 0) Fiber.abort("Error opening write file.")
var header = CurlSlist.new()
header = header.append("Content-Type:text/xml")
header = header.append("SOAPAction: rsc")
header = header.append("Transfer-Encoding: chunked")
header = header.append("Expect:")
var curl = Curl.easyInit()
if (curl == 0) Fiber.abort("Error initializing cURL.")
curl.easySetOpt(CURLOPT_URL, url)
curl.easySetOpt(CURLOPT_POST, 1)
curl.easySetOpt(CURLOPT_READFUNCTION, 0) // read function to be supplied by C
curl.easySetOpt(CURLOPT_READDATA, rfp)
curl.easySetOpt(CURLOPT_WRITEFUNCTION, 0) // write function to be supplied by C
curl.easySetOpt(CURLOPT_WRITEDATA, wfp)
curl.easySetOpt(CURLOPT_HTTPHEADER, header)
curl.easySetOpt(CURLOPT_POSTFIELDSIZE_LARGE, -1)
curl.easySetOpt(CURLOPT_VERBOSE, 1)
curl.easyPerform()
curl.easyCleanup()
}
soap.call(File.url, File.readFile, File.writeFile)

192
Task/SOAP/Wren/soap-2.wren Normal file
View file

@ -0,0 +1,192 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "wren.h"
/* C <=> Wren interface functions */
char *url, *read_file, *write_file;
size_t write_data(void *ptr, size_t size, size_t nmeb, void *stream) {
return fwrite(ptr, size, nmeb, stream);
}
size_t read_data(void *ptr, size_t size, size_t nmeb, void *stream) {
return fread(ptr, size, nmeb, stream);
}
void C_url(WrenVM* vm) {
wrenSetSlotString(vm, 0, url);
}
void C_readFile(WrenVM* vm) {
wrenSetSlotString(vm, 0, read_file);
}
void C_writeFile(WrenVM* vm) {
wrenSetSlotString(vm, 0, write_file);
}
void C_fileAllocate(WrenVM* vm) {
FILE** fp = (FILE**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(FILE*));
const char *filename = wrenGetSlotString(vm, 1);
const char *mode = wrenGetSlotString(vm, 2);
*fp = fopen(filename, mode);
}
void C_curlSlistAllocate(WrenVM* vm) {
wrenSetSlotNewForeign(vm, 0, 0, sizeof(struct curl_slist*));
}
void C_curlAllocate(WrenVM* vm) {
CURL** pcurl = (CURL**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(CURL*));
*pcurl = curl_easy_init();
}
void C_append(WrenVM* vm) {
struct curl_slist** plist = (struct curl_slist**)wrenGetSlotForeign(vm, 0);
const char *s = wrenGetSlotString(vm, 1);
*plist = curl_slist_append(*plist, s);
}
void C_easyPerform(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
curl_easy_perform(curl);
}
void C_easyCleanup(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
curl_easy_cleanup(curl);
}
void C_easySetOpt(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
CURLoption opt = (CURLoption)wrenGetSlotDouble(vm, 1);
if (opt < 10000) {
long lparam = (long)wrenGetSlotDouble(vm, 2);
curl_easy_setopt(curl, opt, lparam);
} else if (opt < 20000) {
if (opt == CURLOPT_WRITEDATA || opt == CURLOPT_READDATA) {
FILE *fp = *(FILE**)wrenGetSlotForeign(vm, 2);
curl_easy_setopt(curl, opt, fp);
} else if (opt == CURLOPT_URL) {
const char *url = wrenGetSlotString(vm, 2);
curl_easy_setopt(curl, opt, url);
} else if (opt == CURLOPT_HTTPHEADER) {
struct curl_slist* header = *(struct curl_slist**)wrenGetSlotForeign(vm, 2);
curl_easy_setopt(curl, opt, header);
}
} else if (opt < 30000) {
if (opt == CURLOPT_READFUNCTION) {
curl_easy_setopt(curl, opt, &read_data);
} else if (opt == CURLOPT_WRITEFUNCTION) {
curl_easy_setopt(curl, opt, &write_data);
}
} else {
curl_off_t cparam = (curl_off_t)wrenGetSlotDouble(vm, 2);
curl_easy_setopt(curl, opt, cparam);
}
}
WrenForeignClassMethods bindForeignClass(WrenVM* vm, const char* module, const char* className) {
WrenForeignClassMethods methods;
methods.allocate = NULL;
methods.finalize = NULL;
if (strcmp(module, "main") == 0) {
if (strcmp(className, "File") == 0) {
methods.allocate = C_fileAllocate;
} else if (strcmp(className, "CurlSlist") == 0) {
methods.allocate = C_curlSlistAllocate;
} else if (strcmp(className, "Curl") == 0) {
methods.allocate = C_curlAllocate;
}
}
return methods;
}
WrenForeignMethodFn bindForeignMethod(
WrenVM* vm,
const char* module,
const char* className,
bool isStatic,
const char* signature) {
if (strcmp(module, "main") == 0) {
if (strcmp(className, "File") == 0) {
if (isStatic && strcmp(signature, "url") == 0) return C_url;
if (isStatic && strcmp(signature, "readFile") == 0) return C_readFile;
if (isStatic && strcmp(signature, "writeFile") == 0) return C_writeFile;
} else if (strcmp(className, "CurlSlist") == 0) {
if (!isStatic && strcmp(signature, "append(_)") == 0) return C_append;
} else if (strcmp(className, "Curl") == 0) {
if (!isStatic && strcmp(signature, "easySetOpt(_,_)") == 0) return C_easySetOpt;
if (!isStatic && strcmp(signature, "easyPerform()") == 0) return C_easyPerform;
if (!isStatic && strcmp(signature, "easyCleanup()") == 0) return C_easyCleanup;
}
}
return NULL;
}
static void writeFn(WrenVM* vm, const char* text) {
printf("%s", text);
}
void errorFn(WrenVM* vm, WrenErrorType errorType, const char* module, const int line, const char* msg) {
switch (errorType) {
case WREN_ERROR_COMPILE:
printf("[%s line %d] [Error] %s\n", module, line, msg);
break;
case WREN_ERROR_STACK_TRACE:
printf("[%s line %d] in %s\n", module, line, msg);
break;
case WREN_ERROR_RUNTIME:
printf("[Runtime Error] %s\n", msg);
break;
}
}
char *readFile(const char *fileName) {
FILE *f = fopen(fileName, "r");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
rewind(f);
char *script = malloc(fsize + 1);
fread(script, 1, fsize, f);
fclose(f);
script[fsize] = 0;
return script;
}
int main(int argc, char **argv) {
if (argc != 4 ) {
printf("Usage : %s <URL of WSDL> <Input file path> <Output file path>", argv[0]);
return 0;
}
url = argv[1];
read_file = argv[2];
write_file = argv[3];
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.errorFn = &errorFn;
config.bindForeignClassFn = &bindForeignClass;
config.bindForeignMethodFn = &bindForeignMethod;
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* fileName = "soap.wren";
char *script = readFile(fileName);
WrenInterpretResult result = wrenInterpret(vm, module, script);
switch (result) {
case WREN_RESULT_COMPILE_ERROR:
printf("Compile Error!\n");
break;
case WREN_RESULT_RUNTIME_ERROR:
printf("Runtime Error!\n");
break;
case WREN_RESULT_SUCCESS:
break;
}
wrenFreeVM(vm);
free(script);
return 0;
}