apache CXF+Springで簡単Webサービス(MTOM編)
apache CXF+SpringでWebサービス作成時にWSDLを分離しない方法 - ITエンジニアとして生きるで紹介したもののMTOM編。
JAX-WSで簡単Webサービスクライアント(MTOM編) - ITエンジニアとして生きると同じで、実はこれもJAXBのバグで@XmlMimeType("application/octet-stream")が効かない - ITエンジニアとして生きるの中で書いてたんだけど、トレーサビリティが悪いので切り出すことにした。
それでは本題に。
◆サービスクラス
package org.ws.sample.stub.service.impl; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.activation.DataHandler; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.ParameterStyle; import javax.jws.soap.SOAPBinding.Style; import javax.jws.soap.SOAPBinding.Use; import javax.xml.bind.annotation.XmlMimeType; import javax.xml.ws.BindingType; import org.apache.commons.io.IOUtils; import org.sample.soa.stub.service.MTOMStubService; @WebService(serviceName = "MTOMStubService", portName = "MTOMStubServicePort", targetNamespace = "http://impl.mtom.service.stub/") @SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL, parameterStyle = ParameterStyle.BARE) @BindingType(value = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING) public class MTOMStubServiceImpl implements MTOMStubService { public void attach( @XmlMimeType("application/octet-stream") DataHandler value, String fileName) { FileOutputStream fos = null; try { fos = new FileOutputStream(new File("C:/tmp/" + fileName)); value.writeTo(fos); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { IOUtils.closeQuietly(fos); } } } }
基本的には
apache CXF+SpringでWebサービス作成時にWSDLを分離しない方法 - ITエンジニアとして生きる
と同じ。変更点はバインディングタイプにMTOMを指定すること。
◆バインディングタイプにMTOMを指定する
@BindingType(value = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING)
なお今回のサービスクラスは「C:/tmp/」配下に、指定されたファイル名で添付ファイルを保存するサービスとしている。
「@XmlMimeType("application/octet-stream") 」についてはJAXBのバグで@XmlMimeType("application/octet-stream")が効かない - ITエンジニアとして生きるを参照。