1

jUDDI v3.0.4 クライアントを使用して UDDI サーバー (juddi-portal-bundle-3.0.4) に問い合わせています。私の興味は、サービス (私は成功しました) を見つけて、そのバインディング テンプレートをクエリすることです。実際、後で WebService をクエリできるように Access Point WSDL を取得することです。

UDDI サーバーでリリースされた Pluto ポータル経由で取得する BindingTemplate キーを知っている場合にのみ、アクセス ポイントを取得できます。

FindBinding オブジェクトを使用してサービスの BindingTemplates を照会しようとすると、「javax.xml.ws.soap.SOAPFaultException: 少なくとも 1 つの categoryBag、find_tModel、または tModelBag を指定する必要があります」というメッセージが表示されます。しかし、FindBinding オブジェクトのいずれにも入力できません。

サービス テンプレートとその WSDL を後で取得する正しい方法ではありませんか?

ありがとう。

オスカー。

4

2 に答える 2

1

助けてくれた秦玉珠に感謝します。コードは次のようになります。

ServiceList list1=inquiryService.findService(findservice);
GetServiceDetail gsd=new GetServiceDetail();
for(ServiceInfo serviceInfo :list1.getServiceInfos().getServiceInfo()){
    gsd.getServiceKey().add(serviceInfo.getServiceKey());
    System.out.println(serviceInfo.getServiceKey());
    String servicekey=serviceInfo.getServiceKey();

    GetServiceDetail getServiceDetail=new GetServiceDetail();
    getServiceDetail.setAuthInfo(authinfo);
    getServiceDetail.getServiceKey().add(servicekey);
    ServiceDetail serviceDetail=inquiryService.getServiceDetail(getServiceDetail);
    BusinessService businessservice=serviceDetail.getBusinessService().get(0);
    System.out.println("fetched service name:"+businessservice.getName().get(0).getValue());
    String bindingkey = businessservice.getBindingTemplates().getBindingTemplate().get(0).getBindingKey();
    System.out.println(bindingkey);

    GetBindingDetail gbd = new GetBindingDetail();
    gbd.setAuthInfo(authinfo);
    gbd.getBindingKey().add(bindingkey);
    BindingDetail bindingdetail=inquiryService.getBindingDetail(gbd);
    BindingTemplate bindingtemplate=bindingdetail.getBindingTemplate().get(0);
    String accesspoint=bindingtemplate.getAccessPoint().getValue();
    System.out.println(accesspoint);
}
于 2012-09-01T14:34:09.167 に答える
1

私は解決策を見つけました。重要なのは、ビジネス サービス オブジェクトを介してバインディング テンプレートを探すことです。これは BindingTemplate オブジェクトに渡されます。

そう、

  1. UDDIInquiryPortType が提供する findService(FindService fs) API を介してサービス キーをクエリします。
  2. 返された ServiceList について、サービス キーを含む ServiceInfo オブジェクトを取得します。
  3. 探しているサービス キーが与えられた場合 (findService は Name オブジェクトを介して範囲指定される場合があります)、UDDIInquiryPortType によって提供される getServiceDetail(GetServiceDetail sd) API を介してサービスの詳細を取得します。GetServiceDetail オブジェクトにはサービス キーが入力されます。
  4. 前のクエリによって返された ServiceDetail オブジェクトのリストは、Web サービス定義 (WSDL) を含む BindingTemplates を示します。

それが役に立てば幸い。

于 2011-05-19T14:06:05.553 に答える