Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド |
目次 索引 |
第4部 Webサービス編 | > 第18章 Webサービスの開発 | > 18.2 Webサービスを呼び出す場合(クライアント機能)の開発 |
Webサービスクライアントは、WSDLから生成したスタブを利用してWebサービスを呼び出す処理を行う任意のクラスです。
WebサービスクライアントがWebサービスを呼び出す方法は、以下の二通りあります。
Webサービスを呼び出す処理では、以下のオブジェクトを利用します。
ServiceFactoryクラスを使用してServiceオブジェクトを取得する方法は任意のJavaアプリケーションで利用可能です。この場合、以下の手順でWebサービスを呼び出します。
Serviceインタフェースのクラス名が“StockQuoteProviderService”、サービスエンドポイントインタフェースのクラス名が“StockQuoteProvider”、呼び出すWebサービスのオペレーションの名前が“getLastTradePrice”の場合についての処理例です。
ServiceFactory sf = ServiceFactory.newInstance();//(1) StockQuoteProviderService sqs = (StockQuoteProviderService) sf.loadService(StockQuoteProviderService.class);//(2) StockQuoteProvider sqp = sqs.getStockQuoteProviderPort();//(3) float price = sqp.getLastTradePrice(tickerID);//(4) |
WebアプリケーションまたはEJBアプリケーション、J2EEアプリケーションクライアントからWebサービスを呼び出す場合、JNDIを使用してServiceオブジェクトをlookupすることができます。その他のJavaアプリケーションでServiceオブジェクトを取得する場合は、ServiceFactoryクラスを使用して取得してください。
JNDIを使用する場合は以下の手順でWebサービスを呼び出します。
lookupの引数には、以下の文字列を指定します。
java:comp/env/[ deployment descriptorの<service-ref-name>に指定した値 ] |
deployment descriptorについては、“service reference記述”を参照してください。
InitialContext ic = new InitialContext (); //(1) StockQuoteProviderService sqs = (StockQuoteProviderService)ic.lookup("java:comp/env/service/StockQuote"); //(2) StockQuoteProvider sqp = sqs.getStockQuoteProviderPort(); //(3) float price = sqp.getLastTradePrice(tickerID); //(4) |
以下のメソッドは使用できません。
------------------------------------------------------------------ } catch( javax.xml.rpc.ServiceException e ){ e.printStackTrace(); if( e.getLinkedCause() != null ){ e.getLinkedCause().printStackTrace(); } } catch( javax.xml.rpc.soap.SOAPFaultException e ){ e.printStackTrace(); System.out.println(" Code = " + e.getFaultCode()); System.out.println(" String = " + e.getFaultString()); System.out.println(" Actor = " + e.getFaultActor()); if( e.getDetail() != null ){ Detail detail = e.getDetail(); Iterator it = detail.getDetailEntries(); if( it != null ){ while(it.hasNext()){ SOAPElement elm = (SOAPElement)it.next(); System.out.println(" Detail = " + elm); } } } } catch( javax.xml.rpc.JAXRPCException e ){ e.printStackTrace(); if( e.getLinkedCause() != null ){ e.getLinkedCause().printStackTrace(); } } catch( java.rmi.RemoteException e ){ e.printStackTrace(); if( e.detail != null ){ e.detail.printStackTrace(); } } catch( Throwable e ) { e.printStackTrace(); } ------------------------------------------------------------------
目次 索引 |