Web サービスを開発する: 第 3 回 Apache CXF を使用してファイル・アップロード Web サービスを開発する

このチュートリアルでは、ユーザーから送信されたファイルをアップロードして、特定のディレクトリーに保管する CXF Web サービスを開発する方法を実演します。サンプル・アプリケーションは、広く使用されている Eclipse IDE で開発します。

Kuntal Ganguly, Jr. Developer, Protech Infosystems Pvt. Ltd

Kuntal GangulyKuntal は現在、コルカタの Protech Infosystems Pvt. Ltd で Junior Developer として勤務しています。彼は、広範なオープンソースおよび商用ツール (WAS CE、Eclipse、Mule ESB、EZlegacy、Active MQ、Birt、および DB2 express C) と技術 (GWT および Android) の使用に関する専門知識を持っています。



Partha Goswami, Jr. Developer, Protech Infosystems Pvt. Ltd

Partha GoswamiPartha Goswami は J2EE、Web サービス (JAX-WS)、J2ME、Android アプリケーションの開発に 13 ヶ月を超える経験を持つ B.Tech (Bachelor of Technology: 科学技術学士) です。現在はカルカッタの Protech Infosystems のジュニア・コンサルタントです。彼は広範なオープンソース・ツールや商用ツール (WASCE、Eclipse、Oracle SOA Suite11g、EZlegacy、BIRT、DB2 Express C) の使用に関する専門知識を持っています。最新技術への情熱の他に、彼はクリケットやタブラ (2個1組の手太鼓) などにも関心を持っています。



2012年 10月 25日

はじめる前に

SAOP メッセージは平文をベースとすることから、SOAP メッセージと共に送信されるバイナリー・データは Base64 形式で送信されます。バイナリー・データが Base64 に変換されると、そのサイズは大きくなりますが、大きなサイズの添付ファイルの場合、メモリーの問題が発生し、アプリケーションの強制終了、そしてサーバーの停止という事態をもたらします。MTOM (SOAP Message Transmission Optimization Mechanism) は、バイナリー・データを実際の SOAP メッセージ内で送信する代わりに、base64Binary にエンコードしてバイナリー添付ファイルとして送信します。PDF や、DOC ファイル、画像ファイル、そしてその他のタイプの文書ファイルのバイナリー・データを転送するには、MTOM が洗練されたメカニズムとなります。MTOM は、XOP (XML-binary Optimized Packaging) パッケージを使用してバイナリー・データを転送します。CXF では、XOP の実装を使用して MTOM をサポートします。

全 3 回からなる連載の最終回となるこのチュートリアルでは、Apache CXF を使用して「File uploading (ファイル・アップロード)」Web サービスを開発する方法を説明します。

この連載について

このチュートリアルの連載では、Web サービスの基本概念について説明した後、異なる種類の SOAP エンジン (Apache Axis2、Apache CXF、JAX-WS など) を使用して Web サービスを開発する各種手法を説明します。また、SOAP メッセージに添付された大容量ファイルを送信するためのソリューションとして、MTOM (SOAP Message Transmission Optimization Mechanism) を使用する方法についても説明します。MTOM は、バイナリー・データを実際の SOAP メッセージ内で送信する代わりに、base64Binary にエンコードしてバイナリー添付ファイルとして送信します。この連載ではさらに、SAAJ API を使用してメソッドを呼び出すだけで、SOAP ベースの XML メッセージに対して読み出し/書き込みを行えること、そしてオプションでこのようなメッセージをインターネットで送受信できることを明らかにします。

第 1 回ではまず、Web サービスを支える基本概念を説明し、Axis2 で異なる手法 (コード・ファーストとコントラクト・ファースト) を適用して Web サービスを開発する方法を紹介します。

第 2 回では、JAX-WS を使用して初歩的な「Hello User」Web サービスを開発した後、レベルを 1 段上げて、JAX-WS で MTOM を使用して「File Download (ファイル・ダウンロード)」Web サービス (クライアントが Web サービスからファイルをダウンロードして、ローカルに保管することができるサービス) を開発する例を紹介します。また、SAAJ クライアントから Web サービスを呼び出す方法についても説明します。

