Adaptadores Worklight são o código lado do servidor dos aplicativos implementados no 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 percorre um típico fluxo de dados entre um aplicativo remoto e um serviço da web do Microsoft .NET em execução no Message Broker:
WL.Client.invokeProcedure
). Parâmetros para o procedimento são passados como dados formatados como 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, suponhamos que os seguintes métodos C# estejam em uma classe chamada RetailBank e você as 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 de JavaScript a seguir 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 com o uso de um navegador da web com a seguinte URL:
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 com o Message Broker e para declarar os procedimentos expostos pelo adaptador para aplicativos remotos e 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>Worklight integration adapter for the Microsoft .NET service</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
de parâmetros padrão (por exemplo, displayName
, domain
e port
).
Também é possível ver que um procedimento
foi configurado para cada método .NET.
Procedimentos definem um processo para acessar as operações expostas pelo serviço da web
Microsoft .NET. Há um procedimento
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 em uma mensagem SOAP XML. A conversão de JSON em 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 SOAP XML para 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 SOAP XML do serviço da web Microsoft .NET em JSON para o 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 ao Worklight para Microsoft .NET: especificação de padrão solicitação-resposta