Si vous utilisez node-soap et avez compris comment l'utiliser, pourriez-vous m'aider à créer un wsdl. Existe-t-il un générateur ou un bon tutoriel pour écrire le fichier wsdl. stackoverflow.com/questions/32480481/…
Merci. ayant des problèmes avec l'installation de node-soap car échec de l'installation de node-expat = (
WHITECOLOR
Vous aurez besoin d'en-têtes de développement d'expatriés pour le construire
Juicy Scripter
J'ai trouvé que le problème a été dit à propos des en-têtes, mais je ne sais pas où dois-je le trouver où dois-je le mettre à compiler, pouvez-vous expliquer, s'il vous plaît?
WHITECOLOR
1
Vous pouvez probablement les obtenir via des outils de gestion de paquets pour votre système d'exploitation. Sur Ubuntu par exemplesudo apt-get install libexpat1-dev
Juicy Scripter
1
@RobertBroden, merci pour la mise à jour. Veuillez la prochaine fois, modifier la réponse (ou suggérer une modification)!
Juicy Scripter
31
Je pense qu'une alternative serait de:
utilisez un outil tel que SoapUI ( http://www.soapui.org ) pour enregistrer les messages xml d'entrée et de sortie
Malheureusement, c'est la méthode la plus fiable pour interagir avec SOAP avec Node.js. Je n'ai pas encore trouvé une seule bibliothèque de savon qui fasse correctement des demandes de savon sur la poignée d'API que je dois utiliser.
AlbertEngelB
1
100% sale, mais m'a amené aux résultats)))
markkillah
que voulez-vous tous dire avec pour former exactement le xml?
timaschew
oui, je peux encore le confirmer, aucune des bibliothèques mentionnées ci-dessus ne fonctionne parfaitement.
someUser
Je pense que "Form input xml" signifie simplement donner un Content-Type de "text / xml"
SSH ce
22
Si node-soapcela ne fonctionne pas pour vous, utilisez simplement le noderequestmodule, puis convertissez le xml en json si nécessaire.
Ma demande ne fonctionnait pas node-soapet il n'y a pas de support pour ce module au-delà du support payant, qui dépassait mes ressources. J'ai donc fait ce qui suit:
copié le XML WSDL dans un fichier local curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
Dans SoapUI, je suis allé File > New Soap projectet téléchargé mon fichier wsdl_file.xml.
Dans le navigateur, j'ai développé l'un des services et j'ai fait un clic droit sur la demande et j'ai cliqué sur Show Request Editor.
De là, je pourrais envoyer une demande et m'assurer que cela fonctionnait et je pourrais également utiliser le RawouHTML données pour m'aider à créer une demande externe.
Raw de SoapUI pour ma demande
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)
merci @jtlindsey. Mais j'obtiens la méthode 405 non autorisée en tant que response.statusCode, response.statusMessage. Par hasard, savez-vous comment résoudre ce problème?
Sujoy
Un problème est survenu avec mon URL. J'utilisais l'URL d'origine au lieu du point de terminaison généré par SOAPUI. Merci pour le code ci-dessus.
Sujoy
17
J'ai réussi à utiliser soap, wsdl et Node.js Vous devez installer soap avec npm install soap
Créez un serveur de nœuds appelé server.jsqui définira le service soap à utiliser par un client distant. Ce service de savon calcule l'indice de masse corporelle en fonction du poids (kg) et de la taille (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);
Ensuite, créez un client.jsfichier qui consommera le service soap défini par server.js. Ce fichier fournira des arguments pour le service soap et appellera l'url avec les ports de service et les points de terminaison de SOAP.
Votre fichier wsdl est un protocole d'échange de données basé sur XML qui définit comment accéder à un service Web distant. Appelez votre fichier wsdlbmicalculator.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>
Merci beaucoup. Cependant, j'ai dû supprimer "res.send (response);" du client et "` "à la dernière ligne du fichier serveur.
Subhashi
13
Le moyen le plus simple que j'ai trouvé pour simplement envoyer du XML brut à un service SOAP à l'aide de Node.js est d'utiliser l'implémentation http Node.js. Ça ressemble à ça.
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();
Vous auriez défini la variable xml comme le xml brut sous la forme d'une chaîne.
Mais si vous souhaitez simplement interagir avec un service SOAP via Node.js et effectuer des appels SOAP réguliers, plutôt que d'envoyer du XML brut, utilisez l'une des bibliothèques Node.js. J'aime node-soap .
J'ai essayé node-soap pour accéder à la route wsdl mais cela ne fonctionne pas, je continue à recevoir une erreur bien que la même chose fonctionne en php Pouvez-vous répondre à ma question sur la façon dont vous l'avez fait stackoverflow.com/questions/39943122/…
Ammar Ajmal
8
J'ai utilisé avec succès le package "soap" ( https://www.npmjs.com/package/soap ) sur plus de 10 WebApis de tracking (Tradetracker, Bbelboon, Affilinet, Webgains, ...).
Les problèmes viennent généralement du fait que les programmeurs ne recherchent pas beaucoup ce dont l'API distante a besoin pour se connecter ou s'authentifier.
Par exemple, PHP renvoie automatiquement les cookies des en-têtes HTTP, mais lors de l'utilisation du package 'node', il doit être défini explicitement (par exemple par le package 'soap-cookie') ...
Vous pouvez également utiliser wsdlrdr. EasySoap est essentiellement une réécriture de wsdlrdr avec quelques méthodes supplémentaires. Attention, easysoap ne dispose pas de la méthode getNamespace disponible sur wsdlrdr.
Si vous avez juste besoin d'une conversion unique, https://www.apimatic.io/dashboard?modal=transform vous permet de le faire en créant un compte gratuit (pas d'affiliation, cela a juste fonctionné pour moi).
Si vous vous transformez en Swagger 2.0, vous pouvez créer une librairie js avec
Réponses:
Vous n'avez pas beaucoup d'options.
Vous voudrez probablement utiliser l'un des:
node-soap
)la source
sudo apt-get install libexpat1-dev
Je pense qu'une alternative serait de:
Oui, c'est une approche plutôt sale et de bas niveau mais cela devrait fonctionner sans problème
la source
Si
node-soap
cela ne fonctionne pas pour vous, utilisez simplement lenode
request
module, puis convertissez le xml en json si nécessaire.Ma demande ne fonctionnait pas
node-soap
et il n'y a pas de support pour ce module au-delà du support payant, qui dépassait mes ressources. J'ai donc fait ce qui suit:curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
File > New Soap project
et téléchargé mon fichierwsdl_file.xml
.Show Request Editor
.De là, je pourrais envoyer une demande et m'assurer que cela fonctionnait et je pourrais également utiliser le
Raw
ouHTML
données pour m'aider à créer une demande externe.Raw de SoapUI pour ma demande
XML de SoapUI
J'ai utilisé ce qui précède pour construire ce qui suit
node
request
:la source
J'ai réussi à utiliser soap, wsdl et Node.js Vous devez installer soap avec
npm install soap
Créez un serveur de nœuds appelé
server.js
qui définira le service soap à utiliser par un client distant. Ce service de savon calcule l'indice de masse corporelle en fonction du poids (kg) et de la taille (m).Ensuite, créez un
client.js
fichier qui consommera le service soap défini parserver.js
. Ce fichier fournira des arguments pour le service soap et appellera l'url avec les ports de service et les points de terminaison de SOAP.Votre fichier wsdl est un protocole d'échange de données basé sur XML qui définit comment accéder à un service Web distant. Appelez votre fichier wsdl
bmicalculator.wsdl
J'espère que ça aide
la source
Le moyen le plus simple que j'ai trouvé pour simplement envoyer du XML brut à un service SOAP à l'aide de Node.js est d'utiliser l'implémentation http Node.js. Ça ressemble à ça.
Vous auriez défini la variable xml comme le xml brut sous la forme d'une chaîne.
Mais si vous souhaitez simplement interagir avec un service SOAP via Node.js et effectuer des appels SOAP réguliers, plutôt que d'envoyer du XML brut, utilisez l'une des bibliothèques Node.js. J'aime node-soap .
la source
Selon le nombre de terminaux dont vous avez besoin, il peut être plus facile de le faire manuellement.
J'ai essayé 10 bibliothèques "soap nodejs", je le fais enfin manuellement.
la source
J'ai utilisé avec succès le package "soap" ( https://www.npmjs.com/package/soap ) sur plus de 10 WebApis de tracking (Tradetracker, Bbelboon, Affilinet, Webgains, ...).
Les problèmes viennent généralement du fait que les programmeurs ne recherchent pas beaucoup ce dont l'API distante a besoin pour se connecter ou s'authentifier.
Par exemple, PHP renvoie automatiquement les cookies des en-têtes HTTP, mais lors de l'utilisation du package 'node', il doit être défini explicitement (par exemple par le package 'soap-cookie') ...
la source
Vous pouvez également consulter le npm d'easysoap - https://www.npmjs.org/package/easysoap -ou- certains d'entre eux: https://nodejsmodules.org/tags/soap
https://nodejsmodules.org/pkg/express-soap2json
la source
J'ai utilisé le module node net pour ouvrir une socket sur le webservice.
Envoyer des demandes de savon
Analyser la réponse de savon, j'ai utilisé le module - xml2js
J'espère que ça aide quelqu'un
la source
Ajout à la solution de Kim .J : vous pouvez ajouter
preserveWhitespace=true
afin d'éviter une erreur d'espace blanc. Comme ça:la source
Vous pouvez également utiliser wsdlrdr. EasySoap est essentiellement une réécriture de wsdlrdr avec quelques méthodes supplémentaires. Attention, easysoap ne dispose pas de la méthode getNamespace disponible sur wsdlrdr.
la source
Pour ceux qui sont nouveaux
SOAP
et qui veulent une explication et un guide rapides, je recommande vivement cet article médiatique génial .Vous pouvez également utiliser
node-soap
package , avec ce tutoriel simple .la source
Si vous avez juste besoin d'une conversion unique, https://www.apimatic.io/dashboard?modal=transform vous permet de le faire en créant un compte gratuit (pas d'affiliation, cela a juste fonctionné pour moi).
Si vous vous transformez en Swagger 2.0, vous pouvez créer une librairie js avec
la source