gpt4 book ai didi

java - 如何防止 Apache CXF 发送响应消息?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:42 33 4
gpt4 key购买 nike

在给定 SOAP header 元素具有给定值的情况下(例如,如果 header 标记“response”的值为“0”),我根本不希望 Apache CXF 返回响应。

我该怎么做? CXF 似乎假设所有调用都会收到响应。

(我知道这在 Web 服务上下文中看起来很奇怪,但如果您的传输是 JMS,它似乎就不那么奇怪了)。

最佳答案

我已经能够使用中止拦截器链的拦截器来做到这一点。

我已经使用 HTTP 配置(WebSphere 返回空 200)和 ActiveMQ 配置(没有响应返回到响应队列)对此进行了测试。

package my.super.interceptor;

public final class Suppressor extends AbstractSoapInterceptor {

public Suppressor() { super(Phase.SETUP); }

@Override
public void handleMessage(final SoapMessage message) throws Fault
{

final boolean suppressResponse = this.suppressResponse(message);

if(suppressResponse) {
log.debug("-> Suppressing response");
message.getInterceptorChain().abort();
}

//if you want to suppress both responses and faults, you need
//to check them separately.
//Change this code to check headers for whatever criteria you want
//(Note you may need to change the super(Phase...) )
//The code's a bit messy here - just sketching out the idea for the answer
private boolean suppressResponse(final Message message) {
final Fault fault = (Fault)message.getContent(Exception.class);

if(fault != null) {
final String faultMessage = fault.getMessage();

return faultMessage.indexOf("Something-you-want-to-match") > 0;

} else {
final MessageInfo messageInfo = (MessageInfo)message.get("org.apache.cxf.service.model.MessageInfo");
final String operation = messageInfo.getOperation().getOutputName();

return operation.indexOf("Something-you-want-to-match") > 0;
}
}

和你的 applicationContext.xml:

<jaxws:endpoint ...>
<jaxws:outInterceptors>
<bean class="my.super.interceptor.Suppressor"/>
</jaxws:outInterceptors>
<jaxws:outFaultInterceptors>
<bean class="my.super.interceptor.Suppressor"/>
</jaxws:outFaultInterceptors>
</jaxws:endpoint>

关于java - 如何防止 Apache CXF 发送响应消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7575970/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com