程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> WebLogic UDDI Client API實例學習(二)

WebLogic UDDI Client API實例學習(二)

編輯:關於JAVA

發布 Publish

與查詢類似,可以發布到UDDI 注冊中心的數據模型也有四個:商業實體、商業服務、綁定信息和tModel。對應Publish類中的四個save方法:

四個save方法用於發布或修改UDDI的數據,四個delete方法用於刪除數據。

getAuthToken則可以獲取注冊中心的登錄信息,得到的AuthInfo需要在對UDDI的數據進行發布、修改或刪除時作為身份驗證的參數提供。

登錄注冊中心

對UDDI注冊中心的數據進行操作時需要提供用戶注冊信息或(及)操作員的信息。Publish的getAuthToken方法得到AuthToken,而後再由它得到AuthInfo對象。AuthInfo在後面的操作中是必需的參數之一。

下面是一段示例的登錄代碼:

GetAuthToken gat = new GetAuthToken();
gat.setUserID("yancheng");
gat.setCred("12345678");
AuthInfo aInfo = publisher.getAuthToken(gat).getAuthInfo();
log("AuthInfo is "+aInfo.getValue());

發布商業實體

通過Publish類的saveBusiness方法可以向注冊中心發布一個新的BusinessEntity或是修改原有的(需要知道它的BusinessKey)。

Publish的saveBusiness方法需要提供一個SaveBusiness對象作為參數。需要發布的BusniessEntity加入這個對象中即可。有兩個方法比較重要,一個是addUploadRegister方法,提供是誰發布,另一個是繼承自request包下的UpdateRequest類的setAuthInfo, 設置前面登錄步驟得到的注冊信息AuthInfo對象。

BusinessEntity類曾經在查詢操作中出現過,下邊的圖示只列出它的set方法(同樣的在介紹查詢的時候我們只列出了它的get方法)。

可以為它加入Name、Description、Contact、Operator、DiscoveryURL、Category等信息。以及它所包含的商業服務BusinessService。

注意的是必須設置它的BusinessKey,但是因為是新發布,所以可以設置為””。

下面用一段代碼說明如何加入一個新的BusinessEntity對象:

void addBusiness(){
 try {
  file://登錄
  … …
  file://創建聯系信息
  Contact contact = new Contact();
  contact.addDescription("yancheng contact");
  contact.addEmail("[email protected]");
  contact.addPhone("1012032");
  contact.setPersonName("yan cheng");
  Contacts contacts = new Contacts();
  contacts.addContact(contact);
  file://創建商業實體
  BusinessEntity bEntity = new BusinessEntity();
  bEntity.setName(new Name("sharetop.com"));
  bEntity.addDescription("sharetop software studio");
  bEntity.setAuthorizedName("yancheng");
  bEntity.setOperator("yancheng");
  bEntity.setBusinessKey("");
  bEntity.setContacts(contacts);
  file://創建SaveBusiness作為參數
  SaveBusiness sb = new SaveBusiness();
  sb.setAuthInfo(aInfo);
  sb.addUploadRegister(new UploadRegister("yancheng"));
  sb.addBusinessEntity(bEntity);
  file://發布
  publisher.saveBusiness(sb);
 }
 catch (Exception ex) {
  ex.printStackTrace();
 }
}

發布tModel

tModel用於描述了WebService的技術規范信息。它本身並沒有和某個BusinessEntity綁定在一起,所以可以直接發布。

構建一個新的TModel對象,設置需要的參數,如Name、Description、Operator、OverviewDoc等。

同樣也必須設置它的TModelKey,如果是發布則為””。

加入TModel的代碼示例如下:

void addTModel(){
  try {
   file://登錄
   … …
   file://構建TModel對象
   TModel tModel = new TModel();
   tModel.setName(new Name("TestXType tModel"));
   tModel.addDescription("complex datatype tmodel");
   tModel.setTModelKey("");
   OverviewDoc oDoc = new OverviewDoc();
   oDoc.setOverviewURL("http://sharetop:7001/TestXType/TestXTypeEJB?WSDL");
   tModel.setOverviewDoc(oDoc);
   file://構建SaveTModel對象
   SaveTModel st = new SaveTModel();
   st.setAuthInfo(aInfo);
   st.addUploadRegister(new UploadRegister("yancheng"));
   st.addTModel(tModel);
   file://發布
   publisher.saveTModel(st);
  }
  catch (Exception ex) {
   ex.printStackTrace();
  }
}

