Apache jUDDI:查找模板

时间:2011-05-13 12:35:45

标签: java uddi

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

如果我知道BindingTemplate密钥,我只能通过随UDDI服务器发布的Pluto门户网站获取Access点。

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

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

感谢。

的奥斯卡。

2 个答案:

答案 0 :(得分:1)

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

所以,

  1. 通过UDDIInquiryPortType提供的findService(FindService fs)API查询服务密钥。
  2. 返回ServiceList,获取包含服务密钥的ServiceInfo对象。
  3. 给定您正在寻找的服务密钥(findService可以通过Name对象确定范围),通过UDDIInquiryPortType提供的getServiceDetail(GetServiceDetail sd)API获取服务详细信息,其中GetServiceDetail对象使用服务密钥填充
  4. 上一个查询返回的ServiceDetail对象列表将引导您到包含Web服务定义(WSDL)的BindingTemplates。
  5. 希望它有所帮助。

答案 1 :(得分:1)

感谢秦玉珠的帮助。代码如下:

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