Jika Anda menggunakan node-soap dan mengetahui cara menggunakannya, dapatkah Anda membantu saya membuat wsdl. Apakah ada generator atau tutorial yang bagus tentang cara menulis wsdl. stackoverflow.com/questions/32480481/…
Terima kasih. mengalami masalah dengan pemasangan node-soap karena instalasi node-expat gagal = (
WHITECOLOR
Anda memerlukan header pengembangan ekspat untuk membuatnya
Juicy Scripter
Saya menemukan masalah yang dikatakan tentang header, tetapi saya tidak tahu di mana saya harus mendapatkannya di mana saya harus menaruhnya untuk dikompilasi, dapatkah Anda jelaskan?
WHITECOLOR
1
Mungkin Anda bisa mendapatkannya melalui alat manajemen paket untuk OS Anda. Di Ubuntu misalnyasudo apt-get install libexpat1-dev
Juicy Scripter
1
@RobertBroden, terima kasih atas pembaruannya. Lain kali, lanjutkan dan edit jawabannya (atau sarankan edit)!
Juicy Scripter
31
Saya pikir alternatifnya adalah:
gunakan alat seperti SoapUI ( http://www.soapui.org ) untuk merekam pesan xml masukan dan keluaran
Sayangnya, ini adalah metode paling andal untuk berinteraksi dengan SOAP dengan Node.js. Saya belum menemukan satu pun perpustakaan sabun yang benar-benar membuat permintaan sabun di beberapa API yang harus saya gunakan.
AlbertEngelB
1
100% kotor, tapi membawa saya ke hasil)))
markkillah
apa yang Anda maksud dengan membentuk input xml` persis?
timaschew
ya, masih bisa mengonfirmasi, non dari libs yang disebutkan di atas berfungsi sempurna.
someUser
Saya pikir "Form input xml" berarti hanya memberikan Jenis-Konten "text / xml"
SSH This
22
Jika node-soaptidak berhasil untuk Anda, cukup gunakan noderequestmodul dan kemudian konversikan xml ke json jika diperlukan.
Permintaan saya tidak berfungsi node-soapdan tidak ada dukungan untuk modul itu selain dukungan berbayar, yang berada di luar sumber daya saya. Jadi saya melakukan yang berikut:
menyalin WSDL xml ke file lokal curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
Di SoapUI saya pergi ke File > New Soap projectdan mengunggah file wsdl_file.xml.
Di navigator saya memperluas salah satu layanan dan mengklik kanan permintaan dan mengklik Show Request Editor.
Dari sana saya dapat mengirim permintaan dan memastikannya berhasil dan saya juga dapat menggunakan data Rawatau HTMLuntuk membantu saya membuat permintaan eksternal.
Mentah dari SoapUI untuk permintaan saya
POST http://192.168.0.28:10005/MainService/WindowsService HTTP/1.1Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8SOAPAction:"http://Main.Service/AUserService/GetUsers"Content-Length:303Host:192.168.0.28:10005Connection:Keep-AliveUser-Agent:Apache-HttpClient/4.1.1(java 1.5)
terima kasih @jtlindsey. Tetapi saya mendapatkan metode 405 yang tidak diizinkan sebagai response.statusCode, response.statusMessage. Apakah Anda tahu cara memperbaikinya?
Sujoy
Ada masalah dengan URL saya. Saya menggunakan URL asli, bukan titik akhir yang dihasilkan oleh SOAPUI. Terima kasih untuk kode di atas.
Sujoy
17
Saya berhasil menggunakan soap, wsdl dan Node.js. Anda perlu menginstal sabun npm install soap
Buat server node yang disebut server.jsyang akan menentukan layanan sabun untuk dikonsumsi oleh klien jarak jauh. Layanan sabun ini menghitung Indeks Massa Tubuh berdasarkan berat (kg) dan tinggi (m).
const soap =require('soap');const express =require('express');const app = express();/**
* this is remote service defined in this file, that can be accessed by clients, who will supply args
* response is returned to the calling client
* our service calculates bmi by dividing weight in kilograms by square of height in metres
*/const service ={
BMI_Service:{
BMI_Port:{
calculateBMI(args){//console.log(Date().getFullYear())const year =newDate().getFullYear();const n = args.weight /(args.height * args.height);
console.log(n);return{ bmi: n };}}}};// xml data is extracted from wsdl file createdconst xml =require('fs').readFileSync('./bmicalculator.wsdl','utf8');//create an express server and pass it to a soap serverconst server = app.listen(3030,function(){const host ='127.0.0.1';const port = server.address().port;});
soap.listen(server,'/bmicalculator', service, xml);
Selanjutnya, buat client.jsfile yang akan menggunakan layanan sabun yang ditentukan oleh server.js. File ini akan memberikan argumen untuk layanan sabun dan memanggil url dengan port dan titik akhir layanan SOAP.
File wsdl Anda adalah protokol berbasis xml untuk pertukaran data yang menentukan cara mengakses layanan web jarak jauh. Panggil file wsdl Andabmicalculator.wsdl
<definitionsname="HelloService"targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"xmlns="http://schemas.xmlsoap.org/wsdl/"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"xmlns:xsd="http://www.w3.org/2001/XMLSchema"><messagename="getBMIRequest"><partname="weight"type="xsd:float"/><partname="height"type="xsd:float"/></message><messagename="getBMIResponse"><partname="bmi"type="xsd:float"/></message><portTypename="Hello_PortType"><operationname="calculateBMI"><inputmessage="tns:getBMIRequest"/><outputmessage="tns:getBMIResponse"/></operation></portType><bindingname="Hello_Binding"type="tns:Hello_PortType"><soap:bindingstyle="rpc"transport="http://schemas.xmlsoap.org/soap/http"/><operationname="calculateBMI"><soap:operationsoapAction="calculateBMI"/><input><soap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="urn:examples:helloservice"use="encoded"/></input><output><soap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="urn:examples:helloservice"use="encoded"/></output></operation></binding><servicename="BMI_Service"><documentation>WSDL File for HelloService</documentation><portbinding="tns:Hello_Binding"name="BMI_Port"><soap:addresslocation="http://localhost:3030/bmicalculator/"/></port></service></definitions>
Terima kasih banyak. Namun, saya harus menghapus "res.send (response);" dari klien dan "` "di baris terakhir file server.
Subhashi
13
Cara termudah yang saya temukan untuk hanya mengirim XML mentah ke layanan SOAP menggunakan Node.js adalah dengan menggunakan implementasi http Node.js. Ini terlihat seperti ini.
var http =require('http');var http_options ={
hostname:'localhost',
port:80,
path:'/LocationOfSOAPServer/',
method:'POST',
headers:{'Content-Type':'application/x-www-form-urlencoded','Content-Length': xml.length
}}var req = http.request(http_options,(res)=>{
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data',(chunk)=>{
console.log(`BODY: ${chunk}`);});
res.on('end',()=>{
console.log('No more data in response.')})});
req.on('error',(e)=>{
console.log(`problem with request: ${e.message}`);});// write data to request body
req.write(xml);// xml would have been set somewhere to a complete xml document in the form of a string
req.end();
Anda akan mendefinisikan variabel xml sebagai xml mentah dalam bentuk string.
Tetapi jika Anda hanya ingin berinteraksi dengan layanan SOAP melalui Node.js dan melakukan panggilan SOAP biasa, bukan mengirim xml mentah, gunakan salah satu pustaka Node.js. Saya suka node-soap .
Saya mencoba node-soap untuk mengakses rute wsdl tetapi tidak berhasil, saya terus mendapatkan error meskipun hal yang sama bekerja di php Bisakah Anda menjawab pertanyaan saya tentang bagaimana Anda melakukannya stackoverflow.com/questions/39943122/…
Ammar Ajmal
8
Saya berhasil menggunakan paket "sabun" ( https://www.npmjs.com/package/soap ) di lebih dari 10 pelacakan WebApis (Tradetracker, Bbelboon, Affilinet, Webgains, ...).
Masalah biasanya datang dari fakta bahwa programmer tidak menyelidiki terlalu banyak tentang apa yang dibutuhkan API jarak jauh untuk menghubungkan atau mengautentikasi.
Misalnya PHP mengirim ulang cookie dari header HTTP secara otomatis, tetapi ketika menggunakan paket 'node', itu harus diatur secara eksplisit (misalnya dengan paket 'soap-cookie') ...
Anda juga dapat menggunakan wsdlrdr. EasySoap pada dasarnya adalah penulisan ulang wsdlrdr dengan beberapa metode tambahan. Berhati-hatilah karena easysoap tidak memiliki metode getNamespace yang tersedia di wsdlrdr.
Jika Anda hanya memerlukan konversi satu kali, https://www.apimatic.io/dashboard?modal=transform memungkinkan Anda melakukan ini dengan membuat akun gratis (tanpa afiliasi, ini hanya berfungsi untuk saya).
Jika Anda bertransformasi menjadi Swagger 2.0, Anda dapat membuat js lib dengan
Jawaban:
Anda tidak memiliki banyak pilihan.
Anda mungkin ingin menggunakan salah satu dari:
node-soap
)sumber
sudo apt-get install libexpat1-dev
Saya pikir alternatifnya adalah:
Ya, ini adalah pendekatan yang agak kotor dan rendah tetapi harus bekerja tanpa masalah
sumber
Jika
node-soap
tidak berhasil untuk Anda, cukup gunakannode
request
modul dan kemudian konversikan xml ke json jika diperlukan.Permintaan saya tidak berfungsi
node-soap
dan tidak ada dukungan untuk modul itu selain dukungan berbayar, yang berada di luar sumber daya saya. Jadi saya melakukan yang berikut:curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
File > New Soap project
dan mengunggah filewsdl_file.xml
.Show Request Editor
.Dari sana saya dapat mengirim permintaan dan memastikannya berhasil dan saya juga dapat menggunakan data
Raw
atauHTML
untuk membantu saya membuat permintaan eksternal.Mentah dari SoapUI untuk permintaan saya
XML dari SoapUI
Saya menggunakan yang di atas untuk membangun yang berikut
node
request
:sumber
Saya berhasil menggunakan soap, wsdl dan Node.js. Anda perlu menginstal sabun
npm install soap
Buat server node yang disebut
server.js
yang akan menentukan layanan sabun untuk dikonsumsi oleh klien jarak jauh. Layanan sabun ini menghitung Indeks Massa Tubuh berdasarkan berat (kg) dan tinggi (m).Selanjutnya, buat
client.js
file yang akan menggunakan layanan sabun yang ditentukan olehserver.js
. File ini akan memberikan argumen untuk layanan sabun dan memanggil url dengan port dan titik akhir layanan SOAP.File wsdl Anda adalah protokol berbasis xml untuk pertukaran data yang menentukan cara mengakses layanan web jarak jauh. Panggil file wsdl Anda
bmicalculator.wsdl
Semoga membantu
sumber
Cara termudah yang saya temukan untuk hanya mengirim XML mentah ke layanan SOAP menggunakan Node.js adalah dengan menggunakan implementasi http Node.js. Ini terlihat seperti ini.
Anda akan mendefinisikan variabel xml sebagai xml mentah dalam bentuk string.
Tetapi jika Anda hanya ingin berinteraksi dengan layanan SOAP melalui Node.js dan melakukan panggilan SOAP biasa, bukan mengirim xml mentah, gunakan salah satu pustaka Node.js. Saya suka node-soap .
sumber
Bergantung pada jumlah titik akhir yang Anda butuhkan, mungkin lebih mudah melakukannya secara manual.
Saya telah mencoba 10 perpustakaan "sabun nodejs" akhirnya saya melakukannya secara manual.
sumber
Saya berhasil menggunakan paket "sabun" ( https://www.npmjs.com/package/soap ) di lebih dari 10 pelacakan WebApis (Tradetracker, Bbelboon, Affilinet, Webgains, ...).
Masalah biasanya datang dari fakta bahwa programmer tidak menyelidiki terlalu banyak tentang apa yang dibutuhkan API jarak jauh untuk menghubungkan atau mengautentikasi.
Misalnya PHP mengirim ulang cookie dari header HTTP secara otomatis, tetapi ketika menggunakan paket 'node', itu harus diatur secara eksplisit (misalnya dengan paket 'soap-cookie') ...
sumber
Anda juga dapat melihat easysoap npm - https://www.npmjs.org/package/easysoap -atau- beberapa di antaranya: https://nodejsmodules.org/tags/soap
https://nodejsmodules.org/pkg/express-soap2json
sumber
Saya menggunakan modul node net untuk membuka soket ke layanan web.
Kirim permintaan sabun
Parse soap response, saya menggunakan module - xml2js
Semoga bisa membantu seseorang
sumber
Menambah solusi Kim .J : Anda dapat menambahkan
preserveWhitespace=true
untuk menghindari kesalahan Whitespace. Seperti ini:sumber
Anda juga dapat menggunakan wsdlrdr. EasySoap pada dasarnya adalah penulisan ulang wsdlrdr dengan beberapa metode tambahan. Berhati-hatilah karena easysoap tidak memiliki metode getNamespace yang tersedia di wsdlrdr.
sumber
Bagi mereka yang baru mengenal
SOAP
dan menginginkan penjelasan dan panduan singkat, saya sangat merekomendasikan artikel media yang luar biasa ini .Anda juga dapat menggunakan
node-soap
paket , dengan tutorial sederhana ini .sumber
Jika Anda hanya memerlukan konversi satu kali, https://www.apimatic.io/dashboard?modal=transform memungkinkan Anda melakukan ini dengan membuat akun gratis (tanpa afiliasi, ini hanya berfungsi untuk saya).
Jika Anda bertransformasi menjadi Swagger 2.0, Anda dapat membuat js lib dengan
sumber