返回列表 发帖

WebLogic UDDI Client API 实例学习(二)

发布 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("webmaster@sharetop.com");
  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();
 }
}

返回列表 回复 发帖