Original Article: The gSOAP Toolkit for SOAP and REST Web Services and XML-Based Applications
Author: FSU

As ferramentas gSOAP para SOAP e Aplicativos baseados em REST Web Services e XML

O kit de ferramentas gSOAP é um kit de ferramentas de desenvolvimento de software C e C ++ para serviços da Web SOAP e REST XML e ligações genéricas de dados XML C/C++. O conjunto de ferramentas analisa WSDLs e esquemas XML (separadamente ou como um conjunto combinado) e mapeia os tipos de esquema XML e os protocolos de mensagens SOAP/REST XML para um código C e C++ fácil de usar e eficiente. Ele também suporta expor (legacy) aplicações C e C++ como serviços Web XML, gerando automaticamente código de serialização XML e especificações WSDL. Ou você pode simplesmente usá-lo para converter automaticamente XML para/de C e C ++. O toolkit suporta opções para gerar puro ANSI C ou C ++ com ou sem STL.

O kit de ferramentas gSOAP é usado pela maioria das principais empresas da Fortune 500 e de todas as 15 principais empresas de tecnologia. Velocidade, confiabilidade e flexibilidade, juntamente com um histórico comprovado e usado por alguns dos maiores fornecedores de tecnologia, o torna uma plataforma ideal para desenvolver aplicativos usando serviços da Web e processamento XML. Os aplicativos incluem sistemas embutidos, dispositivos móveis, telecomunicações, roteadores, jogos online, Web TV, sistemas bancários, sistemas de leilão, meios de comunicação, sistemas de gerenciamento de rede, plataformas de computação em nuvem e em nuvem e software de segurança. Veja por exemplo histórias de sucesso .

O kit de ferramentas gSOAP oferece uma solução de ligação de dados XML abrangente e transparente C/C++ através de técnicas de auto-codificação. Isso economiza muito tempo aos desenvolvedores para implementar serviços Web XML em C/C ++. Além disso, o uso de ligações de dados XML simplifica significativamente o uso de XML em aplicativos mapeando automaticamente tipos de dados XML para C/C ++. Os desenvolvedores de aplicativos não precisam mais ajustar a lógica do aplicativo em bibliotecas específicas e representações de dados centrados em XML tais como os DOM.

O kit de ferramentas é compatível com WS-I Basic Profile 1.0a, 1.1 e 1.2, os testes de interoperabilidade W3C Databinding aprovados e interage com outras pilhas SOAP/REST como WCF, .NET e Axis. Os destaques são o suporte para protocolos de endereçamento e segurança, anexos de transmissão (MTOM, MIME, DIME) para transferências binárias eficientes. Transferir HTTP (S), TCP/UDP e outros protocolos de transporte é suportado usando plugins convenientes (ou chamadas de definidas por usuário caso você deseje apagar o I/O).

O kit de ferramentas gSOAP implementa uma ligação de dados XML ANSI C e C++ através do uso de tecnologias de compilação. Essas tecnologias mapeiam esquemas XML para definições C/C++ e vice-versa. Existem duas vantagens principais para essa abordagem. Em primeiro lugar, a digitação forte garante o uso seguro de dados digitados em seu aplicativo e também garante que os dados XML tenham passado a validação de análise XML. Em segundo lugar, a análise e validação específica do esquema baseada em compilador é mais eficiente do que a maioria das outras técnicas de análise de XML.

O kit de ferramentas gSOAP também consome e gera esquemas WSDL e XML (XSD). Ele mapeia os tipos de dados C/C++ existentes e as funções da aplicação para WSDL, apoiando e simplificando a conversão de código legado em serviços da Web. A portabilidade do código foi alcançada para muitas plataformas, incluindo sistemas integrados e software em tempo real.

Começando: um rápido tutorial de instruções sobre o gSOAP. Há também outro mais antigo como começar para começar com o gSOAP.

Guia do Usuário: o guia com tudo o que gSOAP. Mas você pode querer começar com a compreensão de XML Data Bindings

Planilha Informativa: uma visão geral rápida das principais características.

Licenciamento: duplo licenciado como código aberto GPL v2 e licença de uso comercial (disponível para compra).

Download: comece hoje.

Porque usar o gSOAP?

