Apache CXF服务:如何在没有@HandlerChain注解的情况下配置处理程序链?

huangapple 未分类评论38阅读模式
英文:

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&lt;Handler&gt; handlerChain = new ArrayList&lt;Handler&gt;();

	public WorkdayHandlerResolver(){
		 this.handlerChain.add( new WorkdayHandler() );
	}

	@Override
	public List&lt;Handler&gt; getHandlerChain(PortInfo portInfo) {
	  return this.handlerChain;
	}
}

Handler Class:

public class WorkdayHandler implements SOAPHandler&lt;SOAPMessageContext&gt;{
	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

huangapple
  • 本文由 发表于 2020年5月5日 17:40:22
  • 转载请务必保留本文链接:https://java.coder-hub.com/61610102.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定