第 3 回では、MTOM と XOP の実装をサポートする Apache CXF を利用して、「File uploading (ファイル・アップロード)」Web サービス (クライアントがファイルや添付ファイルを Web サービスにアップロードできるサービス) を開発する方法を説明します。

このチュートリアルについて

このチュートリアルでは、クライアント・マシンからサーバーにファイルをアップロードできる Web サービスを開発する方法を実演します。クライアント・アプリケーションがファイルの場所を指定して Web サービスを呼び出すと、Web サービスがファイルをバイト単位で受信して、指定された固定の場所に保管するという仕組みです。

目標

このチュートリアルでは、以下の内容を学びます。

  • CXF を使用して Web サービスを構築し、その Web サービスを Tomcat サーバーにデプロイする方法
  • MTOM 標準に従って、大容量のバイナリー添付ファイルを送信する方法

前提条件

このチュートリアルでは、読者が Eclipse IDE の基本概念 (ビュー、エディター、パネルなど) を十分理解していること、さらには Java および Web サービスでの基本的なプログラミングの概念についても十分理解していることを前提とします。Eclipse、Java、および Web サービスの基本を学ぶには、「参考文献」を参照してください。

必要なソフトウェア

  • CXF-bin
  • Tomcat
  • Eclipse (オプション)

はじめに

Web サービスとは何か?

Web サービスとは、アプリケーションの機能にネットワークでアクセスできるインターフェースのことです。Web サービスは、標準インターネット技術を使用して作成されます。

Web サービスの背後にある基本概念は、SOA (Service-Oriented Architecture) です。SOA においては、アプリケーションは 1 つの巨大なプログラムではなく、複数に分割された小さなプログラムが疎結合された形となります。そして、提供されるサービスは、明確に定義された標準インターフェースによって、互いに疎結合された一連のサービスとして提供されます。このように疎結合されたプログラムによるアーキテクチャーは、サービスの追加や削除がわずかなコストでできるため、非常に高い拡張性があります。したがって、既存のサービスを組み合わせ、再利用するという方法で、新しいサービスを作成することができます。

また、アプリケーション・サービスは Java で作成されている一方でブラウザーは C++ で作成されている場合や、アプリケーション・サービスは UNIX マシンにデプロイされている一方でブラウザーは Windows マシンにデプロイされている場合などでも、標準ベースのインターフェースによって抽象化されているおかげで、問題にはなりません。プラットフォームが何であろうと関係がなくなるように、Web サービスにはプラットフォーム間の相互運用性が考慮されています。相互運用性は、Web サービスの実装によって得られる主なメリットの 1 つです。図 1 に、基本的な Web サービスのアーキテクチャーを示します。

図 1. Web サービスのアーキテクチャー
Web サービスのアーキテクチャー

Web サービスのアーキテクチャーでは、サービス・プロバイダーが、サービス・レジストリーを介して提供するサービスの記述を公開します。サービス・コンシューマーはサービス・レジストリーを検索して、それぞれのニーズを満たすサービスを見つけます。サービス・コンシューマーは人間の場合もあれば、プログラムの場合もあります。

サービス・プロバイダーは、サービスという形でビジネス・プロセスを提供します。サービス・プロバイダーによって提供されるサービスは、コンシューマーによって特定のビジネスの目標を実現するために呼び出されます。こうしたサービスが提供されて、そのサービスが利用されるというプロセスは、ディレクトリー・サービスを使って実現されます。ディレクトリー・サービスは、プロバイダーとコンシューマーの間にブローカーという形で存在します。あるサービスをコンシューマーが利用できるようにする場合、そのサービスはブローカー内のディレクトリー・サービスに公開されます。ビジネスの目標を実現する必要のあるコンシューマーは、ブローカーから該当するサービスを見つけ出します。サービスが見つかると、コンシューマーはそのサービスに接続して処理ロジックを実行します。


CXF とは何か?

