【发布时间】:2015-07-19 17:22:06
【问题描述】:
我正在开发 Java Web 服务。此时我可以获取 Http 标头请求。但我想添加更多标头请求。
我目前正在 servlet 过滤器中执行此操作。
@WebFilter(urlPatterns = {"/*"})
public class AddHeader implements Filter {
@Resource
private WebServiceContext context;
public AddHeader() {
}
@Override
public void init(FilterConfig fConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(
ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request.getContentLength() != -1 && context != null) {
MessageContext mc = context.getMessageContext();
((HttpServletResponse) response).addHeader(
"Operation", "something"
);
}
chain.doFilter(request, response);
}
}
这个策略的问题是添加的头部是静态的。
使用 SoapHandler 类,我可以获得 SOAP 消息 - 动态:
public class SoapClass implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
log(messageContext);
return true;
}
@Override
public Set<QName> getHeaders() {
Set<QName> qNames = Collections.EMPTY_SET;
return qNames;
}
@Override
public boolean handleFault(SOAPMessageContext messageContext) {
log(messageContext);
return true;
}
@Override
public void close(MessageContext context) {
}
public static String getMsgAsString(SOAPMessage message) {
String msg = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
msg = baos.toString();
} catch (SOAPException | IOException soape) {
}
return msg;
}
private String soapToString(SOAPMessage message, boolean indent) {
final StringWriter sw = new StringWriter();
try {
TransformerFactory.newInstance().newTransformer().transform(
new DOMSource(message.getSOAPPart()),
new StreamResult(sw));
} catch (TransformerException e) {
throw new RuntimeException(e);
}
return (indent ? sw.toString() : sw.toString().replaceAll("[\\r\\n]", ""));
}
所以,我真正想要的是加入带有过滤器的动态肥皂消息。我怎样才能做到这一点?
【问题讨论】:
-
“标题是静态的”是什么意思?什么是静态标头与动态标头?
-
"Operation", "something" 是我定义的静态值。我希望能够为每个请求提供不同的肥皂内容
-
我还是不明白:什么是“价值静态”与“肥皂内容”?您是否希望根据条件设置 HTTP 标头?或者您要设置 SOAP 标头? 我希望能够为每个请求提供不同的 Soap 内容 确实翻译得不是很好。能发个插图什么的吗?