ここでは、コード・フラグメントの例を挙げて、WSIF を使用して添付ファイル付き SOAP メッセージを渡す方法を示します。
以下のコード・フラグメントを使用して、トピック例: SOAP 添付ファイルの WSDL 拡張を作成するのサンプル WSDL で説明したサービスを呼び出すことができます。
import javax.activation.DataHandler; . . . DataHandler dh = new DataHandler(new FileDataSource("myimage.jpg")); WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); WSIFService service = factory.getService("my.wsdl",null,null,"http://mynamespace","abc"); WSIFOperation op = service.getPort().createOperation("MyOperation"); WSIFMessage in = op.createInputMessage(); in.setObjectPart("attch",dh); op.executeInputOnlyOperation(in);
DeploymentDescriptor.xml ファイル内で関連付けられる型マッピングは、 使用している SOAP サーバーによって異なります。 例えば、SOAP 2.3 で Tomcat を使用している場合、DeploymentDescriptor.xml ファイルには、 以下のような型マッピングが含まれます。
<isd:mappings> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="http://mynamespace" qname="x:datahandler" javaType="javax.activation.DataHandler" java2XMLClassName="org.apache.soap.encoding.soapenc.MimePartSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.MimePartSerializer" /> </isd:mappings>
この場合、バックエンド・サービスは、以下のシグニチャーに よって呼び出されます。
public void MyOperation(DataHandler dh);
スタブを使用して、添付ファイルを Web Services Invocation Framework (WSIF) に渡すこともできます。
DataHandler dh = new DataHandler(new FileDataSource("myimage.jpg")); WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); WSIFService service = factory.getService("my.wsdl",null,null,"http://mynamespace","abc"); MyInterface stub = (MyInterface)service.getStub(MyInterface.class); stub.MyOperation(dh);
オペレーションから添付ファイルを戻すこともできますが、戻りパラメーターとして戻すことができるのは 1 つの添付ファイルのみです。