WebLogic 內建的 UDDI Client API 位於 weblogic.jar 中,結構嚴格遵循 UDDI 標準。核心入口為兩大類:
Inquiry —— 查詢操作(繼承 UDDIService)Publish —— 發布操作(繼承 UDDIService)兩者均需通過 setURL() 指定查詢/發布端點。
UDDI 定義四大數據模型,Inquiry 提供對應的四個 findXxx(模糊查找)與五個 getXxxDetail(精確獲取):
| 模型 | Find 方法 | Get 方法 |
|---|---|---|
| BusinessEntity | findBusiness | getBusinessDetail / getBusinessDetailExt |
| BusinessService | findService | getServiceDetail |
| BindingTemplate | findBinding | getBindingDetail |
| tModel | findTModel | getTModelDetail |
標準流程:Find 獲取 Key → Get 獲取詳情。
void echoBusiness(String keyword) {
FindBusiness fb = new FindBusiness();
fb.setName(new Name(keyword)); // 模糊匹配名稱
Vector<BusinessInfo> bizInfos = inquiry.findBusiness(fb)
.getBusinessInfos().getBusinessInfoVector();
for (BusinessInfo bi : bizInfos) {
System.out.println(bi.getName().getValue() + " [" + bi.getBusinessKey() + "]");
GetBusinessDetail gbd = new GetBusinessDetail();
gbd.addBusinessKey(bi.getBusinessKey());
Vector<BusinessEntity> entities = inquiry.getBusinessDetail(gbd)
.getBusinessEntityVector();
for (BusinessEntity be : entities) {
System.out.println("Authorized: " + be.getAuthorizedName()
+ ", Operator: " + be.getOperator());
}
}
}
從 BusinessInfo 可直接獲取下層 ServiceInfo,再遞歸查詢:
void echoBusinessDeep(String keyword) {
FindBusiness fb = new FindBusiness();
fb.setName(new Name(keyword));
Vector<BusinessInfo> bizInfos = inquiry.findBusiness(fb)
.getBusinessInfos().getBusinessInfoVector();
for (BusinessInfo bi : bizInfos) {
// 1. 服務列表
Vector<ServiceInfo> svcInfos = bi.getServiceInfos().getServiceInfoVector();
for (ServiceInfo si : svcInfos) {
// 2. 服務詳情
GetServiceDetail gsd = new GetServiceDetail();
gsd.addServiceKey(si.getServiceKey());
Vector<BusinessService> services = inquiry.getServiceDetail(gsd)
.getBusinessServiceVector();
for (BusinessService bs : services) {
// 3. 綁定模板
Vector<BindingTemplate> bindings = bs.getBindingTemplates()
.getBindingTemplateVector();
for (BindingTemplate bt : bindings) {
System.out.println("AccessPoint: " + bt.getAccessPoint().getValue());
// 4. tModel 實例詳情 → WSDL URL
Vector<TModelInstanceInfo> tmInfos = bt.getTModelInstanceDetails()
.getTModelInstanceInfoVector();
for (TModelInstanceInfo tmi : tmInfos) {
String wsdlUrl = tmi.getInstanceDetails()
.getOverviewDoc().getOverviewURL().getValue();
System.out.println("WSDL: " + wsdlUrl);
}
}
}
}
}
}
查詢鏈路:BusinessInfo → ServiceInfo → BusinessService → BindingTemplate → TModelInstanceInfo → InstanceDetails → OverviewDoc → OverviewURL。
除上述層級鑽取外,亦可直接查詢 tModel:
void echoTModel(String name) {
FindTModel ftm = new FindTModel();
ftm.setName(new Name(name));
Vector<TModelInfo> tmInfos = inquiry.findTModel(ftm)
.getTModelInfos().getTModelInfoVector();
for (TModelInfo ti : tmInfos) {
GetTModelDetail gtd = new GetTModelDetail();
gtd.addTModelKey(ti.getTModelKey());
Vector<TModel> models = inquiry.getTModelDetail(gtd).getTModelVector();
for (TModel tm : models) {
System.out.println(tm.getName().getValue() + " " + tm.getAuthorizedName());
}
}
}
WebLogic UDDI Client API 以標準化的 Find/Get 雙層介面,提供了完整的註冊中心查詢能力。掌握四大模型的查詢鏈路與 Key 傳遞機制,即可高效實現服務發現與元數據檢索。