Aqui está um resumo de 16 razões pelas quais acreditamos que você pode querer tentar o gSOAP para seus projetos:
  1. Portabilidade: o gSOAP suporta a maioria das plataformas, incluindo sistemas embarcados e sistemas operacionais pequenos (por exemplo, WinCE, Symbian e PalmOS). A portabilidade é testada para Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX e VxWorks.
  2. Estabilidade: o software está maduro. O desenvolvimento e o teste ocorreram ao longo de vários anos desde 2001. O software é utilizado por vários projetos industriais e produtos.
  3. Base de usuários ampla: cerca de um milhão de downloads desde 2003, mais de 6.000 membros da lista de discussão e milhares de acordos de licença/suporte com empresas. Aqui está uma breve seleção das histórias de sucesso e um resumo do depoimentos dos usuários.
  4. Pacote tudo-em-um: independência de ferramentas e bibliotecas de terceiros garante compilações bem-sucedidas e execução de tempo de execução confiável.
  5. Código aberto: código aberto aberto para uso não comercial (GPL v2). Licensa de uso comercial disponível para compra.
  6. Suporte C e C++: suporta tanto o ANSI C puro quanto o desenvolvimento de aplicativos mistos C/C++.
  7. Ligações de dados XML abrangentes: o kit de ferramentas gSOAP implementa uma ligação de dados C/C++ pura e nativa a XML usando mapeamentos automáticos e geração de código para tipos de dados C e C++ definidos pelo usuário. O conjunto de ferramentas serializa automaticamente estruturas de dados baseadas em ponteiros, incluindo gráficos cíclicos, e suporta STL (em parte), sindicatos, enums e herança de classe. Experimente a demo on-line (requer URL de WSDL ou XSD).
  8. Interoperabilidade e Conformidade: o kit de ferramentas segue as recomendações de conformidade do WS-I Basic Profile 1.0a, 1.1 e 1.2. Ele avisa sobre potenciais problemas de interoperabilidade antes de criar um novo aplicativo de serviço da Web, portanto, você não precisa passar por outro ciclo de desenvolvimento para tornar seus serviços compatíveis. Além disso, um relatório está disponível para verificar a conformidade. Além disso, os resultados de interoperabilidade de W3C ligação de dados W3C para interoperabilidade gSOAP mostram mapeamentos XML-to-type excepcionalmente bons (mapeamentos de XML-to-type verdadeiros, e não estruturas de XML como as DOM).
  9. Protocolos padrão do setor: SOAP 1.1 / 1.2 (codificação RPC e estilos de documento / literal), WSDL 1.1 / 2.0 e UDDI v2. WS-Policy 1.2 / 1.5, WS-SecurityPolicy 1.2, WS-ReliableMessaging, WS-Addressing. Suporta tipos de XSD primitivos de esquema XML, tipos simples, complexo-Tipos, extensão, restrição, elementos, atributos, referências de elemento/atributo, seqüência/tudo/escolha, grupos, grupos de atributos, substituições, any/anyAttribute, importar/incluir/redefinir esquema e matrizes SOAP (incluindo matrizes dispersas polimórficas e gamas de análise multidimensionais).
  10. Transporte: HTTP / S, TCP, UDP (SOAP-over-UDP), MIME (SwA), DIME (transmissão), MTOM (streaming), HTTP1.0 / 1.1, IPv4, IPv6, RSS, XML-RPC, WS- Endereçamento. A pilha HTTP suporta HTTP / 1.1 mensagens POST / GET SOAP / XML com compactação, fragmentação, keep-alive, logging, e encriptação SSL.
  11. Segurança: HTTPS e WS-Security: autenticação, tokens, assinaturas digitais.
  12. Rapidez: o código gerado pelo compilador específico do esquema é rápido. O benchmarking mostra velocidades comparáveis ​​ou melhores do que os analisadores XML mais rápidos (relatados por documentos técnicos revisados ​​por pares). As latências típicas de invocação do serviço SOAP de ida e volta são bem abaixo de 1ms.
  13. Depuração e teste: no modo de depuração gera logs de transporte e atividade, também no modo de depuração o gerenciamento automático de memória avisa sobre vazamentos, as ferramentas geram mensagens XML de exemplo (de WSDL) para teste on-line e off-line, geração automática de servidor de teste de eco código para teste do cliente.
  14. Pequeno impacto: as aplicações cliente podem ter menos de 100K com uma pegada de memória de tempo de execução total inferior a 150K. O gerenciamento de memória usa coleta de lixo para que os dados (de-serializados) possam ser limpos sem problemas.
  15. Numerosos exemplos: o pacote de software inclui muitos exemplos de código, incluindo servidor HTTP autônomo HTTP/1.1 e HTTPS-secure.
  16. Integração do servidor Web: inclui interfaces Apache_mod, IIS, WinInet, CGI e FastCGI para integrar seus serviços.
  17. Manutenção e desenvolvimento ativos: o software é rico em recursos, mas sempre há novos recursos a serem desejados. Veja as últimas notícias sobre desenvolvimentos atuais e planos futuros.

