Pergunta
Estou usando o cliente jUDDI v3.0.4 para consultar um servidor UDDI (juddi-portal-bundle-3.0.4).Meu interesse é encontrar um serviço (o que consegui) e consultar seus Binding Templates, na verdade conseguir o WSDL do Access Point para poder consultar o WebService posteriormente.
Só posso obter o ponto de acesso se conhecer a chave BindingTemplate, que obtenho através do portal Plutão lançado com o servidor UDDI.
Quando tento consultar o BindingTemplates de um serviço, com um objeto FindBinding, recebo "javax.xml.ws.soap.SOAPFaultException:Pelo menos uma categoriaBag, find_tModel ou tModelBag deve ser fornecida".Mas não consigo preencher nenhum deles no objeto FindBinding.
Estou faltando alguma coisa? Essa não é a maneira correta de obter um modelo de serviço e seu WSDL posteriormente?
Obrigado.
Óscar.
Solução
Eu descobri a solução. A chave é procurar os modelos de ligação através do objeto de serviço comercial, isso realiza para o objeto BindingTemplate.
Então,
- .
- consulta para as chaves de serviço via Findservice (findservice fs) API oferecido por UddiinquiryPorttype.
- Para o serviceelist retornado, obtenha os objetos ServiceInfo que contêm as teclas de serviço.
- Dadas as teclas de serviço que você está procurando (o FindService pode ser escopo por meio de um nome de nome), obter o detalhe do serviço através da API GetServiceTail (GetServiceTail SD) oferecida pelo UddiinquiryPortType, onde o objeto GetServiceTail é preenchido com as teclas de serviço.
- A lista de objetos ServicedEteil retornada pela consulta anterior irá guiá-lo para os blindingtemplates que contêm a definição de serviço da Web (WSDL).
Espero que ajude.
Outras dicas
Obrigado a 秦玉珠 pela ajuda.O código pode ser o seguinte:
ServiceList list1=inquiryService.findService(findservice);
GetServiceDetail gsd=new GetServiceDetail();
for(ServiceInfo serviceInfo :list1.getServiceInfos().getServiceInfo()){
gsd.getServiceKey().add(serviceInfo.getServiceKey());
System.out.println(serviceInfo.getServiceKey());
String servicekey=serviceInfo.getServiceKey();
GetServiceDetail getServiceDetail=new GetServiceDetail();
getServiceDetail.setAuthInfo(authinfo);
getServiceDetail.getServiceKey().add(servicekey);
ServiceDetail serviceDetail=inquiryService.getServiceDetail(getServiceDetail);
BusinessService businessservice=serviceDetail.getBusinessService().get(0);
System.out.println("fetched service name:"+businessservice.getName().get(0).getValue());
String bindingkey = businessservice.getBindingTemplates().getBindingTemplate().get(0).getBindingKey();
System.out.println(bindingkey);
GetBindingDetail gbd = new GetBindingDetail();
gbd.setAuthInfo(authinfo);
gbd.getBindingKey().add(bindingkey);
BindingDetail bindingdetail=inquiryService.getBindingDetail(gbd);
BindingTemplate bindingtemplate=bindingdetail.getBindingTemplate().get(0);
String accesspoint=bindingtemplate.getAccessPoint().getValue();
System.out.println(accesspoint);
}