我使用IBM websphere 8.0,并在服务器上部署了一个web服务,使用注释@MTOM(enabled=true,threshold=0)启用了MTOM。我可以看到MTOM为发送附件工作,但是webservice在响应中发送附件时不使用MTOM。web服务客户端也启用了MTOM。我尝试使用普通的java jax-ws客户端以及SoapUI。以下是来自服务器的示例响应。附件总是内联的。
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.0
Content-Type: text/xml; charset=UTF-8
Content-Language: en-US
Transfer-Encoding: chunked
Date: Tue, 05 Jul 2016 18:17:12 GMT
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns3:processRequestResponse >
<ns5:Response>
<ns5:MessageHeader>
<ns5:MessageType>RECEIPT.DOWNLOAD</ns5:MessageType>
<ns5:MessageVersion>1</ns5:MessageVersion>
<ns5:MessageID>1</ns5:MessageID>
<ns5:DateTimeStamp>2016-07-05T12:17:12</ns5:DateTimeStamp>
</ns5:MessageHeader>
<ns5:ReplyHeader>
<ns5:ReplyStatusCode>0</ns5:ReplyStatusCode>
<ns5:ReplyStatusValue>SUCCESS</ns5:ReplyStatusValue>
</ns5:ReplyHeader>
<ns5:Payload>
<ns6:DownloadAttachmentResponse/>
</ns5:Payload>
<ns5:receiptImages>/9j/4AAQSkZJRgABAgAAAQABAAD</ns5:receiptImages>
<ns5:receiptImages>/9j/4AAQSkZJRgABAgAAAQABAAD</ns5:receiptImages>
</ns5:Response>
</ns3:processRequestResponse>
</soapenv:Body>
</soapenv:Envelope>
这是我的响应对象的样子
`@XmlRootElement(name = "Response",namespace="http://response.inboundgateway.ws.axol.cps.application.usbank.com/")
@XmlSeeAlso(DownloadAttachmentResponse.class)
public class Response {
@XmlElement(name = "MessageHeader", required = true)
protected Response.MessageHeader messageHeader;
@XmlElement(name = "ReplyHeader", required = true)
protected ReplyHeaderType replyHeader;
@XmlElement(name = "Payload", required = true)
protected Response.Payload payload;
@XmlMimeType("image/jpeg")
protected List<Image> receiptImages;`
确保您没有在webservices.xml中禁用MTOM,这将覆盖基于注释的配置。
从这里的文档。
对于JAX-WS web服务,使用webservices.xml部署描述符是可选的,因为您可以使用注释来指定部署描述符文件中包含的所有信息。您可以使用部署描述符文件来扩展或覆盖现有的JAX-WS注释。在webservices.xml部署描述符中定义的任何信息都会覆盖由注释指定的任何相应信息。