O que são as ferramentas gSOAP?

Faça o download do pacote mais recente do gSOAP no site do projeto SourceForge do gSOAP. O pacote de distribuição gSOAP inclui duas ferramentas de compilação para desenvolver suas aplicações:
  • O analisador WSDL 'wsdl2h'. Esta ferramenta converte WSDLs e arquivos XSD em definições C/C++ anotadas.
  • O compilador de "soapcpp2" e esqueleto. Esta ferramenta gera código RPC e serializadores XML a partir das definições de C/C++ anotadas.
O analisador 'wsdl2h' converte o WSDL nas especificações do arquivo de cabeçalho gSOAP dos serviços da Web. Esta especificação oferece uma visão transparente C/C++ da funcionalidade do servidor. O arquivo de cabeçalho é processado por 'soapcpp2' para gerar os esboços e esqueletos do código-fonte para invocar o serviço ou criar um novo serviço baseado no WSDL.

A próxima seção explica como essas ferramentas são usadas para criar aplicativos de cliente e servidor.

Um Guia Rápido

Utilizamos o analisador WSDL do gSOAP 'wsdl2h' para obter a especificação do arquivo de cabeçalho gSOAP de um serviço da Web a partir de um documento WSDL.

Para obter um arquivo de cabeçalho de um documento WSDL, execute 'wsdl2h' em um WSDL:

wsdl2h -o outfile.h infile.wsdl
onde infile.wsdl pode ser um arquivo WSDL residente ou uma localização na Web do WSDL. O outfile.h é o arquivo de saída gerado. Por exemplo:
wsdl2h -o XMethodsQuery.h http://www.xmethods.net/wsdl/query.wsdl
Isso gera o arquivo de cabeçalho XMethodsQuery.h. O arquivo de cabeçalho define o serviço em um formato de cabeçalho C / C ++ mais familiar que você pode navegar no IDE (ou com o Doxygen).

Em seguida, executamos o compilador gSOAP 'soapcpp2' no arquivo de cabeçalho gSOAP para produzir o código-fonte para implementar o aplicativo cliente. O compilador stuk e skeleton 'soapcpp2' gera proxies (e stubs RPC) para seu aplicativo cliente, conforme ilustrado abaixo.


A biblioteca de tempo de execução gSOAP fornece uma camada de transporte com uma pilha de HTTP em cima do TCP/IP, bem como suporte seguro SSL e DIME/MIME.

Para desenvolver uma aplicação de serviço execute o analisador gSOAP 'wsdl2h' em um WSDL para criar um arquivo de cabeçalho gSOAP. O arquivo de cabeçalho é compilado com o compilador 'soapcpp2':


O compilador 'soapcpp2' gera os esqueletos do serviço da Web C/C++. Você também pode ter um aplicativo C/C++ legado e desenvolver um serviço simplesmente digitando as operações e os tipos de dados do método de serviço da Web C/C++ em um arquivo de cabeçalho. O compilador 'soapcpp2' gera o código-fonte do seu projeto e produz um WSDL para anunciar seu serviço da Web.

Cliente Exemplo

O XMethods Delayed Stock Quote Web Service fornece uma cotação de estoque atrasada para um nome de ticker dado, veja a Cotação de dados atrasada Xmethods para detalhes. A descrição WSDL do Serviço da Web de Tarefas Disponíveis fornece os seguintes detalhes:
 
URL do ponto final:  http://services.xmethods.net:80/soap
Ação SOAP:  "" (2 citações) 
Espaço para nome do método remoto:  urn:xmethods-delayed-quotes
Nome do método remoto:  getQuote
   Parâmetro de entrada:  symbol do tipo xsd:string
   Parâmetro de saída:  Result do tipo xsd:float
