春季WS MTOM:更改边界名称
带有MTOM的Spring WS强迫响应的“内容类型”标头:
Multipart/Related; boundary="----=_Part_9_1258512392.1655296193519"; type="application/xop+xml"; start-info="text/xml"
这里的问题是我必须强迫边界值使用
--uuid:something
我正在使用客户端Interinterceptor类来覆盖内容型式标题:
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"
);
}
}
}
但是SaajsoapMessage对象具有一个“ savechanges()”方法是在拦截器之后调用的。
此方法正在覆盖此内容类型的标头。
有什么办法强制此标头吗?
预先感谢您,对不起,我的英语不好。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论