Apache CXF はオープンソースのフレームワークで、Web サービスを構築および開発する上で使い勝手の良い堅牢なインフラストラクチャーになります。このフレームワークではパフォーマンスおよび拡張性に優れたサービスを作成することが可能です。CXF を使って作成したサービスは、Tomcat および Spring ベースの軽量なコンテナー内にデプロイすることも、さらに JBoss、IBM WebSphere、あるいは Oracle WebLogic などといった高度なサーバー・インフラストラクチャーにデプロイすることもできます。

CXF には、サービスを構築するための方法が多数用意されています。以下の 3 つの主要なタイプのサービスは、すべて CXF でサポートされています。

  • SOAP ― このチュートリアルでは、SOAP サービスを作成する場合の方法を要約します。
  • REST-ful ― REST サポート
  • CORBA

構成と開発

このサンプル・アプリケーションでは、サーバー上で実行されて、クライアントから送信されたファイルをアップロードする CXF ベースの Web サービスを構成および開発する方法を説明します。このサンプルをセットアップして実行するには、以下の知識が必要です。

Tomcat Web サーバー 5.5 またはそれ以降のバージョン: Tomcat サーブレット・エンジンは、Apache Software Foundation の Jakarta プロジェクトの一部として開発されたオープンソースのパッケージであり、サーブレット仕様と JSP 仕様両方の正式なリファレンス実装です。Tomcat はスタンドアロンの Web サーバーとして機能できるだけでなく、サーブレット/JSP エンジンとしての役割を果たすこともできます。この記事を執筆した時点での Tomcat の最新リリースは、http://tomcat.apache.org/download-60.cgi からダウンロードすることができます。

Apache-cxf-2.3 またはそれ以降のバージョン: Apache CXF は、オープンソースのサービス・フレームワークです。CXF では、JAX-WS や JAX-RS のようなフロントエンドのプログラミング API を使用して、サービスを構築および開発できるようになっています。CXF で開発するサービスは、さまざまなプロトコル (SOAP、XML/HTTP、RESTful HTTP、CORBA など) を扱える他、各種のトランスポート (HTTP、JMS、JBI など) 上で動作することができます。CXF の最新バージョンは、http://cxf.apache.org/download.html からダウンロードすることができます。

Eclipse IDE: 統合開発環境 (Integrated Development Environment: IDE) とは、コンピューター・プログラムを作成、編集、コンパイル、実行するためのオール・イン・ワン・ツールのことで、なかでも Eclipse は極めて優れた統合開発環境を提供します。www.eclipse.org で、Eclipse の最新リリースを調べてください。

環境をセットアップする

  1. JDK 1.5 (またはそれ以降のバージョン) をシステムにインストールします。
  2. apache-cxf ディストリビューションをダウンロードしてインストールした後、CXF_HOME 環境変数を設定します。
  3. 最新バージョンの Tomcat をダウンロードしてインストールした後、TOMCAT_HOME 環境変数を設定します。

Web サービスを作成する

  1. Eclipse を起動して、「JavaEE」パースペクティブで「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」 > 「Dynamic Web Project (動的 Web プロジェクト)」の順に選択し、「CxfService」という名前の新規プロジェクトを作成します。
  2. プロジェクト・エクスプローラーで「CxfService」を展開し、「Java Resource: src (Java リソース: src)」を選択して右クリックし、「com.ibm.uploadbean」という名前のパッケージを作成します。
  3. com.ibm.uploadbean パッケージには、ファイル名、ファイルのタイプ、DataHandler タイプを取得および設定する単純な Java Bean クラスを含めます。この Bean をパラメーターとして渡して、サービスを呼び出します。したがって、パッケージ内にクラスを新規に作成し、その名前に「FileUploader」と指定してください。このクラスのコードを図 2 およびリスト 1 に示します。
図 2. ファイル・アップローダー Bean クラス
ファイル・アップローダー Bean クラス
リスト 1. FileUploader.java
package com.ibm.uploadbean;

       import javax.activation.DataHandler;

public class FileUploader
{
  private String Name;
  private String FileType;
  private DataHandler Dfile;

  public String getName()
  {
    return this.Name;
  }

