JavaベースおよびWSDLベースの統合例
2つのサービス・コンポーネント(またはサービス・コンポーネントとバインディング・コンポーネント)を接続するときは、接続の両端にインタフェースを定義します。XMLを使用する場合、これらのインタフェースで同じWSDL定義を指定する必要があり、composite.xmlファイルのinterface.wsdlを使用して定義されます。
               
JAX-WSの観点からは、(interface.javaで定義された)JavaインタフェースをWSDLインタフェースに接続すると、2つのインタフェースは互換性があるとみなされます。通常、これはOracle JDeveloperで規定され自動化されます。 
               
ノート:
この項で説明するcomposite.xmlおよびSpringコンテキスト・ファイルの作成および変更には、「設計」ビューでOracle JDeveloperのみを使用します。これらのファイルは、「ソース」ビューで直接編集しないでください。次の各例は、JavaインタフェースとWSDLファイルをSOAコンポジット・アプリケーションに統合する方法を示しています。Oracle JDeveloperを使用してこの機能を実現する方法については、この章の後続の項で説明します。
                  
たとえば、次の例に示すように、サービスのJavaインタフェースがあるとします。
public interface PortfolioService {
  public double getPorfolioValue(String portfolioId);
}
実装では、別のコンポーネント(外部Webサービス、EJBなど)によって実装された追加のStockQuoteサービスを使用できるとします。次の例に詳細を示します。
               
public interface StockQuote {
  public double getQuote (String symbol);
}
Spring Frameworkのcomposite.xmlファイルには、interface.java定義を使用するPortfolioServiceサービスおよびStockQuoteサービスがリストされます。次の例に詳細を示します。
               
<component name="PortfolioComp">
    <implementation.spring src="Spring/PortfolioComp.xml"/>
    <componentType>
      <service name="PortfolioService">
        <interface.java interface="com.bigbank.PortfolioService"/>
      </service>
      <reference name="StockService">
        <interface.java interface="com.bigbank.StockQuote"/>
      </reference>
    </componentType>
  </component>
実装クラスによって、サービス・インタフェースが実装され、参照インタフェースのセッターが提供されます。次の例に詳細を示します。
public class PortfolioServiceImpl implements PortfolioService {
  StockQuote stockQuoteRef;
  public void setStockService (StockQuote ref) {
    stockQuoteRef = ref;
  }
  public double getPorfolioValue(String portfolioId) {
    //--  use stock service
    //--  return value
  }
}
Springコンテキスト・ファイルは、サービスおよび参照をコールアウトして実装にバインドします。次の例に詳細を示します。
<beans ...> <sca:service name="PortfolioService" type="com.bigbank.PortfolioService" target="impl"> </sca:service> <sca:reference name="StockService" type="com.bigbank.StockQuote"> </sca:reference> <bean id ="impl" class ="com.bigbank.PortfolioServiceImpl"> <property name="stockService" ref="StockService"/> </bean> </beans>