2011-05-13 58 views
1

我正在使用jUDDI v3.0.4客戶端來查詢UDDI服務器(juddi-portal-bundle-3.0.4)。我的興趣是找到一個服務(我成功了)並查詢它的綁定模板,實際上是讓訪問點WSDL能夠稍後查詢WebService。Apache jUDDI:查找模板

如果我知道通過與UDDI服務器一起發佈的Pluto門戶獲得的BindingTemplate項,我只能獲得接入點。

當我嘗試使用FindBinding對象查詢服務的BindingTemplates時,得到「javax.xml.ws.soap.SOAPFaultException:必須至少提供一個categoryBag,find_tModel或tModelBag」。但是我無法填入FindBinding對象中的任何一個。

我是否錯過了某些東西?難道這不是晚些時候獲取服務模板及其WSDL的正確方法嗎?

謝謝。

奧斯卡。

回答

1

我找到了解決方案。 關鍵是要通過業務服務對象查找綁定模板,這會傳遞給BindingTemplate對象。

因此,通過UDDIInquiryPortType提供通過findService

  1. 查詢服務鍵(FindService FS)API。
  2. 對於返回的ServiceList,獲取包含服務密鑰的ServiceInfo對象。
  3. 給定您正在查找的服務密鑰(findService可以通過Name對象來確定範圍),通過UDDIInquiryPortType提供的getServiceDetail(GetServiceDetail sd)API獲取服務詳細信息,其中GetServiceDetail對象用服務密鑰填充。
  4. 先前查詢返回的ServiceDetail對象列表將引導您訪問包含Web服務定義(WSDL)的BindingTemplates。

希望它有幫助。

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