  public void setName(String Name)
  {
    this.Name = Name;
  }

  public DataHandler getDfile()
  {
    return this.Dfile;
  }

  public void setDfile(DataHandler Dfile)
  {
    this.Dfile = Dfile;
  }

public String getFileType() {
    return FileType;
}

public void setFileType(String FileType) {
    this.FileType = FileType;
}
}
  1. あらゆる Web サービスには、クライアントが実装クラスを呼び出すために使用する SEI (Service Endpoint Interface: サービス・エンドポイント・インターフェース) が必要です。そこで、「Java Resource: src (Java リソース: src)」を選択して右クリックし、「com.ibm.uploadservice」という名前の別のパッケージを作成します。
  2. UploadSEI」という名前のインターフェースを作成し、そこに「uploadFile」という名前のメソッドを含めます。このメソッドのコードを図 3 およびリスト 2 に示します。
図 3. UploadSEI ― サービス・エンドポイント・インターフェース
UploadSEI--Service Endpoint Interface
リスト 2. UploadSEI.java
package com.ibm.uploadservice;

import javax.jws.WebParam;
import javax.jws.WebService;
import com.ibm.uploadbean.FileUploader;

	
	@WebService
	public interface UploadSEI {
	    
	    void uploadFile(@WebParam(name="Dfile") FileUploader Dfile);
	}
  1. 同じ com.ibm.uploadservice パッケージ内に、このインターフェースを実装する UploadServiceImpl サービス実装クラスを作成します。このクラスが定義する実装メソッド uploadFile は、FileUploader Bean をパラメーターとして使用します。図 4 とリスト 3 を参照してください。
図 4. アップロード・サービスの実装
アップロード・サービスの実装
リスト 3. UploadServiceImpl.java
package com.ibm.uploadservice;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.activation.DataHandler;
import javax.jws.WebService;

import com.ibm.uploadbean.FileUploader;

@WebService(endpointInterface = "com.ibm.uploadservice.UploadSEI",
		serviceName = "UploadService")


public class UploadServiceImpl implements UploadSEI{
	
	public void uploadFile(FileUploader Dfile) {

		DataHandler handler = Dfile.getDfile();
		try {
		    InputStream is = handler.getInputStream();

		    OutputStream os = new FileOutputStream(new File("E:/uploads/"
			    + Dfile.getName() +"."+ 
			    Dfile.getFileType()));
		    byte[] b = new byte[100000];
		    int bytesRead = 0;
		    while ((bytesRead = is.read(b)) != -1) {
			os.write(b, 0, bytesRead);
		    }
		    os.flush();
		    os.close();
		    is.close();

		} catch (IOException e) {
		    e.printStackTrace();
		}

	    }
	  }
  1. OutputStream によって、指定の場所にファイルが保存されます。
  2. 次は、構成ファイル cxf.xml を作成して、このファイルに実装クラス UploadServiceImpl をベースとした JAX-WS エンドポイントを作成します。この構成ファイルは、ルートの src フォルダーに配置してください。これ以外の場所に配置する場合は、ファイルのパスに従って web.xml を編集する必要があります。図 5 およびリスト 4 を参照してください。
図 5. CXF 構成ファイル
CXF 構成ファイル
リスト 4. cxf.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:jaxws="http://cxf.apache.org/jaxws"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
 		http://www.springframework.org/schema/beans/spring-beans.xsd
 		http://cxf.apache.org/jaxws
 		http://cxf.apache.org/schemas/jaxws.xsd">

  <import resource="classpath:META-INF/cxf/cxf.xml" />
  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
  <jaxws:endpoint id="uploadfile"
                  implementor="com.ibm.uploadservice.UploadServiceImpl"
                  address="/UploadWS">
                  <jaxws:properties>
      <entry key="mtom-enabled" value="true"/>
    </jaxws:properties>	
    </jaxws:endpoint>
</beans>
  1. WEB-INF フォルダー内の web.xml ファイルを編集します (リスト 5 を参照)。
