Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
5
Task/SOAP/00-META.yaml
Normal file
5
Task/SOAP/00-META.yaml
Normal 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
3
Task/SOAP/00-TASK.txt
Normal 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}}
|
||||
|
||||
16
Task/SOAP/ActionScript/soap.as
Normal file
16
Task/SOAP/ActionScript/soap.as
Normal 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
|
||||
}
|
||||
11
Task/SOAP/AutoHotkey/soap.ahk
Normal file
11
Task/SOAP/AutoHotkey/soap.ahk
Normal 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
54
Task/SOAP/C/soap-1.c
Normal 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
10
Task/SOAP/C/soap-2.c
Normal 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
10
Task/SOAP/C/soap-3.c
Normal 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>
|
||||
5
Task/SOAP/Clojure/soap.clj
Normal file
5
Task/SOAP/Clojure/soap.clj
Normal 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))
|
||||
3
Task/SOAP/ColdFusion/soap.cfm
Normal file
3
Task/SOAP/ColdFusion/soap.cfm
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<cfset client = createObject("webservice","http://example.com/soap/wsdl")>
|
||||
<cfset result = client.soapFunc("hello")>
|
||||
<cfset result = client.anotherSoapFunc(34234)>
|
||||
9
Task/SOAP/Diego/soap.diego
Normal file
9
Task/SOAP/Diego/soap.diego
Normal 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();
|
||||
5
Task/SOAP/F-Sharp/soap.fs
Normal file
5
Task/SOAP/F-Sharp/soap.fs
Normal 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
53
Task/SOAP/Go/soap-1.go
Normal 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
7
Task/SOAP/Go/soap-2.go
Normal 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
20
Task/SOAP/Go/soap-3.go
Normal 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
|
||||
31
Task/SOAP/Julia/soap.julia
Normal file
31
Task/SOAP/Julia/soap.julia
Normal 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
|
||||
59
Task/SOAP/Kotlin/soap.kotlin
Normal file
59
Task/SOAP/Kotlin/soap.kotlin
Normal 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])
|
||||
}
|
||||
3
Task/SOAP/Mathematica/soap.math
Normal file
3
Task/SOAP/Mathematica/soap.math
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
InstallService["http://example.com/soap/wsdl"];
|
||||
soapFunc["Hello"];
|
||||
anotherSoapFunc[12345];
|
||||
14
Task/SOAP/PHP/soap.php
Normal file
14
Task/SOAP/PHP/soap.php
Normal 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
8
Task/SOAP/Perl/soap.pl
Normal 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
58
Task/SOAP/Phix/soap.phix
Normal 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;">"""
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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/">
|
||||
<soap:Body>
|
||||
<frobnicate xmlns="http://example.com/frobnicate">
|
||||
<foo>%s</foo>
|
||||
<bar>%s</bar>
|
||||
<baz>%s</baz>
|
||||
</frobnicate>
|
||||
</soap:Body>
|
||||
</soap:Envelope>"""</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;">">Zwei<"</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>
|
||||
<!--
|
||||
5
Task/SOAP/PureBasic/soap.basic
Normal file
5
Task/SOAP/PureBasic/soap.basic
Normal 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
4
Task/SOAP/Python/soap.py
Normal 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
12
Task/SOAP/Raku/soap.raku
Normal 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
10
Task/SOAP/Ruby/soap.rb
Normal 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
|
||||
7
Task/SOAP/Smalltalk/soap.st
Normal file
7
Task/SOAP/Smalltalk/soap.st
Normal 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
9
Task/SOAP/Tcl/soap.tcl
Normal 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]
|
||||
6
Task/SOAP/Uniface/soap.uniface
Normal file
6
Task/SOAP/Uniface/soap.uniface
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
variables
|
||||
string result1, result2
|
||||
endvariables
|
||||
|
||||
activate "webservice".soapFunc("hello", result1)
|
||||
activate "webservice".anotherSoapFunc(34234, result2)
|
||||
6
Task/SOAP/VBScript/soap.vb
Normal file
6
Task/SOAP/VBScript/soap.vb
Normal 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)
|
||||
10
Task/SOAP/Visual-Objects/soap.vobj
Normal file
10
Task/SOAP/Visual-Objects/soap.vobj
Normal 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
|
||||
67
Task/SOAP/Wren/soap-1.wren
Normal file
67
Task/SOAP/Wren/soap-1.wren
Normal 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
192
Task/SOAP/Wren/soap-2.wren
Normal 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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue