[CXF-5665] Make sure the Policy annotations are only processed once
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/da66ca88 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/da66ca88 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/da66ca88 Branch: refs/heads/master Commit: da66ca88de74811d9565566c232b002d39641a2d Parents: 6a4a8fb Author: Daniel Kulp <[email protected]> Authored: Wed Apr 2 01:43:58 2014 -0400 Committer: Daniel Kulp <[email protected]> Committed: Wed Apr 2 01:43:58 2014 -0400 ---------------------------------------------------------------------- .../org/apache/cxf/jaxws/ws/PolicyAnnotationTest.java | 8 ++++++++ .../apache/cxf/ws/policy/PolicyAnnotationListener.java | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/da66ca88/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ws/PolicyAnnotationTest.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ws/PolicyAnnotationTest.java b/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ws/PolicyAnnotationTest.java index 387c272..c24b41d 100644 --- a/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ws/PolicyAnnotationTest.java +++ b/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ws/PolicyAnnotationTest.java @@ -107,6 +107,10 @@ public class PolicyAnnotationTest extends Assert { "echoIntBindingOpOutputPolicy"); check(xpu, wsdl, "/wsdl:definitions/wsdl:service/", "TestImplServiceServicePolicy"); + assertEquals(1, + xpu.getValueList("/wsdl:definitions/wsdl:binding/wsdl:operation/" + + "wsp:PolicyReference[@URI='#echoIntBindingOpPolicy']", wsdl) + .getLength()); EndpointPolicy policy = bus.getExtension(PolicyEngine.class) .getServerEndpointPolicy(s.getEndpoint().getEndpointInfo(), null, null); @@ -172,6 +176,10 @@ public class PolicyAnnotationTest extends Assert { "echoIntBindingOpOutputPolicy"); check(xpu, wsdl, "/wsdl:definitions/wsdl:service/", "TestInterfaceServiceServicePolicy"); + assertEquals(1, + xpu.getValueList("/wsdl:definitions/wsdl:binding/wsdl:operation/" + + "wsp:PolicyReference[@URI='#echoIntBindingOpPolicy']", wsdl) + .getLength()); } finally { bus.shutdown(true); http://git-wip-us.apache.org/repos/asf/cxf/blob/da66ca88/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyAnnotationListener.java ---------------------------------------------------------------------- diff --git a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyAnnotationListener.java b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyAnnotationListener.java index 94c6de4..d2256f1 100644 --- a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyAnnotationListener.java +++ b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyAnnotationListener.java @@ -176,7 +176,11 @@ public class PolicyAnnotationListener implements FactoryBeanListener { if (!list.isEmpty()) { List<Policy> stuff = CastUtils.cast((List<?>)inf.getProperty(EXTRA_POLICIES)); if (stuff != null) { - stuff.addAll(list); + for (Policy p2 : list) { + if (!stuff.contains(p2)) { + stuff.add(p2); + } + } } else { inf.setProperty(EXTRA_POLICIES, list); } @@ -340,7 +344,11 @@ public class PolicyAnnotationListener implements FactoryBeanListener { if (!list.isEmpty()) { List<Policy> stuff = CastUtils.cast((List<?>)ii.getProperty(EXTRA_POLICIES)); if (stuff != null) { - stuff.addAll(list); + for (Policy p2 : list) { + if (!stuff.contains(p2)) { + stuff.add(p2); + } + } } else { ii.setProperty(EXTRA_POLICIES, list); }
