JAX-WSで簡単Webサービスクライアント(MTOM編)

JAX-WSで簡単Webサービスクライアント - ITエンジニアとして生きるで紹介したもののMTOM編。

実はJAXBのバグで@XmlMimeType("application/octet-stream")が効かない - ITエンジニアとして生きるの中で書いてたことなんだけど、今日ちょうどこの情報が欲しくて

 「そういえばMTOMクライアントのこと前ブログに書いたな。どこに書いたっけ???」

って探してたけどなかなかトレース出来なかったので切り出すことにした。
(ブログの題名が違いすぎて探せなかったんだな・・・org)


では本題に。

Webサービスクライアント

package org.ws.sample.stub.client;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;

import org.ws.sample.stub.service.MTOMStubService;

public class MTOMStubClient {

	public void execute() throws MalformedURLException {

		URL url = new URL("http://localhost:8888/webapp/ws/MTOMService?wsdl");
		QName qname = new QName(
				"http://impl.mtom.service.stub/",
				"MTOMStubService");

		Service service = Service.create(url, qname);
		MTOMStubService stub = service.getPort(MTOMStubService.class);

		SOAPBinding bind = (SOAPBinding) ((BindingProvider) stub).getBinding();
		bind.setMTOMEnabled(true);
		
		URL file = getClass().getResource("/data.jpg");
		DataHandler dh = new DataHandler(new FileDataSource(new File(
				file.getPath())));
		stub.attach(dh, "attach-data.jpg");
	}
}

基本的にはJAX-WSで簡単Webサービスクライアント - ITエンジニアとして生きると同じで、

  • WSDLのURL
  • ターゲットネームスペース
  • サービス名
  • SEI(サービスエンドポイントインタフェース)クラス

の4つの情報を設定する。MTOMの場合はこれらに加えて

  • MTOMの有効化

を実施する。

◆MTOMの有効化

SOAPBinding bind = (SOAPBinding) ((BindingProvider) stub).getBinding();
bind.setMTOMEnabled(true);

あとはこんな感じで実行するだけ。

MTOMStubClient client = new MTOMStubClient();
client.execute();