【发布时间】:2015-08-26 14:36:57
【问题描述】:
是否可以配置spring-ws-core:2.x.x 网络服务以接受Content-Type=text/xml 附带的Soap 1.2 消息信封(http://www.w3.org/2003/05/soap-envelope)?如果是这样,如何/在哪里?我们的代码配置都是基于 java 和注解的。
【问题讨论】:
标签: java web-services soap spring-ws
是否可以配置spring-ws-core:2.x.x 网络服务以接受Content-Type=text/xml 附带的Soap 1.2 消息信封(http://www.w3.org/2003/05/soap-envelope)?如果是这样,如何/在哪里?我们的代码配置都是基于 java 和注解的。
【问题讨论】:
标签: java web-services soap spring-ws
我已经能够通过创建自定义 SaajSoapMessageFactory 来处理带有 Content-Type=text/xml 的 Soap 1.2 消息信封,其中在 parseMimeHeaders() 方法中,我强制将 MimeHeaders Content-Type 标头值设置为 "application/soap+xml"(此是Soap 1.2 期望Content-Type 是什么) - 因此,我强制将传入的SOAP 请求的Content-Type 更改为"application/soap+xml"。
private MimeHeaders parseMimeHeaders(InputStream inputStream) throws IOException {
MimeHeaders mimeHeaders = new MimeHeaders();
if (inputStream instanceof TransportInputStream) {
TransportInputStream transportInputStream = (TransportInputStream) inputStream;
for (Iterator<String> headerNames = transportInputStream.getHeaderNames(); headerNames.hasNext();) {
String headerName = headerNames.next();
for (Iterator<String> headerValues = transportInputStream.getHeaders(headerName); headerValues.hasNext();) {
String headerValue = headerValues.next();
StringTokenizer tokenizer = new StringTokenizer(headerValue, ",");
while (tokenizer.hasMoreTokens()) {
if(headerName.equalsIgnoreCase(TransportConstants.HEADER_CONTENT_TYPE)) {
mimeHeaders.addHeader(headerName, "application/soap+xml");
tokenizer.nextToken();
} else {
mimeHeaders.addHeader(headerName, tokenizer.nextToken().trim());
}
}
}
}
}
return mimeHeaders;
}
然而,在我看来,这就像一个完整的 hack,所以我欢迎任何替代建议或 cmets!
【讨论】: