Viva pessoal…
tou aqui com um probleminha em consumir webservice.
Consegui gerar o wsdl e publicar em um server uddi que esta correndo em localhost.
Quando busco o webservice no server uddi, a busca retorna o endereço do wsdl.
Meu problema agora é como consumir o web service de forma dinamica, ou seja, sem fazer o wsdl2java?!!!
Webservice wsdl + uddi
10 Respostas
Viva pessoal... tou aqui com um probleminha em consumir webservice. Consegui gerar o wsdl e publicar em um server uddi que esta correndo em localhost. Quando busco o webservice no server uddi, a busca retorna o endereço do wsdl. Meu problema agora é como consumir o web service de forma dinamica, ou seja, sem fazer o wsdl2java?!!!
Utilize o jax-ws! Com ele (e algumas muitas horas de estudo) vc consegue consumir um web-service a partir de sua wsdl! Tinha até um codigo de exemplo, vou te passar:
//WSDL URL
URL wsdlLocation = new URL(webService+"?wsdl");
// Qnames for service as defined in wsdl.
QName serviceName = new QName(definitionsTargetNamespace, servName);
// Create a dynamic Service instance
Service service = Service.create(wsdlLocation, serviceName);
Iterator<QName> it = service.getPorts();
while(it.hasNext()) {
QName qnPort = it.next();
try {
//Create a dispatch instance
Dispatch<SOAPMessage> dispatch = service.createDispatch(qnPort, SOAPMessage.class, Service.Mode.MESSAGE);
// Use Dispatch as BindingProvider
BindingProvider bp = (BindingProvider) dispatch;
// Optionally Configure RequestContext to send SOAPAction HTTP Header
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, estado.soapAction);
rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, estado.webService);
// Obtain a preconfigured SAAJ MessageFactory
MessageFactory factory = ((SOAPBinding) bp.getBinding()).getMessageFactory();
// Create SOAPMessage Request
SOAPMessage request = factory.createMessage();
// Request Header
SOAPHeader header = request.getSOAPHeader();
header.detachNode();
// Request Body
SOAPBody body = request.getSOAPBody();
// Compose the soap:Body payload
QName payloadName = new QName(schemaTargetNamespace, reqName);
SOAPBodyElement payload = body.addBodyElement(payloadName);
SOAPElement nfeCabecMsg = payload.addChildElement("nfeCabecMsg");
nfeCabecMsg.addTextNode(conteudoXmlCabec);
SOAPElement nfeDadosMsg = payload.addChildElement("nfeDadosMsg");
nfeDadosMsg.addTextNode(conteudoXmlDados);
// Invoke the endpoint synchronously
SOAPMessage reply = null;
//Invoke Endpoint Operation and read response
reply = dispatch.invoke(request);
break;
} catch (Exception ex) {
System.out.println("Porta " + qnPort.toString() + " falhou:");
}
}
Boa sorte!
no news nesse post??
realmente estou passando pelas “algumas muitas horas de estudo”.
no news nesse post??realmente estou passando pelas “algumas muitas horas de estudo”.
Olha esse post é bbeeeeem antigo! 
Hoje em dia crio clientes de web-services utilizando o plugin do eclipse para isso. Uso a versão ganymede do eclipse e é realmente muito facil consumir serviços web com ele. Basta clicar com o botão direito em um pacote qualquer, ir em new->other, escolha a opçao web-service client, e passe o link do WSDL, next… next… next… pronto, o eclipse criou todas as classes/interfaces necessárias para consumir um web-service!! Tente esse caminho ceara!
Olha esse post é bbeeeeem antigo!
Hoje em dia crio clientes de web-services utilizando o plugin do eclipse para isso. Uso a versão ganymede do eclipse e é realmente muito facil consumir serviços web com ele. Basta clicar com o botão direito em um pacote qualquer, ir em new->other, escolha a opçao web-service client, e passe o link do WSDL, next… next… next… pronto, o eclipse criou todas as classes/interfaces necessárias para consumir um web-service!! Tente esse caminho ceara!
Estava tentando ir nessa linha ‘na unha’ realmente existem ferramentas para gerar os stubs, mas me sinto ‘não no controle’ mas valeu a dica vou fazer esses paços sim!
abraços e tks!
Eu estou iniciando os estudo sobre uddi e wsdl, mas confesso que cada artigo que eu leio eu fico mais confusa. Afinal de contas como eu faço a publicação de documento wsdl em um uddi. Existe algum material que ensine a criar um uddi?
Se me puder responder rápido
eu ficaria muito feliz.
Grata,
Daniela Cedro
Olá daniela, estou com o mesmo problema… vc conseguiu algum material interessante e verdadeiramente esclarecedor?
agradeço,
[]´s
espero que vc veja esse post, já faz um tempo que vc postou sua dúvida =P
Cara como eu faço para descrever o uma API no WSDL?
Estou fazendo tudo na unha mesmo, mas to apanhando muito.
Por favor, peço ajuda! 
vlws
Olá pessoal, fazia tempo que não entrava no GUJ, ando com tempo escasso por conta da #soaexpert, mas vou tentar responder todas as dúvidas.
UDDI - Pense num banco de dados como o MySQL, com suas tabelas definidas para guardar os documentos. O UDDI vai fazer isso pra vc, vai guardar todas as informações relativas aos seus serviços, mas num modelo hierárquico. Então vc não cria um UDDI, normalmente faz uso de um já pronto, como um banco de dados.
Como publico ? Bom, isso vai depender da implementação, produto. Não há uma interface Java padronizada, apesar de haver uma spec - JSR 93, nem todo mundo segue a risca, esse é um problema.
Existem produtos que possuem versão Web, por exemplo, que facilita um monte outras equipes, que não programadores, a inserirem seus “Contratos”, ou políticas.
Existe um OpenSource bacana : http://juddi.apache.org, que vem com um modelo de Annotations, tornando muito simples disponibilizar seu serviço num catálogo:
package br.com.soaexpert.samples;
2
3 import javax.jws.WebService;
4
5 import org.apache.juddi.v3.annotations.UDDIService;
6 import org.apache.juddi.v3.annotations.UDDIServiceBinding;
7
8
9 @UDDIService(
10 businessKey="uddi:soaexpert.com.br:businesses-asf",
11 serviceKey="uddi:soaexpert.com.br:services-helloworld",
12 description = "Hello World - Testing")
13 @UDDIServiceBinding(
14 bindingKey="uddi:soaexpert.com.br:bindings-helloworld-wsdl",
15 description="WSDL endpoint para o servico ",
17 accessPointType="wsdlDeployment",
18 accessPoint="http://${serverName}:${serverPort}/soaexpert/services/helloworld?wsdl")
19 @WebService(
20 endpointInterface = "br.com.soaexpert.samples.HelloWorld",
21 serviceName = "HelloWorld")
22
23 public class HelloWorldImpl implements HelloWorld {
24
25 public String sayHi(String text) {
26 System.out.println("Olah Mundo");
27 return "Hello " + text;
28 }
29
30 }
Existem outros que NÃO segue as specs do UDDI, mas gosto muito, pois traz soluções inovadoras como rating, rest - atom : http://wso2.com/products/governance-registry
Geração de Skeletons e Stubs: Hoje a specificação Java-WS ou frameworks como Apache CXF (WebServices Provider), faz isso pra você automaticamente e não precisa ter neuras. O problema é você usar a abordagem “Contract-Last”, deixando o contrato ser gerado pelo meta-dado, pois dificilmente você utilizará todas as annotations da especificação e a plataforma tenderá a gerar o modelo favorável ao seu ambiente, o que irá dificultar integração com plataformas heterogêneas.
PS: Se sua plataforma é homogênea, você não precisa de WebServices #fica a dica
Utilizem sempre a abordagem “Contract-First”, fazendo primeiramente o contrato e delegando aos WebServices providers, gerarem a implementação.
Por fim, como obtenho um WSDL do UDDI e crio um client dinamicamente ?
Bom, isso no java pode ser realizado com uma técnica de Proxies Dinâmicos,usando reflexão. Segue um post pra clarificar o conceito:
Usando o Apache CXF, excelente por sinal, ele abstrai essa complexidade e fica muito simples:
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("echo.wsdl");
Object[] res = client.invoke("echo", "test echo");
System.out.println("Echo response: " + res[0]);
Segue a página da documentação, de onde retirei o trecho acima: http://cxf.apache.org/docs/dynamic-clients.html
Amigos, espero ter respondido e acessem nosso site: www.soaexpert.com.br, estamos carentes de pageviews !! 8)
boa resposta …e bora para mais page views
Kenobi, Ótima sintetização ao assunto das camadas no WS. Estou fazendo pós-graduação em eng. de sistemas web e tenho que pensar na minha monografia, vc indica algum tema no contexto da tecnologia WS?
vlws