1.2.10. Webサービスの検索

レジストリサービスを検索し、Webサービスを探す方法について説明します。
JAXRインタフェースを利用する
JAXRは、UDDI、ebXMLなどのレジストリサービスに対して、同じインタフェースを用いてWebサービスを検索することができます。ここでは、JAXRインタフェースを用いてUDDI 2.0対応レジストリを検索してWebサービスを探す「JAXR_Query」サンプルについて説明します。プロパティや登録内容などに使用する各値は、それぞれプロパティファイルから取得します。
//フィールドではコネクションを宣言します。
Connection connection = null;
//検索を実行するmainメソッドです。
public static void main(String[] args) {
  //プロパティファイルの設定内容を取得します。
  ResourceBundle bundle = ResourceBundle.getBundle("com.nec.webotx.webservice.sample.JAXRSample");
  //検索用URLを取得します。
  String queryURL = bundle.getString("query.url");
  JAXRQuerySample queryClient = new JAXRQuerySample();
  //コネクションを張ります。
  queryClient.makeConnection(queryURL);
  //検索を実行します。
  queryClient.execute(args[0]);
}

//コネクションを張るためのメソッドです。
public void makeConnection(String queryURL) {
  //プロパティファイルの設定内容を取得します。
  ResourceBundle bundle = ResourceBundle.getBundle("com.nec.webotx.webservice.sample.JAXRSample");
  //各種プロパティの設定です。
  Properties props = new Properties();
  props.setProperty("javax.xml.registry.queryManagerURL",queryURL);//検索用URL
  //コネクションを張ります。
  try {
    ConnectionFactory factory= ConnectionFactory.newInstance();
    factory.setProperties(props);
    connection= factory.createConnection();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

//検索処理を実装したメソッドです。
public void execute(String query) {
  try {
    RegistryService rs = connection.getRegistryService();
    BusinessQueryManager bqm = rs.getBusinessQueryManager();
    //引数の文字列を検索条件に含めます。
    Collection patterns = new ArrayList();
    patterns.add("%"+ query + "%");
    System.out.println("start");
    //検索を実行し、結果を取得します。
    BulkResponse br = bqm.findOrganizations(null, patterns, null,null, null, null);
    Collection collection = br.getCollection();
    System.out.println("[RESULT]");
    //検索によって得られてた結果をコンソールに表示します。
    Iteratoriter = collection.iterator();
    while(iter.hasNext()) {
      Iterator ite;
      Organization org = (Organization) iter.next();
      //機構名
      System.out.println("Org Name: " + org.getName().getValue());
      //機構についての説明
      System.out.println("Org Description:" + org.getDescription().getValue());
      //担当者
      System.out.println("PersonName: " + org.getPrimaryContact().getPersonName().getFullName());
      //電話番号
      Collection tel = org.getPrimaryContact().getTelephoneNumbers("");
      ite = tel.iterator();
      while(ite.hasNext()) {
        TelephoneNumber number = (TelephoneNumber)ite.next();
        System.out.println("TelephoneNumber:" + number.getNumber());
      }
      //E-mail
      Collection email = org.getPrimaryContact().getEmailAddresses();
      ite = email.iterator();
      while(ite.hasNext()) {
        EmailAddressImpl address = (EmailAddressImpl)ite.next();
        System.out.println("EmailAddresses:" + address.getAddress());
      }
      //分類(カテゴリ)
      Collection classifications = org.getClassifications();
      ite = classifications.iterator();
      while(ite.hasNext()) {
        Classification classification = (Classification)ite.next();
        System.out.println("Classification Name: " + classification.getName().getValue());
        System.out.println("Classification:" + classification.getValue());
      }
      //Webサービスの情報
      Collection services = org.getServices();
      ite = services.iterator();
      while(ite.hasNext()) {
        service = (Service) ite.next();
        //サービス名
        System.out.println("Service Name: " + service.getName().getValue());
        //サービスについての説明
        System.out.println("Service Description: " + service.getDescription().getValue());
        Collection serviceBindings = service.getServiceBindings();
        Iterator bindings = serviceBindings.iterator();
        while(bindings.hasNext()) {
          ServiceBinding binding = (ServiceBinding) bindings.next();
          //サービスエンドポイントURL
          System.out.println("ServiceEndpointURI: " + binding.getAccessURI());
          Collection specLinks = binding.getSpecificationLinks();
          if (specLinks.size() > 0) {
            SpecificationLink link = (SpecificationLink)specLinks.iterator().next();
            Concept concept = (Concept)link.getSpecificationObject();
            System.out.println("Conceptname: " + concept.getName().getValue());
            Collection links = concept.getExternalLinks();
            if(links.size() > 0) {
              ExternalLink extlink = (ExternalLink)links.iterator().next();
              //WSDLのURI
              System.out.println("WSDLURI:" + extlink.getExternalURI());
            } else {
              continue;
            }
          }
        }
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    //最後にコネクションをクローズします。
    try {
      connection.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}
UDDI 3.0対応レジストリを検索する
UDDI 3.0 対応レジストリを検索する方法については、「WebOTX UDDI Registry アプリケーション開発ガイド」を参照してください。