SOAP NCLua: accès aux applications Web services de télévision numérique
Module entièrement développé en Lua, pour accéder à WebServices SOAP Digital applications de télévision
Consommer WebService SOAP partir d'une application NCL / Lune télévision numérique a été le désir de beaucoup, comme je l'ai été après les forums que je participe.
Les Webservices sont largement utilisés pour l'intégration d'applications, hétérogènes ou non, car ils utilisent un protocole standardisé par le W3C, basé sur XML et HTTP pour les voyages, sans avoir à subir des problèmes avec les pare-feu (par blocage de port). Ils permettent la création d'applications distribuées, en supprimant les clients des applications, une partie de la charge de traitement.
Dans le domaine des applications de télévision numérique, les services Web permettent également l'intégration de ces applications avec les services déjà mis en œuvre sans la nécessité de retravailler, permettant une plus grande convergence entre la télévision numérique et le Web
Il s'agit d'un projet appelé LuaSoap ayant des objectifs similaires, mais cela dépend de bibliothèques écrites en C / C + +, et utilise de manière directe, les fonctions de luasocket . Étant donné que ces bibliothèques ne font pas partie des règles de la brésilienne TV numérique (SBTVD), on ne peut pas appeler ses fonctions directement à partir d'une application interactive, car cela provoquerait les mêmes ne peuvent pas être effectuées sur tous les convertisseurs de télévision compatible avec le middleware Ginga numérique SBTVD. Par conséquent, ces modules sont incompatibles avec SBTVD et ne peuvent être utilisés pour le développement d'applications de la télévision numérique.
Il est connu que dans la version 0.11.2 de l'implémentation de référence de Ginga, disponible à l'publics Portail des logiciels, la bibliothèque est utilisée pour mettre en œuvre le protocole TCP module luasocket, (défini dans ABNT) pour les applications NCLua. Toutefois, cette bibliothèque est utilisée uniquement comme une couche sous-jacente du module TCP, et ses fonctions ne doit pas être utilisé par les applications développées. Ne doit considérer que l'interface fournie par le module TCP. Grâce à cela, à cause de ma thèse de maîtrise et la nécessité d'une telle action, le développement NCLua SOAP, un module entièrement écrit en Lua, pour être utilisés dans des applications NCLua la télévision numérique.
D'autres modules utilisés (déjà inclus dans le projet)
Le module utilise la bibliothèque LuaXML disponibles sur http://lua-users.org/wiki/LuaXml , qui a été adapté pour Lua 5.x Ils utilisent la classe TCP, fournis par Francis et le module http, développé par moi (déjà commenté dans NCLua Tweet ). Nous avons utilisé le module de base 64 ( disponible ici ) pour convertir des chaînes de / vers ce format. Il est utilisé par le module http. Pour tous les modules utilisés (à l'exception LuaXML) ont été obtenues avec la documentation luadoc , disponible dans le répertoire doc.
Pré-requis
Nous recommandons l'utilisation de Virtual Ginga STB 0.11.2 rev 23 ou supérieur . La version précédente de Ginga VSTB possédait quelques difficultés à accéder au réseau de la machine virtuelle, qui exigent habituellement des paramètres sur la même interface réseau.
Avant d'utiliser le NCLua SOAP dans la machine virtuelle, assurez-vous qu'il est l'accès au réseau local / internet (ping, telnet, wget, curl ou une commande similaire). Pour cela, fondamentalement, sur l'écran d'accueil de la machine virtuelle doit être affiché dans la même IP. Si vous ne parvenez pas à accéder au réseau, essayez de changer le mode de l'interface réseau du VM de pont pour NAT ou vice versa (vous devez redémarrer la machine virtuelle après la modification).
Utilisation NCLua SOAP
Pour utiliser le NCLua SOAP, ajoutez simplement la ligne require 'ncluasoap "de votre script à la lune. La fonction principale de ce module est de faire appel (ncluasoap.call), qui génère et envoie une requête SOAP et obtient le retour, XML qui est transformé en une lune de table (avec module LuaXML) pour faciliter l'accès aux données de retour invocation de méthode à distance. Le paramètre principal de ncluasoap.call msgTable est que la Lune doit être un tableau contenant la méthode d'accès aux données au WebService. Dans la documentation et des exemples, est expliquée plus en détail comment cela fonctionne. Mais voici la structure que doit avoir ce paramètre:
msgTable = ( , address = "url du service (pas l'adresse du WSDL)" , namespace = "espace de noms, comme indiqué dans le wsdl" , OperationName = "méthode distant auquel vous voulez accéder, - Les paramètres d'entrée tel que défini dans WSDL params = ( paramName1 = valeur1, paramName2 = valeur2, paramNameN = valeurN ) )
L'appel de fonction accepte également une fonction de rappel, qui est expliquée plus en détail dans la documentation NCLua SOAP et principalement dans le module http, pourquoi il a besoin d'utiliser de telles fonctions.
Le fichier lune de votre demande doit être dans le même répertoire que ncluasoap.lua.
Exemples
Ont été mis à la disposition des exemples d'applications qui consomment WebServices variées. Pour tester les WebServices différents utilisés dans l'application second échantillon, ncluasoap.call simplement décommenter un appel dans le dossier exemplo2.lua fonction de gestionnaire, en commentant la précédente (pour plus de clarté). Les applications n'ont pas d'interface graphique, donc le résultat est tout indiqué dans les messages sur la console. Lire les commentaires existants dans les exemples, parce que certains services nécessitent une configuration supplémentaire au travail (telle qu'une inscription / login et mot de passe).
Un exemple complet montrant comment consommer un WebService dire des pièces de monnaie, est indiqué ci-dessous, montrant la simplicité de l'utilisation du module.
"ncluasoap" ---Função para processar a resposta da requisição SOAP enviada ao WS --@param xmlTable Tabela lua, --gerada a partir do XML da resposta à requisição SOAP, --contendo os dados retornados pelo método remoto do WS local function getResponse ( xmlTable ) --O nome do elemento que contém o retorno é obtido no WSDL ou no XML de retorno print ( "Cotação do Dolar em Reais:" , xmlTable.ConversionRateResult ) end --Cria uma table contendo os dados para envio da requisição SOAP ao WS local msgTable = { address = "http://www.webservicex.net/CurrencyConvertor.asmx" , --Namespace exatamente como especificado no WSDL, neste caso, terminando com / namespace = "http://www.webserviceX.NET/" , operationName = "ConversionRate" , params = { FromCurrency = "USD" , --Dólar ToCurrency = "BRL" --Real } } --Executa o método remoto, definido dentro da msgTable, --gerando uma requisição SOAP, enviando ao WS e obtendo o resultado. --getResponse é uma função de callback que será executada --automaticamente, assim que a resposta da chamada remota for obtida. ncluasoap. call ( msgTable, getResponse ) --Esta linha é executada automaticamente após a chamada de ncluasoap.call --A chamada a ncluasoap.call retorna imediatamente, pois é uma chamada --assíncrona, devido a particularidades do módulo TCP de NCLua. --Assim, NÃO é possível obter o retorna do método remoto --fazendo algo como retorno = ncluasoap.call(msgTable). --Tal instrução não funciona. print ( "---------------------------Chamou ncluasoap.call" ) --- Exemple simple mais complet, utilisez la NCLua SOAP exigent »ncluasoap '--- fonction pour traiter la réponse de la requête SOAP envoyée au param XMLTable Table - @ lune - produite à partir de la réponse XML requête SOAP, - contenant les données retournées par la méthode de la distance WS getResponse fonction locale (XMLTable) - Le nom de l'élément qui contient le retour est obtenu en WSDL ou XML Imprimer Retour ("le dollar des États-Unis Real:", xmlTable.ConversionRateResult) fin - Créer une table contenant les données pour l'envoi de la demande SOAP pour la WS locales msgTable = (address = "http://www.webservicex.net/CurrencyConvertor.asmx", - espace de noms tel que mentionné dans WSDL Dans ce cas, se terminant par / ns = "http://www.webserviceX.NET/" OperationName = "ConversionRate", params = (FromCurrency = "USD", toCurrency Dollar - = "BRL - Real)) - Exécuter la méthode à distance, définies dans le, - générer un savon, à la demande d'envoi msgTable la WS et obtenir le résultat. - getResponse est une fonction de rappel qui sera exécuté - automatiquement, de sorte que la réponse de l'appel à distance est obtenus. ncluasoap. composez le (msgTable, getResponse) - Cette ligne est exécuté automatiquement après l'appel ncluasoap.call - ncluasoap.call L'appel retourne immédiatement, car il est un appel - asynchrone, en raison des caractéristiques du module TCP NCLua. - Alors, n'est pas possible d'obtenir des rendements de la méthode à distance - de faire quelque chose en retour ncluasoap.call = (msgTable.) - Cette instruction ne fonctionne pas. ("----------- Imprimer ---------------- ncluasoap.call Called)
Notez que dans le getResponse fonction, qui reçoit un tableau de la lune, produite à partir de la réponse XML SOAP à la demande, la valeur retournée par le WS est obtenue grâce à l'accès à l'élément de paramètre ConversionRateResult XMLTable. Par défaut, la balise XML qui contient la valeur retournée est formé par le nom de la méthode, suivie par le résultat mot. Ainsi, pour chacun d'eux était, le résultat sera une étiquette différente, et peut retourner un tag composé de diverses autres tags avec des valeurs. WSS montrer quelques exemples de messages SOAP échangés entre les clients et le serveur. Dans ces exemples, vous pouvez vérifier la structure de la valeur retournée (qui peut être une valeur simple: comme dans l'exemple, ou un composite, contenant plusieurs balises internes). Les exemples fournis avec le savon-NCLua montrent un moyen d'afficher toutes les valeurs retournées par l'utilisation d'une boucle.
L'appel à ncluasoap.call a également un troisième paramètre optionnel qui indique la version de SOAP à utiliser pour communiquer avec le WS. S'il est omis, on suppose la valeur "1.2". Certains WebServices soutenir à la fois la version 1.1 et 1.2 de SOAP (tels que services Web ASP.NET, asmx pages). D'autres ne supportent que 1.1 (comme certains WebServices avec PHP), et il peut y en avoir d'autres que la version 1.2 de support. Ainsi, le développeur doit faire attention à la version soutenue par le savon, les informations qui peuvent généralement être trouvés sur le WebService (même page informés sur la table passée à l'appel de fonction ncluasoap module).
REMARQUE: L'espace de noms doivent être exactement tel que défini dans le document WSDL. Si le même but avec la barre, la barre doit être inclus. Si ce n'est pas fait, ne devraient pas être inclus. Certains services peuvent ne pas fonctionner (affichage d'un message d'erreur indiquant l'espace de noms utilisé est correct) s'il n'est pas exactement tel que présenté dans le WSDL.
Accès aux services Web en PHP
Accès aux services Web en PHP peut avoir une petite fonctionnalité. Le WS en PHP, conçu avec la bibliothèque NuSOAP ignorer le nom des paramètres d'entrée (qui peut dépendre de la version de la bibliothèque), en ne considérant que l'ordre où elles ont été adoptées.
Comme la demande XML à envoyer au service Web est généré à partir d'une table Lua, qui est couvert avec les paires de commande de la Lune, il suffit d'entrer les éléments de commande dans un ordre arbitraire (programmation en Lua, 2e éd.) Cela peut entraîner paramètres sont passés dans le bon ordre au service Web. Donc, pour résoudre ce problème avec WS PHP, vous pouvez inclure chaque paramètre d'entrée dans la lune table dans une table sous-anonymes, comme dans l'exemple ci-dessous:
params = ( "estado" } , Commande = ("state"), "sudeste" } (Région = "Sud") )
Notez que le paramètre d'ordre est défini dans une sous-table sans nom, ainsi que la région paramètre. Ainsi, la table params agit comme un vecteur (tableau). Cela garantit que les paramètres sont accessibles pour générer le code XML dans le même ordre qu'ils ont été définis par la résolution du problème de WS PHP avec NuSOAP. L'utilisation de sous-tableaux anonymes résoudre le problème parce que, quand ces sous-tables n'ont pas un nom (string), l'indice (numérique) est automatiquement attribué à chacun, en fonction de l'ordre dans lequel elles ont été définies. Cela signifie que, lorsque vous y accédez, seront suivis dans l'ordre des indices numériques.
Exemple 6, disponible sur le fichier à télécharger NCLua SOAP contient les sources complètes d'une application qui accède à un WS NuSOAP fait en PHP, qui renvoie la liste des États dans une région donnée du pays, séparés par des \ n ", montrant que le terminal. Si les paramètres ne sont pas déclarés comme indiqué ici, ils peuvent être passés dans le bon ordre pour le WS.
Comme le premier paramètre (pour le nom) doit contenir le nom de la colonne de la table dans la base de données dans laquelle vous souhaitez trier le résultat, si les paramètres sont inversés, ce qui cause de l'erreur dans l'exécution de l'instruction SQL dans WS, de retourner un message d'erreur. Ainsi, pour assurer, devrait utiliser l'approche présentée dans le code précédent.
Une autre approche pour accéder à un WS PHP avec NuSOAP est fait pour définir les paramètres eux-mêmes de façon anonyme, comme ci-dessous. Seul l'ordre est ce qui compte, pas les noms des paramètres.
, "sudeste" } params = («État», «Est»)
Cette forme est plus simple et le paramètre d'ordre est respectée lors de la génération du XML, cependant, perdre de l'identification nom des paramètres, ce qui en fait le code source moins lisible.
Tutoriels
Si vous avez des exemples à partager avec nous. Contactez-nous ici .
FAQ
- Se produit parce que l'erreur "HTTP 415: non prise en charge des médias"? Cette erreur peut se produire car la version de la requête SOAP envoyé pas être pris en charge par le service Web. Consultez la documentation du module de fonction NCLua SOAP appeler pour savoir comment spécifier la version de SOAP utilisé par le module. Si vous ne savez pas quelle version de SOAP Web Service reconnaît, de tester les valeurs figurant dans la documentation du module appel de fonction.
- Parce que l'erreur se produit "erreur non protégés dans l'appel d'API Lua (tcp.lua: xx: / usr/local/lib/lua/5.1/tcp_event.lua: xx: Échec de l'assertion!)"? Cette erreur peut se produire en raison de l'application s'exécute sur Virtual Ginga STB, n'ayant pas accès à Internet / WiFi. Ce problème est commun dans la version précédente 0.11.2 Virtual Ginga STB. Consultez la section des conditions préalables pour plus d'informations.
Contribuer à la FAQ. Entrez en contact ici .
Télécharger
Le module met en œuvre les versions 1.1 et 1.2 du protocole SOAP, et il est en version bêta et peut contenir des bugs et les incompatibilités avec le standard. Donc, prendre à vos propres risques!
Questions, suggestions, et surtout les rapports de problèmes avec WebService, sont les bienvenus, il suffit de prendre contact ici .
NCLua SOAP 0.5.6.3 beta ( les détails de sortie )
NCLua-SOAP-0.5.6.1 beta ( les détails de sortie )
- script inclus pour faire un parser WSDL et d'obtenir certains des paramètres nécessaires à une application avec SOAP NCLua
- Un accès simplifié à la valeur retournée par le WS (voir history.txt)
- Mise à jour des exemples, y compris les plus docuumentação
- support inclus pour les paramètres d'être générés au format XML dans le même ordre qu'ils ont été définis dans le tableau Lua, résoudre le problème rencontré avec a été réalisé avec PHP NuSOAP. Voir l'exemple 6, disponible en fichier téléchargeable.
- Mise à jour le module http, qui fonctionne à effectuer des demandes comprennent maintenant un paramètre de port (en option, par défaut 80).
- appel à la méthode de mise à jour, y compris NCLua paramètre SOAP-port (aussi en option, par défaut 80) pour permettre l'accès aux services Web qui sont accessibles sur d'autres ports que celui par défaut. Bien que n'étant pas commune, il ya cette possibilité d'utiliser un port différent.
- Retrait d'ajouter automatiquement / fin de l'espace de noms était, parce que certains WSS donné d'erreur si le WSDL n'existe pas une barre oblique et d'application, il pourrait être inclus. Ainsi, l'espace de noms doivent être exactement comme dans le WSDL (avec ou sans / à la fin, en fonction de celui spécifié dans WSDL).
- Inclus exemple pour la consommation a été de convertir les degrés Fahrenheit en degrés Celsius.
- Inclus par exemple consommer WebService suivi des commandes dans le Post . démo vidéo ci-dessous.
- Ajout d'exemples nouveaux.
- Correction d'un problème survenu lors de la méthode à distance n'a pas de paramètre d'entrée.
Licence
Dons
Soutenir le développement et l'amélioration de la conception. Faites un don.
Autres projets
Voir d'autres modèles de télévision numérique ici.
- # 0.5.6.3 publié NCLuaSOAP: Meilleur support pour WSS # # Java
- Pause et résumer les Applications Vidéo # # NCL à la télévision numérique
- Création d'applications Signes # # NCLua à la télévision numérique
- Tir à l'application des médias NCL # à partir d'un script # Moon Ginga DTV # # # NCLua
- NCLuaSOAP 0.5.6 publié # # # # WS TVD Ginga based on 2 ratings








