Uma das dificuldades em projetos com Web Services utilizando SOAP/XML é a necessidade de gerar as classes clientes para a invocação do serviço. Tá certo que isso é feito de maneira muito simples com as ferramentas necessárias, mas fiquei com uma certa inveja do PHP. Nesse artigo, podemos ver que é muito simples invocar serviços SOAP no PHP. Tá certo que não tem as validações de estrutura e verificações que o jeito tradicional Java tem, mas em alguns casos, como testes unitários de serviços é muito mais simples fazer dessa forma. Pensando nisso criei um utilitário para facilitar esse tipo de requisição.
É só colocar a lib no classpath e utilizá-la. Você pode fazer o download do fonte ou dessa lib no Google Code, o código fonte está disponível também no GitHub. Para utilizá-la é muito simples. Você pode inclusive fazer tudo em uma linha, dessa forma:
String response = new SoapClient("http://endpointhost.com/endpoint").invokeOperation("operation", "<payload>something</payload");
Ou se você quiser algo mais organizado, segue um exemplo de um serviço de conversão de peso:
String endpoint = "http://www.webservicex.net/ConvertWeight.asmx"; String operation = "http://www.webserviceX.NET/ConvertWeight"; String input = "<web:ConvertWeight xmlns:web=\"http://www.webserviceX.NET/\">" + "<web:Weight>7</web:Weight>" + "<web:FromUnit>Grains</web:FromUnit>" + "<web:ToUnit>Grams</web:ToUnit>" + "</web:ConvertWeight>"; SoapClient soapClient = new SoapClient(endpoint); String response = response = soapClient.invokeOperation(operation, input);
O response terá o seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <ConvertWeightResponse xmlns="http://www.webserviceX.NET/"> <ConvertWeightResult>0.4536</ConvertWeightResult> </ConvertWeightResponse> </soap:Body> </soap:Envelope>
Agora vou usar nos meus testes de serviços.
Thiago, desculpa por perguntar por aqui, mas seu form de contato não está funcionando.
Percebi que é um cara que sabe muito, me tira essa dúvida por favor, se souber.
Tenho um formulário com vários campos "Lista de Valores". Exemplo: estados, chefes, cargos e etc.
Inicialmente estava chamando um componente service que chama um dbadapter e carregar uma dessas lista e passa para humantask, mas agora apareceram várias listas e não posso abusar de service no bpmn proccess.
Como faço pra carregar todas as listas e serem usadas em várias humantasks? Chamar services para fazer isso é a melhor prática? Existe alguma forma de carregar essas listas dentro das humantasks sem aparecer no bpmn proccess o componente service?
Agradeço desde já a ajuda
Obrigado por avisar, já consertei o formulário de contato. Tinha migrado de server e esqueci de incluir uma lib nova.
Com relação ao seu problema... toda a human task "padrão" é um projeto ADF (você pode fazer em qualquer outra tecnologia, inclusive outra linguagem ou plataforma). Você não precisa (e não deve) carregá-las com service no bpmn. Você pode fazer uma conexão com o banco (ADF-BC, JPA, JDBC, ...) dentro do projeto ou um projeto externo (referenciá-lo) e carregar a lista como uma aplicação ADF normal.
[...] quem tentou utilizar o projeto de cliente Soap descrito nesse post no WebLogic, pode ter tido algum problema semelhante à [...]