WebLogic UDDI Client API实例进修(一)
副标题#e#
在开拓UDDI的客户端措施时,我们一般思量的都是IBM提供的UDDI4J,但不知道各人留意到没有,在BEA的WebLogic中也提供了一个很是利便的UDDI Client API。只是它被包括在weblogic.jar文件中而没有单独宣布。WebLogic UDDI Client API的布局完全遵循了UDDI的体系布局,所以,通过对这套API类库的进修和实践,相信也有助于我们更好地领略UDDI的体系架构。
Inquiry和Publish的基本
对UDDI注册中心的操纵不过乎两大类:查询和宣布(删除)。所以WebLogic界说了二个类,别离对应查询与宣布的操纵:Inquiry类用于查询,Publish类用于宣布。这两个类位于weblogic.uddi.client.service包里,它们都担任于UDDIService类。在UDDIService类里界说了一个URL属性,生存着查询或宣布的URL地点。
Inquiry和Publish类通过父类UDDIService的setURL要领来配置它们的查询或宣布地点。
查询 Inquiry
向UDDI注册中心查询的方针有四类:贸易实体(BusinessEntity)、贸易处事(BusinessService)、绑定模板信息(BindingTemplate)和tModel。我们来看Inquiry类里的要领,不难发明,这四种方针的查询,正对应Inquiry类里的四个find要领:
它包罗两类要领find和get,个中find类要领用于查找与发明,而get类要领用于获取具体信息。
四个find要领对应四种查询,五个get要领对应UDDI界说的四个数据模子(贸易实体对应两个要领)。
一般查询的步调是先通过find要领获得数据模子的根基信息,以及它的一个独一标识Key。然后就可以按照这个Key挪用get要领获取这个模子的具体信息。
贸易实体(BusinessEntity)查询
通过Inquiry类界说的findBusiness要领团结getBusinessDetail要领可以在UDDI注册中心数据库中查询贸易实体的各类信息。
#p#副标题#e#
findBusiness要领要求一个FindBusiness工具作为参数,用来界说查询的条件。
构建FindBusiness工具并配置它的一些属性,好比setName(new Name(“IBM”),查询以IBM定名的贸易实体。
查询功效可以获得所有满意查询条件的BusinessInfo工具的Vector。
BusinessInfo界说了贸易实体的根基信息,较量重要的是Name和BusinessKey。
getBusinessDetail要领按照BusinessKey的值可以获得BusinessEntity工具的Vector。
在BusinessEntity工具中界说了多个贸易实体的具体信息,包罗Contact、Operator、DiscoveryURL、Description,以及Category和Identifier信息。
下面是一段简化的代码,演示了如何按照参数查询BusinessEntity的信息。
void echoBusiness(String parm){
try {
FindBusiness fb = new FindBusiness();
fb.setName(new Name(parm));
Vector vBusinessInfo =
finder.findBusiness(fb).getBusinessInfos().getBusinessInfoVector();
for(int i=0;i
BusinessInfo bInfo = (BusinessInfo)vBusinessInfo.elementAt(i);
log(bInfo.getName().getValue()+" ["+bInfo.getBusinessKey()+"]");
GetBusinessDetail gbt = new GetBusinessDetail();
gbt.addBusinessKey(bInfo.getBusinessKey());
Vector vBusinessEntity = finder.getBusinessDetail(gbt).getBusinessEntityVector();
for(int j=0;j
BusinessEntity bEntity = (BusinessEntity)vBusinessEntity.elementAt(j);
log( "authorizedname is "+bEntity.getAuthorizedName()
+" operator is "+bEntity.getOperator());
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
BusinessService和BindingTemplate的查询
固然在Inquiry类中界说了findService要领,可是一般环境下可以按照查询到的BusinessInfo工具来进一步查询此BusinessEntity部属的BusinessService。留意到在BusinessInfo类中有一个要领getServiceInfos,它可以辅佐我们获得此贸易实体所提供的贸易处事。
从BusinessInfo工具可以获取此贸易实体下所有的ServiceInfo工具的荟萃。ServiceInfo工具界说了贸易处事的根基信息,较量重要的有Name和ServiceKey。
雷同地,用Inquiry类提供的getServiceDetail要领可以获得贸易处事的具体信息,即BusinessService类。它包罗贸易处事的多种有用信息,如:Description,Category等。
进一步,按照BusinessService类界说的getBindingTemplates要领,又可以取得此处事下的所有绑定模板信息。
在BindingTemplate工具中界说了绑定模板的一些重要属性,如:AccessPoint等。
再进一步,可以从BindingTemplate中提供的要领getTModelInstanceDetails中获取tModel Instance的具体信息,即InstanceDetails工具。包罗有OverviewDoc。
从OverviewDoc可以获得OverviewURL,这就是我们在宣布WebService时的WSDL的URL地点。
下面,笔者也给出一段代码演示了这个查询进程:
#p#分页标题#e#
void echoBusiness2(String parm){
try {
file://查询BusinessInfo
FindBusiness fb = new FindBusiness();
fb.setName(new Name(parm));
Vector vBusinessInfo =finder.findBusiness(fb).getBusinessInfos().getBusinessInfoVector();
for(int i=0;i
BusinessInfo bInfo = (BusinessInfo)vBusinessInfo.elementAt(i);
log(bInfo.getName().getValue()+" ["+bInfo.getBusinessKey()+"]");
file://查询ServiceInfo
Vector vServiceInfo = bInfo.getServiceInfos().getServiceInfoVector();
for(int j=0;j
ServiceInfo sInfo = (ServiceInfo)vServiceInfo.elementAt(j);
log(sInfo.getName().getValue()+"["+sInfo.getServiceKey()+"]");
file://查询BusinessService
GetServiceDetail gsd = new GetServiceDetail();
gsd.addServiceKey(sInfo.getServiceKey());
Vector vBusinessService = finder.getServiceDetail(gsd).getBusinessServiceVector();
for(int k=0;k
BusinessService bService = (BusinessService)vBusinessService.elementAt(k);
file://查询BindingTemplate
Vector vBindingTemplate =
bService.getBindingTemplates().getBindingTemplateVector();
for(int p=0;p
BindingTemplate bTemplate =
(BindingTemplate)vBindingTemplate.elementAt(p);
log(bTemplate.getAccessPoint().getValue());
file://查询TModelInstanceInfo
Vector vTModelInstanceInfo =
bTemplate.getTModelInstanceDetails().getTModelInstanceInfoVector();
for(int q=0;q
TModelInstanceInfo tmInstanceInfo =
(TModelInstanceInfo)vTModelInstanceInfo.elementAt(q);
file://直接显示了InstanceDetails的OverviewDoc的信息
log(tmInstanceInfo.getInstanceDetails().getOverviewDoc().getOverviewURL().getValue());
}
}
}
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
这段代码较量长,嵌套许多,可是理清了头绪相信读者照旧可以或许看大白的。无非就是一层层查询:从BusinessInfo -> ServiceInfo -> BusinessService -> BindingTemplate -> TModelInstanceInfo -> InstanceDetail,最后显示它的OverviewDoc的URL值。
查询TModel
TModel的查询有两条路,一条是上面的从BusinessInfo开始的层级查询,最终获得TModel的InstaceDetail工具。另一条路则也是从Inquiry开始的,用find要领查询全部的tModel数据模子。
先从Inquiry工具的findTModel要领查询全部合乎条件的tModel工具,同样要求有输入参数FindTModel工具界说查询条件。
然后,同样用getTModelDetail要领取得tModel工具的具体信息,即TModel类。它包罗了tModel的主要属性,如Category,Identifier,Operator,OverviewDoc等等。
下面这段代码演示了这种查询进程:
void echoTModel(String param){
try {
FindTModel ftm = new FindTModel();
ftm.setName(new Name(param));
Vector vTModelInfo = finder.findTModel(ftm).getTModelInfos().getTModelInfoVector();
for(int j=0;j
TModelInfo tInfo = (TModelInfo)vTModelInfo.elementAt(j);
log(tInfo.getName().getValue()+"["+tInfo.getTModelKey()+"]");
GetTModelDetail gtd = new GetTModelDetail();
gtd.addTModelKey(tInfo.getTModelKey());
Vector vTModel = finder.getTModelDetail(gtd).getTModelVector();
for(int i=0;i
TModel tModel = (TModel)vTModel.elementAt(i);
log(tModel.getName().getValue()+" "+tModel.getAuthorizedName());
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}