题
我正在使用juddi v3.0.4客户来查询UDDI服务器(juddi-portal-bundle-3.0.4)。我的兴趣是找到一个服务(我成功)和查询其绑定模板,实际上是为了让访问点WSDL稍后能够查询WebService。
如果我知道BindingTemplate键,我只能获得接入点,我通过用UDDI服务器发布的Pluto Portal来获得。
当我尝试查询绑定服务时,使用findbinding对象,我get“javax.xml.ws.soap.soapfaultexception:必须提供至少一个类别包,find_tmodel或tmodelbag”。但我无法填写FindBinding对象中的任何一个。
我缺少一些东西吗?这不是让服务模板及其WSDL的正确方法稍后?
谢谢。
奥斯卡。
解决方案
我发现了解决方案。 关键是要通过业务服务对象查找绑定模板,这将执行绑定lemplate对象。
所以,
-
UDDIInquiryPortType提供的FindService(FindService FS)API的服务密钥查询。
- 为返回的服务员,获取包含服务密钥的ServiceInfo对象。
- 给定您要查找的服务密钥(FindService可能通过名称对象范围),通过UDDIInquiryPortType提供的GetServiceDeTail(GetServicedTail SD)API获取服务详细信息,其中GeterARVICEDETAIL对象填充了服务密钥。
- 以前查询返回的servicedTail对象列表将指导您到包含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);
}
. 不隶属于 StackOverflow