發布商業服務

發布商業服務及其相關的綁定信息是發布WebService最重要的一環。在已經成功發布BusinessEntity和tModel之後,需要把實現的Web Service發布到Internet上。可以只發布一個空的BusinessService而不帶任何綁定模板,同時,也可以連同綁定模板一起發布。

發布BusinessService的方法與前面討論的其它發布方法基本相同。

要注意的是在發布一個BusinessService時,必須要為它指定一個BindingTemplates,如果暫時不發布BindingTemplate的話,也需要提供一個空的BindingTemplates作為參數。

示例代碼如下:

void addService(){
 try {
  file://登錄
  … …
  file://取已發布的商業實體信息
  GetRegisteredInfo gri = new GetRegisteredInfo();
  gri.setAuthInfo(aInfo);
  Vector vBusinessInfo =
   publisher.getRegisteredInfo(gri).getBusinessInfos().getBusinessInfoVector();
  BusinessInfo bInfo = (BusinessInfo)vBusinessInfo.elementAt(0);
  String bKey=bInfo.getBusinessKey();
 
  file://構建BusinessService
  BusinessService bService = new BusinessService();
  bService.setBusinessKey(bKey); file://它掛在哪個商業實體下
  bService.setServiceKey("");
  bService.setName(new Name("TestXType"));
  bService.addDescription("Test Complex DataType");
  file://為BusinessService加入空的BindingTemplates
  BindingTemplates bTemplates = new BindingTemplates();
  bService.setBindingTemplates(bTemplates);
  file://構建SaveService
  SaveService ss = new SaveService();
  ss.setAuthInfo(aInfo);
  ss.addBusinessService(bService);
  file://發布
  publisher.saveService(ss);
 }
 catch (Exception ex) {
  ex.printStackTrace();
 }
}

發布綁定模板及tModel實例對象

可以為一個存在的BusinessService加上新的綁定模板。不同的綁定模板代表了這個商業服務的不同入口。發布的方法與其它基本相同,不再贅述。

void addBinding(){
  try {
   file://登錄
   … …
   file://取已存在的商業實體及商業服務信息(也可以根據Key直接定位)
   BusinessInfo bInfo =
    (BusinessInfo)publisher.getRegisteredInfo(gri).
     getBusinessInfos().getBusinessInfoVector().elementAt(0);
   String bKey=bInfo.getBusinessKey();
   ServiceInfo sInfo =
    (ServiceInfo)bInfo.getServiceInfos().getServiceInfoVector().elementAt(0);
   String sKey = sInfo.getServiceKey();
   file://取已存在的tModel信息(同樣也可以根據Key直接定位)
   TModelInfo tInfo =
    (TModelInfo)publisher.getRegisteredInfo(gri).getTModelInfos()
     .getTModelInfoVector().elementAt(2);
   String tKey = tInfo.getTModelKey();
   file://創建InstanceDetails對象
   InstanceDetails iDetails = new InstanceDetails();
   iDetails.addDescription("Instance Details");
   OverviewDoc oDoc = new OverviewDoc();
   oDoc.setOverviewURL("http://sharetop:7001/TestXType/TestXTypeEJB?WSDL");
   iDetails.setOverviewDoc(oDoc);
   file://創建TModelInstanceInfo
   TModelInstanceInfo tmInstanceInfo = new TModelInstanceInfo();
   tmInstanceInfo.addDescription("tModel Instance Info");
   tmInstanceInfo.setTModelKey(tKey);
   tmInstanceInfo.setInstanceDetails(iDetails);
   file://創建TModelInstanceDetails
   TModelInstanceDetails tmInstanceDetails = new TModelInstanceDetails();
   tmInstanceDetails.addTModelInstanceInfo(tmInstanceInfo);
   file://創建BindingTemplate
   BindingTemplate bTemplate = new BindingTemplate();
   bTemplate.setBindingKey("");
   bTemplate.setServiceKey(sKey);
   bTemplate.setAccessPoint(new AccessPoint("http://www.superfeel.net","http"));
   bTemplate.addDescription("add new binding template 3");
   bTemplate.setTModelInstanceDetails(tmInstanceDetails);
   file://創建SaveBinding
   SaveBinding sb = new SaveBinding();
   sb.setAuthInfo(aInfo);
   sb.addBindingTemplate(bTemplate);
   file://發布
   publisher.saveBinding(sb);
  }
  catch (Exception ex) {
   ex.printStackTrace();
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved