4月 20th, 2008at 15:52

Tags:

WSDL4J1.5を使ってみる

このエントリーをはてなブックマークに追加

WSDL4Jとは、JavaのためのWebサービス記述言語(Web Services Description Language for Java )のこと。

これと似たようなものにJWSDLというものもあるが違いがよくわからない。

IBM – Understanding WSDL in a UDDI registry, Part 3」IBMにWSDL4Jに関するドキュメントがあった。

これを参考に実装例を調べてみた。ただし、今回はWSDLの読み込みメインです。

WSDL4Jは、WSDLドキュメントの解析や、プログラムに基づいて新しいWSDLファイルを作成する標準Javaインタフェースを提供します。WSDL4JはIBM developerWorksにあるOpen Source Projectです。その目的は、Javaの要求仕様であるJSR110(Java Specification Request 110)の参照要求を提供するためのものです。このJSRはJava Community Process(JCP)を通して開発されています。

この記事のプログラミングの例はWSDL4J V0.8を使用します。WSDL4JのほとんどのクラスはWSDLドキュメントに記述できる要素を表しています。例えば、<definition>要素はDefinitionクラスに表され、<service>要素はサービスクラスによって表されます。 ユーティリティクラス郡もまた存在し、それらは、XMLドキュメントとしてWSDL4Jオブジェクトの内容を書き上げるのと同様に、WSDLファイルを読み込んだり、解析したりすることを簡単にします。

WSDLをパースする

「WSDLReader」を実装した「WSDLReaderImpl」を使う。IBMのページではWSDLReaderをstaticに使っているけど、インタフェースなので実装したWSDLReaderImplを使う。

WSDLReaderImpl
このクラスは、WSDLドキュメント(WSDL仕様で記述されたWSDLスキーマに従うXML)からWSDLモデルへの変換を容易にするメソッドのコレクションを表現しています。
String wsdlURL = "http://soap.amazon.co.jp/schemas3/AmazonWebServices.wsdl";WSDLReaderImpl wsdlReader = new WSDLReaderImpl();

このクラスからDefinitionクラスを取り出し、各要素を取得できる。

それぞれの要素を表示する

以下が代表的なクラス郡。それぞれはインタフェースで、そのインタフェースを実装したクラスが存在する。

  • Types・・・TypesImpl
  • Message・・・MessageImpl
  • PortType・・・PortTypeImpl
  • Binding・・・BindingImpl
  • Service・・・ServiceImpl

今回はOperationを全て取り出してみる。OperationはPortType要素の下にあるので、そこまで徐々に辿っていく感じになった。

public static void main(String[] args) {

    String wsdlURL = "http://soap.amazon.co.jp/schemas3/AmazonWebServices.wsdl";    WSDLReaderImpl wsdlReader = new WSDLReaderImpl();

    try{        Definition def = wsdlReader.readWSDL(null, wsdlURL);

        Map portTypeMap = def.getPortTypes();

        Iterator it = portTypeMap.keySet().iterator();        while(it.hasNext()){            Object key = it.next();            PortTypeImpl portTypeImpl = (PortTypeImpl)portTypeMap.get(key);

            List operations = portTypeImpl.getOperations();            for(int i = 0; i < operations.size(); i++){                OperationImpl operationImpl = (OperationImpl)operations.get(i);                System.out.println(operationImpl.getName());            }        }

    }catch(Exception e){

    }}

実行結果

Retrieving document at 'http://soap.amazon.co.jp/schemas3/AmazonWebServices.wsdl'.KeywordSearchRequestTextStreamSearchRequestPowerSearchRequestBrowseNodeSearchRequestAsinSearchRequestBlendedSearchRequestUpcSearchRequestSkuSearchRequestAuthorSearchRequestArtistSearchRequestActorSearchRequestManufacturerSearchRequestDirectorSearchRequestListManiaSearchRequestWishlistSearchRequestExchangeSearchRequestMarketplaceSearchRequestSellerProfileSearchRequestSellerSearchRequestSimilaritySearchRequestGetShoppingCartRequestClearShoppingCartRequestAddShoppingCartItemsRequestRemoveShoppingCartItemsRequestModifyShoppingCartItemsRequestGetTransactionDetailsRequest
このエントリーをはてなブックマークに追加