Spring ws with mtom is forcing the "Content-Type" header of the response to :
Multipart/Related; boundary="----=_Part_9_1258512392.1655296193519"; type="application/xop+xml"; start-info="text/xml"
The issue here is I have to force the boundary value to
--uuid:something
I am using a ClientInterceptor class to override the Content-Type Header :
public class RequestHandler implements EndpointInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) {
return true;
}
@Override
public boolean handleResponse(MessageContext messageContext, Object endpoint) {
this.setMTOM(messageContext);
return true;
}
@Override
public boolean handleFault(MessageContext messageContext, Object endpoint) {
return true;
}
@Override
public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) {
}
private void setMTOM(MessageContext messageContext) {
String uri;
try {
uri = TransportContextHolder.getTransportContext().getConnection().getUri().toString();
} catch (URISyntaxException e) {
throw new LocalizedStatusException(INTERNAL_SERVER_ERROR, "messages.error_parsing_uri");
}
if (!uri.contains("no-mtom")) {
String headerUUID = UUID.randomUUID().toString().strip();
SaajSoapMessage response = (SaajSoapMessage) messageContext.getResponse();
response.getSaajMessage().getSOAPPart().setContentId("<rootpart*" + headerUUID + "@example.jaxws.sun.com>");
response.getSaajMessage().getMimeHeaders().setHeader(
HEADER_CONTENT_TYPE,
"Multipart/Related; boundary=\"uuid:" + headerUUID + "\"; start=\"<rootpart*" + headerUUID + "@example.jaxws.sun.com>\"; type=\"application/xop+xml\"; start-info=\"text/xml\""
);
response.getSaajMessage().getSOAPPart().setMimeHeader(
HEADER_CONTENT_TRANSFER_ENCODING,
"binary"
);
}
}
}
But the SaajSoapMessage object have a "saveChanges()" method which is called after the interceptor.
This method is overriding this Content-Type header.
Is there any way to force this header ?
Thank you in advance, and sorry for my poor english.