Spring WS MTOM : change boundary name

94 views Asked by At

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.

0

There are 0 answers