A ferramenta de análise do WSDL wsdl2h do gSOAP converte o WSDL:
wsdl2h -c -o quote.h http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl
As opções -c garantem que o aplicativo cliente pode ser desenvolvido em C. puro. O arquivo citado de quote.h contém:
//gsoap ns1 service name: net_DOTxmethods_DOTservices_DOTstockquote_DOTStockQuoteBinding
//gsoap ns1 service type: net_DOTxmethods_DOTservices_DOTstockquote_DOTStockQuotePortType
//gsoap ns1 service port: http://66.28.98.121:9090/soap
//gsoap ns1 service namespace: urn:xmethods-delayed-quotes
//gsoap ns1 service documentation: Definições geradas pelo gSOAP WSDL parser 1.0
// Service net.xmethods.services.stockquote.StockQuoteService : net.xmethods.services.stockquote.StockQuote web service
//gsoap ns1 service method-style: getQuote rpc
//gsoap ns1 service method-encoding: getQuote http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns1 service method-action: getQuote urn:xmethods-delayed-quotes#getQuote
int ns1__getQuote(char *symbol, float &Result);
(Nota: o conteúdo pode variar dependendo da versão 'wsdl2h'.)

Como o nome do serviço é um pouco longo, nós o renomeamos no arquivo de cabeçalho para algo mais simples por causa da conveniência:

//gsoap ns1 service name: Quote
O método de serviço é declarado como um protótipo de função ns1__getQuote que especifica todos os detalhes necessários para o compilador de esqueleto gSOAP e o compilador de esqueleto 'soapcpp2' para gerar a rotina de stub e o código de troca de parâmetros para um aplicativo cliente para interagir com o serviço de Cotação de ações atrasadas.

O compilador stub e skeleton gSOAP é invocado neste arquivo de cabeçalho quote.h de um IDE (por exemplo MSVC ++ ou Borland C++), de um makefile ou da linha de comando com:

soapcpp2 -c quote.h
A opção -c garante que o código gerado seja puro C.

A seguinte função é gerada pelo compilador gSOAP:

int soap_call_ns1__getQuote(struct soap *soap, char *URL, char *action, char *symbol, float &Result);
Observe que os parâmetros do proxy gerado soap_call_ns1__getQuote são idênticos ao protótipo da função ns1__getQuote com três parâmetros de entrada adicionais: o soap é um ambiente gSOAP em tempo de execução, o URL é o endpoint URL do serviço da SOAP passado como uma seqüência de caracteres que deve ser NULL para usar o ponto final especificado no WSDL e ação é uma seqüência de caracteres que deve denotar a ação SOAP requerida pelo serviço da Web, que deve ser NULL para usar o SOAPAction especificado no WSDL. O uso do prefixo ns1__ no nome do método remoto na declaração do protótipo da função serve como prefixo do namespace para o método remoto. Um prefixo do namespace é distinto do nome da função por um par de sublinhados como em ns1__getQuote.

O seguinte programa de cliente C invoca o proxy para recuperar a cotação de estoque IBM mais recente do serviço XMethods Delayed Stock Quote:

#incluir "soapH.h" // obter o stub gerado 
#incluir "Quote.nsmap" // obtenha a tabela de mapeamento de conjunto de nomes XML gerada para o serviço Quote 
main() 

   struct soap *soap = soap_new();
   float quote; 
   if (soap_call_ns1__getQuote(soap, NULL, NULL, "IBM", quote) == SOAP_OK) 
      printf("Current IBM Stock Quote = %g\n", quote);
   else // um erro ocorreu 
      soap_print_fault(soap, stderr); // Exibir a falha SOAP no fluxo stderr 
}
Um aplicativo cliente C ++ pode usar a classe proxy gerada, como mostrado neste exemplo:
#incluir "soapQuoteProxy.h" // Obter proxy
#incluir "Quote.nsmap" // Obter ligações de conjunto de nomes
int main()
{
   Quote q;
   float r;
   if (q.ns1__getQuote("IBM", r) == SOAP_OK)
      std::cout << r << std::endl;
   else
      soap_print_fault(q.soap, stderr);
   return 0;
}
Isso pressupõe que o código foi produzido ao omitir a opção -c, para 'wsdl2h' e 'soapcpp2'.

Exemplo Web Service

