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();