Os adaptadores Worklight são o código do lado do servidor de aplicativos implementados e atendidos pelo Worklight Mobile Application Platform. Os adaptadores conectam o Worklight Server a aplicativos corporativos, como aqueles em execução no WebSphere Message Broker. A sequência a seguir apresenta um fluxo típico de dados entre um aplicativo remoto e um serviço da web Microsoft .NET em execução no Message Broker:
WL.Client.invokeProcedure
). Os parâmetros para o procedimento são passados como dados formatados pelo JSON.Esse padrão gera um adaptador Worklight que pode chamar cada método selecionado em sua classe .NET. O adaptador converte solicitações JSON de aplicativos remotos em solicitações de serviço da web em sua classe Microsoft .NET. Por exemplo, vamos supor que os métodos C# a seguir estejam em uma classe chamada RetailBank e você os tenha selecionado para uma instância padrão chamada MyBank:
public static string GetBalance(string accountNumber, out string lastUpdated); public static string TransferMoney(string sourceAccountNumber, string targetAccountNumber, string value); public static string FindMissingAccount(string name, ref string lastKnownAccountNumber);
O fragmento a seguir de JavaScript mostra como um aplicativo remoto pode chamar o método GetBalance
:
var invocationData = { adapter : "MyBank", procedure : "GetBalance", parameters : [ accountNo ]}; var options = { onSuccess:lang.hitch(this, this.onResult), onFailure:lang.hitch(this, this.onError)}; WL.Client.invokeProcedure(invocationData, options);
Para propósitos de teste, o adaptador Worklight implementado pode ser chamado usando um navegador da web com a URL a seguir:
http://localhost:8080/dev/invoke?adapter=MyBank&procedure=GetBalance¶meters=%5B123456789%5D
Esta seção explica os arquivos gerados para o adaptador Worklight.
O padrão cria um adaptador Worklight com dois arquivos de configuração. O primeiro arquivo de configuração (MyBank.xml) é o arquivo XML do adaptador. O arquivo XML do adaptador é usado para configurar a conectividade como o Message Broker e para declarar os procedimentos expostos pelo adaptador para aplicativos remotos e para outros adaptadores. O exemplo abaixo mostra o arquivo de configuração XML do adaptador gerado:
<?xml version="1.0" encoding="UTF-8"?> <wl:adapter name="MyBank" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wl="http://www.worklight.com/integration" xmlns:http="http://www.worklight.com/integration/http"> <displayName>MyBank</displayName> <description>Adaptador de integração Worklight para o serviço Microsoft .NET</description> <connectivity> <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> <protocol>http</protocol> <domain>localhost</domain> <port>7800</port> </connectionPolicy> <loadConstraints maxConcurrentConnectionsPerNode="99" /> </connectivity> <procedure name="GetBalance"/> <procedure name="TransferMoney"/> <procedure name="FindMissingAccount"/> </wl:adapter>
Muitos dos valores nesse arquivo XML do adaptador são configurados a partir dos parâmetros
de padrão (por exemplo displayName
, domain
e port
).
Também é possível ver se um procedure
foi configurado para cada método .NET.
Os procedimentos definem um processo para acessar as operações expostas pelo serviço da web
Microsoft .NET. Há um procedure
para cada operação no serviço da web.
O padrão também gera um arquivo JavaScript (MyBank-impl.js) que contém as funções de implementação para cada procedimento:
var targetNamespace = "urn://bankingapplication/retailbank_V1"; function PrepareWebService(method, parameters, path) { var request = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="' + targetNamespace + '">' + '<soap:Header/>' + '<soap:Body>' + '<tns:' + method + '>'; for (var key in parameters) { request += '<' + key + '>' + parameters[key] + '</' + key + '>'; } request += '</tns:' + method + '>' + '</soap:Body>' + '</soap:Envelope>'; var input = { method : 'post', returnedContentType : 'xml', path : path, body : { contentType: 'application/xml; charset=utf-8', content: request } }; return input; } var targetPath = "/retailbank"; function sendRequest(name, input) { var response = WL.Server.invokeHttp(input); WL.Logger.log(response); if (response.Envelope) { var data = response.Envelope.Body; data = data[name]; response.result = data; delete response.Envelope; WL.Logger.log(response); } return response; } function GetBalance(accountNumber) { var parameters = new Object(); parameters['accountNumber'] = accountNumber; var input = PrepareWebService('GetBalance', parameters, targetPath); WL.Logger.debug('SOAP request: ' + input.body.content); return sendRequest('GetBalanceResponse', input); } function TransferMoney(sourceAccountNumber, targetAccountNumber, value) { var parameters = new Object(); parameters['sourceAccountNumber'] = sourceAccountNumber; parameters['targetAccountNumber'] = targetAccountNumber; parameters['value'] = value; var input = PrepareWebService('TransferMoney', parameters, targetPath); WL.Logger.debug('SOAP request: ' + input.body.content); return sendRequest('TransferMoneyResponse', input); } function FindMissingAccount(name, lastKnownAccountNumber) { var parameters = new Object(); parameters['name'] = name; parameters['lastKnownAccountNumber'] = lastKnownAccountNumber; var input = PrepareWebService('FindMissingAccount', parameters, targetPath); WL.Logger.debug('SOAP request: ' + input.body.content); return sendRequest('FindMissingAccountResponse', input); }
O código JavaScript gerado converte os parâmetros fornecidos em uma solicitação JSON
em uma mensagem XML SOAP. A conversão JSON para SOAP é implementada na
função PrepareWebService.
A solicitação SOAP é passada para o Worklight, que chama o serviço da web Microsoft .NET
na função WL.Server.invokeHttp
.
A mensagem de solicitação XML SOAP de uma chamada para a operação GetBalance
implementada pelo serviço da web Microsoft .NET, com um número de conta de
123456789, é semelhante a esta:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="urn://bankingapplication/retailbank_V1"> <soap:Header/> <soap:Body> <tns:GetBalance> <accountNumber>123456789</accountNumber> </tns:GetBalance> </soap:Body> </soap:Envelope>
O Worklight Server converte automaticamente a resposta XML SOAP do serviço da web Microsoft .NET em JSON do aplicativo remoto de origem:
{ "errors": [], "info": [], "isSuccessful": true, "result": { "NS1": "urn://bankingapplication/retailbank_V1", "lastUpdated": "20/06/2012 11:46:52", "returnValue": "1000.00" }, "statusCode": 200, "statusReason": "OK", "warnings": [] }
Voltar para a Especificação do Padrão Worklight para Microsoft .NET: Solicitação-Resposta