Use o analisador WSDL do gSOAP 'wsdl2h' para criar um arquivo de cabeçalho para um serviço que deseja desenvolver ou você pode escrever suas próprias especificações de arquivo de cabeçalho para desenvolver um novo serviço da Web. A última abordagem é útil quando você não possui um WSDL para começar e não quer se preocupar com os detalhes da especificação WSDL. O exemplo a seguir especifica um novo serviço de calculadora da Web SOAP em um arquivo de cabeçalho. Não usamos o analisador WSDL para criar um serviço, porque podemos definir o serviço em um arquivo de cabeçalho e deixar o compilador soapSppp2 de gSOAP gerar um WSDL para nós. Queremos desenvolver um serviço que implemente três métodos remotos usando a codificação SOAP RPC (nota: doc/lit é o padrão):
 
// Conteúdo do arquivo "calc.h": 
//gsoap ns service name: calculator
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service port: http://mydomain/path/calculator.cgi
//gsoap ns service namespace: urn:calculator
int ns__add(double a, double b, double &result); 
int ns__sub(double a, double b, double &result); 
int ns__sqrt(double a, double &result); 

Os métodos de add e sub destinam-se a adicionar e subtrair dois números de ponto flutuante duplo armazenados nos parâmetros de entrada a e b e retornar o resultado da operação no parâmetro de saída de resultado. O método sqrt destina-se a levar a raiz quadrada do parâmetro de entrada a e retornar o resultado do parâmetro de saída.

O compilador stub e skeleton gSOAP é invocado neste arquivo de cabeçalho calc.h de um IDE (por exemplo, MSVC ++ ou Borland C++), de um makefile ou da linha de comando com:

soapcpp2 calc.h

O compilador gera as rotinas de esqueleto e uma descrição WSDL do serviço. Aqui está um exemplo de aplicação de serviço Calculadora que usa os esqueletos gerados. A rotina soap_serve trata os pedidos do cliente:

// Conteúdo do arquivo "calc.cpp": 
#incluir "soapH.h" 
#incluir "calculator.nsmap" 
#incluir <math.h> 
main() 

   soap_serve(soap_new()); // Chamar o despachante de solicitação de método remoto de entrada 

// Implementação do método remoto "add": 
int ns__add(struct soap *soap, duplo a, duplo b, duplo &resultado) 

   resultado = a + b; 
   return SOAP_OK; 

// Implementação do método remoto "sub": 
int ns__sub(struct soap *soap, duplo a, duplo b, duplo &resultado) 

   result = a - b; 
   return SOAP_OK; 

// Implementação do método remoto "sub": 
int ns__sqrt(struct soap *soap, duplo a, duplo &result) 

   if (a >= 0) 
   { 
      resultado = sqrt(a); 
      return SOAP_OK; 
   } 
   outro
   { 
      retorno soap_sender_fault(soap, "Raiz quadrada de valor negativo "," Eu só posso calcular a raiz quadrada de um valor não negativo");
   } 

