首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WebLogic UDDI Client API 實戰(一):查詢服務完整指南

     編輯:Java 相關知識

API 架構概覽

WebLogic 內建的 UDDI Client API 位於 weblogic.jar 中,結構嚴格遵循 UDDI 標準。核心入口為兩大類:

  • Inquiry —— 查詢操作(繼承 UDDIService)
  • Publish —— 發布操作(繼承 UDDIService)

兩者均需通過 setURL() 指定查詢/發布端點。

查詢模型:Find 與 Get 雙層機制

UDDI 定義四大數據模型,Inquiry 提供對應的四個 findXxx(模糊查找)與五個 getXxxDetail(精確獲取):

模型Find 方法Get 方法
BusinessEntityfindBusinessgetBusinessDetail / getBusinessDetailExt
BusinessServicefindServicegetServiceDetail
BindingTemplatefindBindinggetBindingDetail
tModelfindTModelgetTModelDetail

標準流程: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 獨立查詢

除上述層級鑽取外,亦可直接查詢 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 傳遞機制,即可高效實現服務發現與元數據檢索。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved