9.19.2. SwaRef

WS-I Attachment Profile 1.0swaRef 使って MIME 添付の部分を参照するメカニズムを定義します。 このメカニズムでは、 タイプ wsi:swaRef の XML 要素のコンテントは MIME 添付として送信され、 SOAP Body 内側の要素は RFC 2111 で定義されるように CID URI スキームでこの添付への参照を格納します。

9.19.2.1. SwaRef と JAX-WS エンドポイントを併用

JAX-WS エンドポイントはすべてのマーシャル/アンマーシャルを JAXB API に委任します。 DataHandler タイプに対して SwaRef エンコーディングを有効にする最もシンプルな方法は、 以下のようにペイロード bean に @XmlAttachmentRef アノテーションを付ける方法です。
/**
 * Payload bean that will use SwaRef encoding
 */
@XmlRootElement
public class DocumentPayload
{
   private DataHandler data;
  
   public DocumentPayload()
   {
   }
  
   public DocumentPayload(DataHandler data)
   {
      this.data = data;
   }
  
   @XmlElement
   @XmlAttachmentRef
   public DataHandler getData()
   {
      return data;
   }
  
   public void setData(DataHandler data)
   {
      this.data = data;
   }
}
エンドポイントをラップしたドキュメントでは、 サービスエンドポイントインターフェースで @XmlAttachmentRef アノテーションを指定することさえ可能です。
@WebService
public interface DocWrappedEndpoint
{
   @WebMethod
   DocumentPayload beanAnnotation(DocumentPayload dhw, String test);
  
   @WebMethod
   @XmlAttachmentRef
   DataHandler parameterAnnotation(@XmlAttachmentRef DataHandler data, String test);
  
}
次にメッセージは CID で添付部分を参照することになります。
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
   <env:Header/>
   <env:Body>
      <ns2:parameterAnnotation xmlns:ns2='http://swaref.samples.jaxws.ws.test.jboss.org/'>
         <arg0>cid:0-1180017772935-32455963@ws.jboss.org</arg0>
         <arg1>Wrapped test</arg1>
      </ns2:parameterAnnotation>
   </env:Body>
</env:Envelope>