0
我做这样的事情自定义拦截器添加标题不更新标题发送消息
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(port);
client.getInInterceptors().add(new HeaderHandler());
try {
port.[my method](inputs);
}
而且我的处理程序看起来像
public class HeaderHandler extends LoggingInInterceptor {
public HeaderHandler() {
super(Phase.PRE_STREAM);
}
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message message) throws org.apache.cxf.interceptor.Fault {
Map<String, List<String>> headers = CastUtils.cast((Map<String, List<String>>) message.get(Message.PROTOCOL_HEADERS));
List<String> clientid = new ArrayList<String>();
clientid.add("");
headers.put("clientid", clientid);
List<String> authorization = new ArrayList<String>();
authorization.add("Basic @#$%#$%^#$^");
headers.put("Authorization", authorization);
message.put(Message.PROTOCOL_HEADERS, headers);
System.out.println("called");
}
}
手柄消息的方法总是被调用,并通过我调试可以找到在方法结束之前保存的消息中创建的头文件,但是当端口方法解析时,我只需在soap请求中再次发送默认头文件
Headers: {Accept=[*/*], cache-control=[no-cache], connection=[keep-alive], Content-Length=[494], content-type=[application/soap+xml; action="urn:[my method]"; charset=UTF-8], host=[localhost:8080], pragma=[no-cache], user-agent=[Apache-CXF/3.1.8]}
什么给了?
它的工作!非常感谢! –
P.S.显然,唯一让我错过的解决方案是HeaderHandler需要成为outInterceptor而不是inInterceptor。我不知道为什么,但你的解决方案好多了! –
奥普斯,我没有看到它。在客户端,一个OUT拦截器从'client - > server'执行,IN拦截器从'server - > client'执行,所以你正在修改收到的头文件! – pedrofb