JBoss.org Community Documentation

5.5. Using SwaRef with JAX-WS endpoints

JAX-WS endpoints delegate all marshalling/unmarshalling to the JAXB API. The most simple way to enable SwaRef encoding for DataHandler types is to annotate a payload bean with the @XmlAttachmentRef annotation as shown below:

/** 
* 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; 
	} 
} 
	
	With document wrapped endpoints you may even specify the @XmlAttachmentRef annotation on the service endpoint interface: 

@WebService 
public interface DocWrappedEndpoint 
	{ 
	@WebMethod 
	DocumentPayload beanAnnotation(DocumentPayload dhw, String test); 
	
	@WebMethod 
	@XmlAttachmentRef 
	DataHandler parameterAnnotation(@XmlAttachmentRef DataHandler data, String test); 
	
	}

The message would then refer to the attachment part by 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>