1. 什么是Feature?
Feature能定制服务端,客户端或Bus , 通常添加功能。例如,LoggingFeature配置记录他们的每一个日志消息。
默认情况下,初始化方法都委托给initializeProvider(InterceptorProvider). 如果你简单地添加拦截器到
服务端,客户端,或Bus, Feature使你可以轻松地添加他们。
2. 编写feature并配置feature
CXF为配置不同的功能提供几个不同的features. 如日志处理。。等
--编写一个feature
很容易编写一个新的feature, 你的feature仅只需要扩展AbstractFeature并实现initializeProvider().
下面是一个执行日志功能的例子:
01.public class LoggingFeature extends AbstractFeature {
02. private static final int DEFAULT_LIMIT = 100 * 1024;
03. private static final LoggingInInterceptor IN = new LoggingInInterceptor(DEFAULT_LIMIT);
04. private static final LoggingOutInterceptor OUT = new LoggingOutInterceptor(DEFAULT_LIMIT);
05.
06. int limit = DEFAULT_LIMIT;
07.
08. @Override
09. protected void initializeProvider(InterceptorProvider provider, Bus bus) {
10. if (limit == DEFAULT_LIMIT) {
11. provider.getInInterceptors().add(IN);
12. provider.getInFaultInterceptors().add(IN);
13. provider.getOutInterceptors().add(OUT);
14. provider.getOutFaultInterceptors().add(OUT);
15. } else {
16. LoggingInInterceptor in = new LoggingInInterceptor(limit);
17. LoggingOutInterceptor out = new LoggingOutInterceptor(limit);
18. provider.getInInterceptors().add(in);
19. provider.getInFaultInterceptors().add(in);
20. provider.getOutInterceptors().add(out);
21. provider.getOutFaultInterceptors().add(out);
22. }
23. }
24. /**
25. * This function has no effect at this time.
26. * @param lim
27. */
28. public void setLimit(int lim) {
29. limit = lim;
30. }
31.
32. /**
33. * Retrieve the value set with {@link #setLimit(int)}.
34. * @return
35. */
36. public int getLimit() {
37. return limit;
38. }
39.}