Apache jUDDI:查找模板



我正在使用jUDDI v3.0.4客户端来查询UDDI服务器(juddi-portal-bundle-3.0.4)。我的兴趣是找到一个服务(我成功了)并查询其绑定模板,实际上是为了让接入点 WSDL 能够在以后查询 Web 服务。

只有当我知道绑定模板密钥时,我才能获得接入点,这是我通过与 UDDI 服务器一起发布的 Pluto 门户获得的。

当我尝试使用FindBinding对象查询服务的BindingTemplates时,我得到"javax.xml.ws.soap.SOAPFaultException:必须至少提供一个categoryBag,find_tModel或tModelBag"。但是我无法在 FindBinding 对象中填写任何这些内容。

我错过了什么吗?,这不是以后获取服务模板及其WSDL的正确方法吗?

谢谢。

奥斯卡。

我找到了解决方案。关键是通过业务服务对象查找绑定模板,这会传递到 BindingTemplate 对象。

所以

  1. 通过 UDDIInquiryPortType 提供的 findService(FindService fs) API 查询服务密钥。
  2. 对于返回的服务列表,获取包含服务密钥的服务信息对象。
  3. 给定您要查找的服务密钥(findService 可能通过 Name 对象限定范围),通过 UDDIInquiryPortType 提供的 getServiceDetail(GetServiceDetail sd) API 获取服务详细信息,其中 GetServiceDetail 对象使用服务密钥填充。
  4. 上一个查询返回的 ServiceDetail 对象列表将引导您进入包含 Web 服务定义 (WSDL) 的绑定模板。

希望对您有所帮助。

> 感谢秦玉珠的帮助。代码可以如下所示:

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);
}

相关内容

  • 没有找到相关文章

最新更新