英文:
Apache CXF Service: How to configure Handler Chain without @HandlerChain annotation?
问题
我尝试了以下代码:
解析器类:
public class WorkdayHandlerResolver implements HandlerResolver {
private List<Handler> handlerChain = new ArrayList<Handler>();
public WorkdayHandlerResolver(){
this.handlerChain.add( new WorkdayHandler() );
}
@Override
public List<Handler> getHandlerChain(PortInfo portInfo) {
return this.handlerChain;
}
}
处理器类:
public class WorkdayHandler implements SOAPHandler<SOAPMessageContext>{
private static final Logger LOGGER = LoggerFactory.getLogger(WorkdayHandler.class.getName());
@Override
public boolean handleMessage(SOAPMessageContext context) {
// 在这里实现处理逻辑
}
}
主服务类:
HumanResourcesService humanResourcesService = new HumanResourcesService();
HumanResourcesPort humanPort = humanResourcesService.getHumanResources();
humanResourcesService.setHandlerResolver(new WorkdayHandlerResolver());
在服务器上执行相同代码时,不会显示任何请求或响应。
请问有人可以帮助我如何配置处理器链,而不使用@Handlerchain注解?因为在Google上找不到可实现的示例或确切的示例。
英文:
I tried following code:
Resolver Class:
public class WorkdayHandlerResolver implements HandlerResolver {
private List<Handler> handlerChain = new ArrayList<Handler>();
public WorkdayHandlerResolver(){
this.handlerChain.add( new WorkdayHandler() );
}
@Override
public List<Handler> getHandlerChain(PortInfo portInfo) {
return this.handlerChain;
}
}
Handler Class:
public class WorkdayHandler implements SOAPHandler<SOAPMessageContext>{
private static final Logger LOGGER = LoggerFactory.getLogger(WorkdayHandler.class.getName());
@Override
public boolean handleMessage(SOAPMessageContext context) {
Main Service Class:
HumanResourcesService humanResourcesService = new HumanResourcesService();
HumanResourcesPort humanPort = humanResourcesService.getHumanResources();
humanResourcesService.setHandlerResolver(new WorkdayHandlerResolver());
When executed the same in server. It does not show any request or response.
Could anyone please help me how to configure handler chain without @Handlerchain annotation as no implementable example or sureshot example i am getting on google?
答案1
得分: 0
我移除了
humanResourcesService.setHandlerResolver(new WorkdayHandlerResolver());
并在下面插入了以下代码
((BindingProvider)humanPort).getBinding().setHandlerChain(Collections.singletonList(new WorkdayHandler()));
问题得到解决。
英文:
I removed
humanResourcesService.setHandlerResolver(new WorkdayHandlerResolver());
and places following line
((BindingProvider)humanPort).getBinding().setHandlerChain(Collections.singletonList(new WorkdayHandler()));
and it was fixed
专注分享java语言的经验与见解,让所有开发者获益!
评论