A implementação dos métodos remotos retorna um código de status SOAP. O código SOAP_OK denota sucesso, enquanto soap_sender_fault retorna uma exceção. Este aplicativo destina-se a ser executado como um aplicativo CGI no local especificado (http: //mydomain/path/calculator.cgi). No entanto, você pode criar um servidor HTTP HTTP / HTTPS autônomo que serve conteúdo HTML dinâmico regular e serviços Web SOAP/XML, veja o Web Server gSOAP (captura de tela). Você também pode usar Apache_mod, WinInet, IIS ou Fast CGI. Apache, WinInet e IIS são recomendados em serviços autônomos e fornecem balanceamento de carga, controle de acesso, rastreamento, e mais.

Citando gSOAP: Publicações

Ao citar o projeto gSOAP, cite o seguinte artigo que primeiro introduziu o gSOAP: Outras publicações relacionadas ao GSOAP e serviços da Web:
  • Robert A. van Engelen, Pushing the SOAP Envelope with Web Services for Scientific Computing, nos trabalhos da Conferência Internacional sobre Serviços Web (ICWS), 2003, páginas 346-354.
  • Robert van Engelen, Gunjan Gupta e Saurabh Pant, desenvolvendo serviços da Web para C e C ++, no IEEE Internet Computing Journal, março de 2003, páginas 53-61.
  • Giovanni Aloisio, Massimo Cafaro, Daniele Lezzi, e Robert van Engelen, Serviços Web seguros com Globus GSI e gSOAP, nos procedimentos da EUROPAR 2003.
  • Robert van Engelen, Code Generation Techniques for Developing Web Services for Embedded Devices, nos trabalhos do 9º Simpósio ACM em Informática Aplicada SAC, Nicosia, Chipre, 2004, páginas 854-861.
  • Robert van Engelen, Constructing Finite State Automata for High Performance XML Web Services, nos trabalhos do Simpósio Internacional sobre Serviços Web (ISWS), 2004, páginas 975-981.
  • M. Govindaraju, A. Slominski, K. Chiu, P. Liu, R. van Engelen, e M. Lewis, para caracterizar o desempenho dos kits de ferramentas SOAP, nos trabalhos do 5º Workshop Internacional IEEE / ACM sobre Computação Grid, páginas 365-372, Pittsburgh, EUA, 2004.
  • Giovanni Aloisio, Massimo Cafaro, Italo Epicoco, Daniele Lezzi, e Robert van Engelen, o plugin GSI para gSOAP: segurança, desempenho e confiabilidade aprimorados, na conferência ITCC 2005, IEEE Press, Volume I, páginas 304-309
  • Michael R. Head, Madhusudhan Govindaraju, Aleksander Slominski, Pu Liu, Nayef Abu-Ghazaleh, Robert van Engelen, Kenneth Chiu, Michael J. Lewis, Benchmark Suite for SOAP-based Communication in Grid Web Services, nos procedimentos da ACM / IEEE Supercomputação (SC), 2005.
  • Robert van Engelen, Wei Zhang, e Madhusudhan Govindaraju, Toward Remote Object Coherence with Compiled Object Serialization for Distributed Computing with XML Web Services, nos trabalhos de Compiladores para Computação Paralela (CPC), 2006, páginas 441-455.
  • Wei Zhang e Robert van Engelen, TDX: um Analisador XML de alta performance Table-Driven, nos trabalhos da conferência ACM SouthEast, 2006, páginas 726-731.
  • Wei Zhang e Robert van Engelen, A Table-Driven XML Streaming Methodology for High-Performance Web Services, nos trabalhos da Conferência Internacional IEEE sobre Serviços Web (ICWS), 2006, páginas 197-206, (melhor prêmio de papel para estudantes).
  • Robert van Engelen, Madhusudhan Govindaraju, e Wei Zhang, Exploring Remote Object Coherence in XML Web Services, em processos da Conferência Internacional IEEE sobre Serviços Web (ICWS), 2006, páginas 249-256.
  • M. Head, M. Govindaraju , R. van Engelen, e W. Zhang, Benchmarking Processadores XML para Aplicações em Grid Web Services, nos trabalhos da Supercomputação 2006.
  • M. Cafaro, D. Lezzi, S. Fiore, G. Aloisio, e R. van Engelen, The GSI plug-in for gSOAP: building cross-grid interoperable secure grid services, nos trabalhos da Conferência Internacional sobre Processamento Paralelo e Applied Mathematics (PPAM) 2007, workshop sobre Modelos, Algoritmos e Metodologias para Ambiente de Computação habilitado para Grid (MAMGCE), Springer Verlag LNCS Volume 4967, páginas 894-901, 2008
  • Robert van Engelen e Wei Zhang, uma visão geral e avaliação das otimizações de desempenho de segurança de serviços da Web, para aparecer nos trabalhos da Conferência Internacional IEEE sobre Serviços Web (ICWS), 2008.
  • Wei Zhang e Robert van Engelen, Análise e Validação de XML de Alto Desempenho com Permutação Gramática de Frases Parsers, para aparecer nos trabalhos da Conferência Internacional IEEE sobre Serviços Web (ICWS), 2008.
  • Robert A. van Engelen e Wei Zhang, Identificando Oportunidades para Otimizações de Desempenho de Segurança de Serviços da Web, para aparecer nos trabalhos da Conferência de Computação de Serviços IEEE (SCC), 2008.
  • Robert A. van Engelen, Uma Estrutura para Computação Orientada a Serviços com Componentes de Serviços Web C e C ++, Transações ACM em Tecnologias de Internet, Volume 8, Edição 3, Artigo 12, maio de 2008.