リスト 5. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>CxfService</display-name>
   <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:cxf.xml</param-value>
  </context-param>
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>
        org.apache.cxf.transport.servlet.CXFServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>  
</web-app>
  1. WebContent フォルダー内の WEB-INF フォルダーの下に「lib」という名前のフォルダーを作成し (図 5 を参照)、この lib フォルダー内に、以下に記載する .jar ファイルを含めます。これらの jar ファイルはすべて、前にダウンロードした CXF ディストリビューション・ライブラリー内にあります。

aopalliance-1.0.jar
asm-2.2.3.jar
commons-lang-2.4.jar
commons-logging-1.1.jar
cxf-api-2.1.5.jar
cxf-common-schemas-2.1.5.jar
cxf-common-utilities-2.1.5.jar
cxf-rt-bindings-soap-2.1.5.jar
cxf-rt-bindings-xml-2.1.5.jar
cxf-rt-core-2.1.5.jar
cxf-rt-databinding-jaxb-2.1.5.jar
cxf-rt-frontend-jaxws-2.1.5.jar
cxf-rt-frontend-simple-2.1.5.jar
cxf-rt-transports-http-2.1.5.jar
cxf-rt-ws-addr-2.1.5.jar
cxf-tools-common-2.1.5.jar
FastInfoset-1.2.2.jar
geronimo-activation_1.1_spec-1.0.2.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-javamail_1.4_spec-1.3.jar
geronimo-jaxws_2.1_spec-1.0.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.9.jar
neethi-2.0.4.jar
saaj-api-1.3.jar
saaj-impl-1.3.2.jar
spring-beans-2.0.8.jar
spring-context-2.0.8.jar
spring-core-2.0.8.jar
spring-web-2.0.8.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.6.jar
xml-resolver-1.2.jar
XmlSchema-1.4.5.jar

これで、エラーが発生しなくなるはずです。図 6 を見てください。

図 6. CXF 構成ファイル
CXF 構成ファイル
  1. プロジェクトを右クリックして、「Export (エクスポート)」 > 「WAR file (WAR ファイル)」の順に選択します (図 7 を参照)。WAR ファイルをコピーして、Tomcat_Home の下にある webapps ディレクトリーに貼り付けた後、Tomcat サーバーを起動します。
図 7. WAR を作成する
WAR を作成する
  1. Tomcat サーバーの起動時に、Web サービスがサーバー内にデプロイされます。Tomcat Manager にアクセスして、ユーザー名とパスワードを入力し、ログインします。「CxfService」という名前のサービスがデプロイされているはずです。このサービスの名前をクリックすると、使用可能なサービスとその WSDL の URL が示されます。その URL のハイパーリンクをクリックすると、WSDL が表示されます。図 8 を参照してください。
図 8. Tomcat のコンソール
Tomcat のコンソール

サービス・エンドポイント ― http://localhost:8080/CxfService/UploadWS
WSDL の URL ― http://localhost:8080/CxfService/UploadWS?wsdl

スタブを生成する

サービスを呼び出すには、クライアントがサービス・エンドポイント・インターフェース (Service Endpoint Interface: SEI) と、パラメーターとして呼び出す Bean ファイルを既知でなければなりません。クライアントがこれらの情報を取得するために、サービスの WSDL からスタブを作成することができます。

CXF ディストリビューションに用意されている「wsdl2java.bat」というツールでは、WSDL の URL といくつかのパラメーターを指定すると、特定のサービスのスタブを作成することができます。

「Command Prompt (コマンド プロンプト)」でカレント・ディレクトリーを $(CXF_HOME) の bin ディレクトリーに変更し、以下のコマンドを入力してください。

wsdl2java –client –verbose http://localhost:8080/CxfService/UploadWS?wsdl

上記のコマンドにより、bin ディレクトリー内にある wsdl2java.bat ファイルが実行されます。-client オプションを指定することで、クライアントのメインラインの開始点となるコードが生成されます。-verbose オプションの指定により、コードの生成プロセス中にコメントが表示されます。図 9 を参照してください。

