SOAP 输出拦截器 CXF
SOAP out interceptor CXF
在我们的应用程序中,我们需要与不同的第三方网络服务进行交互。在其中一种情况下,我们不得不添加一个 out 拦截器来操纵请求 headers 和 body。我们使用的主要技术是 Spring 和 CXF,配置使用 XML(在 spring 上下文中)。
有没有一种方法可以限制拦截器仅在对特定 Web 服务发出请求时调用。
public abstract class TransformSOAPMessageInterceptor extends AbstractPhaseInterceptor<Message> {
}
感谢和问候,
三
您可以检查消息中的 SOAPAction-header(下面显示的大部分示例取自 http://cxf.apache.org/docs/interceptors.html:
if (message.getVersion() instanceof Soap11) {
Map<String, List<String>> headers = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
if (headers != null) {
List<String> sa = headers.get("SOAPAction");
if (sa != null && sa.size() > 0) {
String action = sa.get(0);
if (action.startsWith("\"")) {
action = action.substring(1, action.length() - 1);
}
if (StringUtils.equals(action, "YOUR_SPECIAL_ACTION" ) {
doYourSpecialProcessint(message, action);
}
}
}
} else if (message.getVersion() instanceof Soap12) {
...........
}
在我们的应用程序中,我们需要与不同的第三方网络服务进行交互。在其中一种情况下,我们不得不添加一个 out 拦截器来操纵请求 headers 和 body。我们使用的主要技术是 Spring 和 CXF,配置使用 XML(在 spring 上下文中)。
有没有一种方法可以限制拦截器仅在对特定 Web 服务发出请求时调用。
public abstract class TransformSOAPMessageInterceptor extends AbstractPhaseInterceptor<Message> {
}
感谢和问候, 三
您可以检查消息中的 SOAPAction-header(下面显示的大部分示例取自 http://cxf.apache.org/docs/interceptors.html:
if (message.getVersion() instanceof Soap11) {
Map<String, List<String>> headers = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
if (headers != null) {
List<String> sa = headers.get("SOAPAction");
if (sa != null && sa.size() > 0) {
String action = sa.get(0);
if (action.startsWith("\"")) {
action = action.substring(1, action.length() - 1);
}
if (StringUtils.equals(action, "YOUR_SPECIAL_ACTION" ) {
doYourSpecialProcessint(message, action);
}
}
}
} else if (message.getVersion() instanceof Soap12) {
...........
}