Très bien!
Félicitations!
Très cool en effet! Félicitations pour le travail!
Bon après-midi Manoel,
Je commence à étudier la langue NCL. Sauf que je suis un doute. Vous pouvez configurer un à exécuter un autre NCL NCL hébergé sur Internet? Comment le code? Par exemple:
Les presses spectateur sur le bouton vert, cette action provoque le STB pour accéder au site http://www.site.com.br/exemplo1.ncl NCL prendre le code et exécutez l'application.
Merci.
Pas sûr, mais je crois qu'il est parfaitement possible, étant donné que NCL accepte de communication à distance, en attribuant une URL dans l'attribut src de la presse. Ainsi, on peut pointer vers un NCL externes. Si je me souviens bien, cela a été discuté dans le logiciel de forum public du portail.
Bon après-midi Manoel,
Je me demande si il est possible de consommer des services Web en Java? ou besoin de configuration supplémentaire? donc essayé un exemple simple de retourner la somme de deux nombres entiers et n'ont pas de travail ... les empreintes "il se connecte au webservice, mais il ya une erreur lors du montage du XML retourné.
Merci et félicitations pour le travail.
La consommation de WAS est indépendant de la langue. Les autres utilisateurs ont déjà utilisé était en Java. Vérifiez que vous avez utilisé le port par défaut (80), sinon, lisez la documentation HTML du module (en particulier l'appel de fonction) qui montre comment utiliser un port différent (comme 8080). Les messages sont affichés sur le terminal, qui peut être observé. Un fichier de débogage (response.xml) est enregistré dans le répertoire de l'application de l'information sur la réponse HTTP. Si après vérification de la documentation ne peut pas résoudre, à m'envoyer des messages et de fichier retourné response.xml pour moi d'analyser, en utilisant la page contact .
Ouais .... Je suis sur un serveur local (localhost: 8084) port 8084 ... Je vais regarder la documentation. Merci.