コマンドの実行が正常に完了すると、$(CXF_HOME)/bin ディレクトリー内の com.ibm.uploadservice パッケージにスタブが作成されているはずです。

図 9. スタブ生成コマンド
スタブ生成コマンド

クライアントを作成する

続いてクライアント・プロジェクトを作成し、Web サービスを利用できるようにします。この例でのクライアントは POJO クライアントですが、Web クライアントにすることもできます。その場合には、Web コンテナーを実行する必要があります。以下のステップに従って、クライアントを開発してください。

  1. Eclipse で、「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」 > 「Dynamic Web Project (動的 Web プロジェクト)」の順に選択し、「CxfClient」という名前の新規プロジェクトを作成します。
  2. com.ibm.uploadservice」という名前 (スタブが作成されたパッケージと同じ名前) のパッケージを作成し、生成されたすべてのスタブをこのパッケージ内にコピー・アンド・ペーストします。
  3. com.ibm.client」という名前の別のパッケージを作成します。このパッケージ内に、「Client」という名前の新規クラスを作成します。このクラスが、生成されたスタブを介して、開発したサービスを呼び出すことになります。このクラスに main() メソッドを含めて、そこから実行が開始されるようにします。リスト 6 に、このクラスのコードを記載します。
図 10. サービス Java クラスを呼び出すクライアント
サービス Java クラスを呼び出すクライアント
リスト 6. Client.java
package com.ibm.client;
import java.io.File;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.ibm.uploadservice.*;


public final class Client {

  

    public static void main(String args[]) throws Exception {

    	JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

    	factory.getInInterceptors().add(new LoggingInInterceptor());
    	factory.getOutInterceptors().add(new LoggingOutInterceptor());
    	factory.setServiceClass(UploadSEI.class);
    	factory.setAddress
    	("http://localhost:8080/CxfService/UploadWS");
    	UploadSEI client =(UploadSEI) factory.create();

    	FileUploader file=new FileUploader();
    	    	
    	file.setName("Partha");
    	file.setFileType("doc");
    	
    	DataSource source = new FileDataSource(new File("D:/my_upload_doc.doc"));
    	file.setDfile(new DataHandler(source));
    	client.uploadFile(file);
    	System.exit(0);

       }
    }
  1. WebContent フォルダー内の WEB-INF フォルダーの下にある lib フォルダーに前述の .jar ファイルを忘れずに含めてください。
  2. DataSource オブジェクト・ソースには、アップロードするファイルの場所が含まれることになります。上記の例では「D:/my_upload_doc.doc」となっていますが、アップロードするファイルに応じて変更してください。
  3. setName("Partha") では、アップロードしたファイルを保存する際の名前を指定します。また、ファイルに応じたファイル・タイプを設定するために、setFileType("doc") の引数を変更します。
  4. さらに、file.setDfile で、型が不一致であるというエラーが発生する可能性があります。それは、生成されたスタブ FileUploade.java には、DataHandler 変数ではなく、byte[] 変数が含まれているためです。この問題を解決するには、byte[] を DataHander に変更してください。また、クライアントには javax.activation.DataHandler をインポートする必要もあります。不都合が生じた場合は、サービスの作成中に使用したリスト 1 の Bean クラスを参照してください。
  5. クライアントを実行するには、「Client.java」ファイルを右クリックして、「Run as (実行)」 > 「Java Application (Java アプリケーション)」の順に選択します。すべてが完璧であれば、このサービスで指定した場所に、指定の名前で保存されたファイルを確認できるはずです。

まとめ

システム間の相互運用性が極めて重要となっている現在、Web サービスはサービス指向アーキテクチャーの基礎となり得ます。これらの Web サービス・エンジンが提供する強力なツールを利用して、アプリケーション開発者はエンタープライズ・ビジネスのアプリケーションを統合し、企業間にまたがる最新のアプリケーションを構築することができます。


ダウンロード

内容ファイル名サイズ
Sample code for this tutorialcode.zip10KB

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=841925
ArticleTitle=Web サービスを開発する: 第 3 回 Apache CXF を使用してファイル・アップロード Web サービスを開発する
publish-date=10252012