Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 96836 invoked from network); 22 Aug 2008 17:44:49 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 22 Aug 2008 17:44:49 -0000 Received: (qmail 39099 invoked by uid 500); 22 Aug 2008 17:43:52 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 39030 invoked by uid 500); 22 Aug 2008 17:43:52 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 39012 invoked by uid 99); 22 Aug 2008 17:43:52 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Aug 2008 10:43:52 -0700 X-ASF-Spam-Status: No, hits=-1998.5 required=10.0 tests=ALL_TRUSTED,WEIRD_PORT X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Aug 2008 17:42:51 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 9824A2388A07; Fri, 22 Aug 2008 10:43:20 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r688133 - in /cxf/trunk: api/src/main/java/org/apache/cxf/phase/ api/src/main/java/org/apache/cxf/service/model/ api/src/main/java/org/apache/cxf/ws/policy/ api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/ rt/bindings/soap/src/... Date: Fri, 22 Aug 2008 17:43:18 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080822174320.9824A2388A07@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dkulp Date: Fri Aug 22 10:43:16 2008 New Revision: 688133 URL: http://svn.apache.org/viewvc?rev=688133&view=rev Log: [CXF-1656] Updates to policy engine to store policies on the service model itself (so it get's garbage collected with everything else) Get the first WS-SecPol assertion working (HttpsToken) Added: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java (with props) cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml (with props) Removed: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AbstractConfigurableSecurityAssertion.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/DoubleItImpl.java Modified: cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/WSSecurityPolicyLoader.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/WSSecurityPolicyInterceptorProvider.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AbstractSecurityAssertion.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AlgorithmSuite.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AsymmetricBinding.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/HttpsToken.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/SymmetricBinding.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportBinding.java cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportToken.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomPolicyTest.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/policy/HTTPServerPolicyTest.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java cxf/trunk/systests/src/test/resources/wsdl_systest/DoubleIt.wsdl Modified: cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java (original) +++ cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java Fri Aug 22 10:43:16 2008 @@ -101,4 +101,10 @@ String method = (String)message.get(Message.HTTP_REQUEST_METHOD); return "GET".equals(method) && message.getContent(XMLStreamReader.class) == null; } + + protected boolean isRequestor(T message) { + return Boolean.TRUE.equals(message.containsKey( + org.apache.cxf.message.Message.REQUESTOR_ROLE)); + } + } Modified: cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java (original) +++ cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java Fri Aug 22 10:43:16 2008 @@ -42,6 +42,7 @@ service = serv; } + public String getTransportId() { return transportId; } @@ -54,6 +55,9 @@ return service.getInterface(); } + public void setService(ServiceInfo s) { + service = s; + } public ServiceInfo getService() { return service; } @@ -128,8 +132,8 @@ } public String toString() { - return "BindingQName=" + binding.getName() - + ", ServiceQName=" + binding.getService().getName() + return "BindingQName=" + (binding == null ? "" : (binding.getName() + + ", ServiceQName=" + (binding.getService() == null ? "" : binding.getService().getName()))) + ", QName=" + name; } } Modified: cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties (original) +++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/APIMessages.properties Fri Aug 22 10:43:16 2008 @@ -18,5 +18,5 @@ # under the License. # # -NO_ALTERNATIVE_EXC = These policy alternatives can be satisfied: {0} +NO_ALTERNATIVE_EXC = These policy alternatives can not be satisfied: {0} NOT_ASSERTED_EXC = Assertion of type {0} could not be asserted. \ No newline at end of file Modified: cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java (original) +++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/builder/primitive/PrimitiveAssertion.java Fri Aug 22 10:43:16 2008 @@ -68,6 +68,9 @@ } } + public String toString() { + return name.toString(); + } public boolean equal(PolicyComponent policyComponent) { if (policyComponent.getType() != Constants.TYPE_ASSERTION) { return false; Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java (original) +++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java Fri Aug 22 10:43:16 2008 @@ -49,11 +49,6 @@ } - protected boolean isRequestor(org.apache.cxf.message.Message message) { - return Boolean.TRUE.equals(message.containsKey( - org.apache.cxf.message.Message.REQUESTOR_ROLE)); - } - public Set getRoles() { return Collections.emptySet(); } Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java (original) +++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java Fri Aug 22 10:43:16 2008 @@ -210,10 +210,6 @@ return endedHeader; } - protected boolean isRequestor(Message message) { - return Boolean.TRUE.equals(message.containsKey(Message.REQUESTOR_ROLE)); - } - protected DataWriter getDataWriter(Message message) { Service service = ServiceModelUtil.getService(message.getExchange()); DataWriter dataWriter = service.getDataBinding().createWriter(XMLStreamWriter.class); Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java (original) +++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java Fri Aug 22 10:43:16 2008 @@ -46,11 +46,6 @@ || message == ex.getOutFaultMessage(); } - - protected boolean isRequestor(T message) { - return Boolean.TRUE.equals(message.containsKey(Message.REQUESTOR_ROLE)); - } - protected HandlerChainInvoker getInvoker(T message) { Exchange ex = message.getExchange(); HandlerChainInvoker invoker = Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java (original) +++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java Fri Aug 22 10:43:16 2008 @@ -20,15 +20,11 @@ package org.apache.cxf.ws.policy; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; import javax.annotation.PostConstruct; import javax.xml.namespace.QName; import org.apache.cxf.Bus; -import org.apache.cxf.endpoint.Server; -import org.apache.cxf.endpoint.ServerLifeCycleListener; -import org.apache.cxf.endpoint.ServerLifeCycleManager; import org.apache.cxf.extension.BusExtension; import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.service.model.BindingFaultInfo; @@ -49,8 +45,17 @@ /** * */ -public class PolicyEngineImpl implements PolicyEngine, BusExtension, ServerLifeCycleListener { - +public class PolicyEngineImpl implements PolicyEngine, BusExtension { + private static final String POLICY_INFO_REQUEST_SERVER = "policy-engine-info-serve-request"; + private static final String POLICY_INFO_FAULT_SERVER = "policy-engine-info-serve-fault"; + private static final String POLICY_INFO_RESPONSE_SERVER = "policy-engine-info-serve-response"; + private static final String POLICY_INFO_ENDPOINT_SERVER = "policy-engine-info-serve-rendpoint"; + + private static final String POLICY_INFO_REQUEST_CLIENT = "policy-engine-info-client-request"; + private static final String POLICY_INFO_FAULT_CLIENT = "policy-engine-info-client-fault"; + private static final String POLICY_INFO_RESPONSE_CLIENT = "policy-engine-info-client-response"; + private static final String POLICY_INFO_ENDPOINT_CLIENT = "policy-engine-info-client-endpoint"; + private Bus bus; private PolicyRegistry registry; private Collection policyProviders; @@ -59,14 +64,6 @@ private boolean addedBusInterceptors; private AlternativeSelector alternativeSelector; - private Map clientRequestInfo; - private Map clientResponseInfo; - private Map clientFaultInfo; - private Map serverRequestInfo; - private Map serverResponseInfo; - private Map serverFaultInfo; - private Map serverEndpointInfo; - private Map clientEndpointInfo; public PolicyEngineImpl() { init(); @@ -137,16 +134,15 @@ public EffectivePolicy getEffectiveClientRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, Conduit c) { - BindingOperation bo = new BindingOperation(ei, boi); - EffectivePolicy effectivePolicy = clientRequestInfo.get(bo); + EffectivePolicy effectivePolicy = (EffectivePolicy)boi.getProperty(POLICY_INFO_REQUEST_CLIENT); if (null == effectivePolicy) { EffectivePolicyImpl epi = createOutPolicyInfo(); Assertor assertor = null; if (c instanceof Assertor) { assertor = (Assertor)c; } - epi.initialise(ei, bo.getBindingOperation(), this, assertor, true); - clientRequestInfo.put(bo, epi); + epi.initialise(ei, boi, this, assertor, true); + boi.setProperty(POLICY_INFO_REQUEST_CLIENT, epi); effectivePolicy = epi; } return effectivePolicy; @@ -154,22 +150,21 @@ public void setEffectiveClientRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep) { - BindingOperation bo = new BindingOperation(ei, boi); - clientRequestInfo.put(bo, ep); + boi.setProperty(POLICY_INFO_REQUEST_CLIENT, ep); } - public EffectivePolicy getEffectiveServerResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, + public EffectivePolicy getEffectiveServerResponsePolicy(EndpointInfo ei, + BindingOperationInfo boi, Destination d) { - BindingOperation bo = new BindingOperation(ei, boi); - EffectivePolicy effectivePolicy = serverResponseInfo.get(bo); + EffectivePolicy effectivePolicy = (EffectivePolicy)boi.getProperty(POLICY_INFO_RESPONSE_SERVER); if (null == effectivePolicy) { EffectivePolicyImpl epi = createOutPolicyInfo(); Assertor assertor = null; if (d instanceof Assertor) { assertor = (Assertor)d; } - epi.initialise(ei, bo.getBindingOperation(), this, assertor, false); - serverResponseInfo.put(bo, epi); + epi.initialise(ei, boi, this, assertor, false); + boi.setProperty(POLICY_INFO_RESPONSE_SERVER, epi); effectivePolicy = epi; } return effectivePolicy; @@ -177,14 +172,12 @@ public void setEffectiveServerResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep) { - BindingOperation bo = new BindingOperation(ei, boi); - serverResponseInfo.put(bo, ep); + boi.setProperty(POLICY_INFO_RESPONSE_SERVER, ep); } public EffectivePolicy getEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, Destination d) { - BindingFault bf = new BindingFault(ei, bfi); - EffectivePolicy effectivePolicy = serverFaultInfo.get(bf); + EffectivePolicy effectivePolicy = (EffectivePolicy)bfi.getProperty(POLICY_INFO_FAULT_SERVER); if (null == effectivePolicy) { EffectivePolicyImpl epi = createOutPolicyInfo(); Assertor assertor = null; @@ -192,30 +185,33 @@ assertor = (Assertor)d; } epi.initialise(ei, bfi, this, assertor); - serverFaultInfo.put(bf, epi); + bfi.setProperty(POLICY_INFO_FAULT_SERVER, epi); effectivePolicy = epi; } return effectivePolicy; } public void setEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep) { - BindingFault bf = new BindingFault(ei, bfi); - serverFaultInfo.put(bf, ep); + bfi.setProperty(POLICY_INFO_FAULT_SERVER, ep); } public EndpointPolicy getClientEndpointPolicy(EndpointInfo ei, Conduit conduit) { Assertor assertor = conduit instanceof Assertor ? (Assertor)conduit : null; - return getEndpointPolicy(ei, clientEndpointInfo.get(ei), true, assertor); + return getEndpointPolicy(ei, true, assertor); } public EndpointPolicy getServerEndpointPolicy(EndpointInfo ei, Destination destination) { Assertor assertor = destination instanceof Assertor ? (Assertor)destination : null; - return getEndpointPolicy(ei, serverEndpointInfo.get(ei), false, assertor); + return getEndpointPolicy(ei, false, assertor); } private EndpointPolicy getEndpointPolicy( - EndpointInfo ei, EndpointPolicy ep, boolean isRequestor, Assertor assertor) { + EndpointInfo ei, + boolean isRequestor, + Assertor assertor) { + EndpointPolicy ep = (EndpointPolicy)ei.getProperty(isRequestor ? POLICY_INFO_ENDPOINT_CLIENT + : POLICY_INFO_ENDPOINT_SERVER); if (null != ep) { return ep; } @@ -223,20 +219,19 @@ } public void setClientEndpointPolicy(EndpointInfo ei, EndpointPolicy ep) { - clientEndpointInfo.put(ei, ep); + ei.setProperty(POLICY_INFO_ENDPOINT_CLIENT, ep); } public void setServerEndpointPolicy(EndpointInfo ei, EndpointPolicy ep) { - serverEndpointInfo.put(ei, ep); + ei.setProperty(POLICY_INFO_ENDPOINT_SERVER, ep); } public EffectivePolicy getEffectiveServerRequestPolicy(EndpointInfo ei, BindingOperationInfo boi) { - BindingOperation bo = new BindingOperation(ei, boi); - EffectivePolicy effectivePolicy = serverRequestInfo.get(bo); + EffectivePolicy effectivePolicy = (EffectivePolicy)boi.getProperty(POLICY_INFO_REQUEST_SERVER); if (null == effectivePolicy) { EffectivePolicyImpl epi = createOutPolicyInfo(); - epi.initialisePolicy(ei, bo.getBindingOperation(), this, false); - serverRequestInfo.put(bo, epi); + epi.initialisePolicy(ei, boi, this, false); + boi.setProperty(POLICY_INFO_REQUEST_SERVER, epi); effectivePolicy = epi; } return effectivePolicy; @@ -244,17 +239,15 @@ public void setEffectiveServerRequestPolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep) { - BindingOperation bo = new BindingOperation(ei, boi); - serverRequestInfo.put(bo, ep); + boi.setProperty(POLICY_INFO_REQUEST_SERVER, ep); } public EffectivePolicy getEffectiveClientResponsePolicy(EndpointInfo ei, BindingOperationInfo boi) { - BindingOperation bo = new BindingOperation(ei, boi); - EffectivePolicy effectivePolicy = clientResponseInfo.get(bo); + EffectivePolicy effectivePolicy = (EffectivePolicy)boi.getProperty(POLICY_INFO_RESPONSE_CLIENT); if (null == effectivePolicy) { EffectivePolicyImpl epi = createOutPolicyInfo(); - epi.initialisePolicy(ei, bo.getBindingOperation(), this, true); - clientResponseInfo.put(bo, epi); + epi.initialisePolicy(ei, boi, this, true); + boi.setProperty(POLICY_INFO_RESPONSE_CLIENT, epi); effectivePolicy = epi; } return effectivePolicy; @@ -262,55 +255,29 @@ public void setEffectiveClientResponsePolicy(EndpointInfo ei, BindingOperationInfo boi, EffectivePolicy ep) { - BindingOperation bo = new BindingOperation(ei, boi); - clientResponseInfo.put(bo, ep); + boi.setProperty(POLICY_INFO_RESPONSE_CLIENT, ep); } public EffectivePolicy getEffectiveClientFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi) { - BindingFault bf = new BindingFault(ei, bfi); - EffectivePolicy effectivePolicy = clientFaultInfo.get(bf); + EffectivePolicy effectivePolicy = (EffectivePolicy)bfi.getProperty(POLICY_INFO_FAULT_CLIENT); if (null == effectivePolicy) { EffectivePolicyImpl epi = createOutPolicyInfo(); epi.initialisePolicy(ei, bfi, this); - clientFaultInfo.put(bf, epi); + bfi.setProperty(POLICY_INFO_FAULT_CLIENT, epi); effectivePolicy = epi; } return effectivePolicy; } public void setEffectiveClientFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep) { - BindingFault bf = new BindingFault(ei, bfi); - clientFaultInfo.put(bf, ep); + bfi.setProperty(POLICY_INFO_FAULT_CLIENT, ep); } // implementation protected final void init() { - registry = new PolicyRegistryImpl(); - - clientRequestInfo - = new ConcurrentHashMap(); - - clientResponseInfo - = new ConcurrentHashMap(); - - clientFaultInfo - = new ConcurrentHashMap(); - - serverEndpointInfo - = new EndpointPolicyMap(); - clientEndpointInfo - = new EndpointPolicyMap(); - - serverRequestInfo - = new ConcurrentHashMap(); - serverResponseInfo - = new ConcurrentHashMap(); - - serverFaultInfo - = new ConcurrentHashMap(); } @@ -364,14 +331,6 @@ addedBusInterceptors = true; } - @PostConstruct - public void registerListener() { - ServerLifeCycleManager slm = bus.getExtension(ServerLifeCycleManager.class); - if (slm != null) { - slm.registerListener(this); - } - } - Policy getAggregatedServicePolicy(ServiceInfo si) { Policy aggregated = null; for (PolicyProvider pp : getPolicyProviders()) { @@ -500,13 +459,12 @@ return vocabulary; } - EndpointPolicyImpl createEndpointPolicyInfo(EndpointInfo ei, boolean isRequestor, Assertor assertor) { + EndpointPolicyImpl createEndpointPolicyInfo(EndpointInfo ei, + boolean isRequestor, + Assertor assertor) { EndpointPolicyImpl epi = new EndpointPolicyImpl(ei, this, isRequestor, assertor); epi.initialize(); - - Map map = isRequestor ? clientEndpointInfo : serverEndpointInfo; - map.put(ei, epi); - + ei.setProperty(isRequestor ? POLICY_INFO_ENDPOINT_CLIENT : POLICY_INFO_ENDPOINT_SERVER, epi); return epi; } @@ -534,160 +492,11 @@ return true; } - public void startServer(Server server) { - // empty - } - - /** - * Callback recieved while the server side endpoint is being undeployed. - * - * @param server - */ - public void stopServer(Server server) { - EndpointInfo ei = server.getEndpoint().getEndpointInfo(); - serverEndpointInfo.remove(ei); - clientEndpointInfo.remove(ei); - - /** - * While cleaning up the entries of requestInfo's, responseInfo's and faultInfo's map, we create - * a temperory Set with all the keys. Later we iterate over the keys of this temp set, - * and if it's same as that of the endpoint being undeployed, we remove the corresponding - * entries from the client and server maps. - */ - - cleanupBindingOperations(ei, new HashSet(clientRequestInfo.keySet()), - clientRequestInfo); - cleanupBindingOperations(ei, new HashSet(clientResponseInfo.keySet()), - clientResponseInfo); - - cleanupBindingOperations(ei, new HashSet(serverRequestInfo.keySet()), - serverRequestInfo); - cleanupBindingOperations(ei, new HashSet(serverResponseInfo.keySet()), - serverResponseInfo); - - cleanupBindingFaults(ei, new HashSet(clientFaultInfo.keySet()), - clientFaultInfo); - cleanupBindingFaults(ei, new HashSet(serverFaultInfo.keySet()), - serverFaultInfo); - } - - private void cleanupBindingOperations(EndpointInfo ei, - Set bindingOperations, - Map originalMap) { - - Iterator bindingOpsItr = bindingOperations.iterator(); - while (bindingOpsItr.hasNext()) { - BindingOperation bindingOperation = bindingOpsItr.next(); - if (ei.isSameAs(bindingOperation.getEndpoint())) { - originalMap.remove(bindingOperation); - } - } - } - - private void cleanupBindingFaults(EndpointInfo ei, Set bindingFaults, - Map originalMap) { - Iterator bindingFaultsItr = bindingFaults.iterator(); - while (bindingFaultsItr.hasNext()) { - BindingFault bindingFault = bindingFaultsItr.next(); - if (ei.isSameAs(bindingFault.getEndpoint())) { - originalMap.remove(bindingFault); - } - } - } - /** - * Class used as key in the client request policy and server response policy maps. - */ - class BindingOperation { - private EndpointInfo ei; - private BindingOperationInfo boi; - - BindingOperation(EndpointInfo e, BindingOperationInfo b) { - ei = e; - boi = b.isUnwrapped() ? b.getWrappedOperation() : b; - } - - EndpointInfo getEndpoint() { - return ei; - } - - BindingOperationInfo getBindingOperation() { - return boi; - } - - @Override - public int hashCode() { - return boi.hashCode(); - } - - @Override - public boolean equals(Object obj) { - BindingOperation other = (BindingOperation)obj; - return boi.equals(other.boi) && ei.equals(other.ei); - } - - @Override - public String toString() { - return ei.getName().toString() + "." + boi.getName().toString(); - } - - - } - - /** - * Class used as key in the server fault policy map. - */ - class BindingFault { - private EndpointInfo ei; - private BindingFaultInfo bfi; - - BindingFault(EndpointInfo e, BindingFaultInfo b) { - ei = e; - bfi = b; - } - - EndpointInfo getEndpoint() { - return ei; - } - - BindingFaultInfo getBindingFault() { - return bfi; - } - - @Override - public int hashCode() { - return bfi.hashCode(); - } - - @Override - public boolean equals(Object obj) { - BindingFault other = (BindingFault)obj; - return bfi.equals(other.bfi) && ei.equals(other.ei); - } - - @Override - public String toString() { - return ei.getName().toString() + "." + bfi.getFaultInfo().toString(); - } - } // for test - EffectivePolicyImpl createOutPolicyInfo() { return new EffectivePolicyImpl(); } - private class EndpointPolicyMap extends ConcurrentHashMap { - public EndpointPolicy remove(Object key) { - EndpointInfo toRemove = (EndpointInfo) key; - EndpointPolicy pol = null; - for (EndpointInfo info : keySet()) { - if (info.isSameAs(toRemove)) { - pol = super.remove(info); - } - } - return pol; - } - } - } Modified: cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java (original) +++ cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java Fri Aug 22 10:43:16 2008 @@ -66,8 +66,22 @@ control = EasyMock.createNiceControl(); } + private EndpointInfo createMockEndpointInfo() throws Exception { + EndpointInfo ei = new EndpointInfo(); + ei.setName(new QName("mock", "mock")); + return ei; + } + private BindingOperationInfo createMockBindingOperationInfo() throws Exception { + BindingOperationInfo boi = new BindingOperationInfo() { + public boolean isUnwrapped() { + return false; + } + }; + return boi; + } + @Test - public void testAccessors() { + public void testAccessors() throws Exception { engine = new PolicyEngineImpl(); assertNotNull(engine.getRegistry()); assertNull(engine.getBus()); @@ -94,12 +108,12 @@ } @Test - public void testGetEffectiveClientRequestPolicy() throws NoSuchMethodException { + public void testGetEffectiveClientRequestPolicy() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); AssertingConduit conduit = control.createMock(AssertingConduit.class); EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class); EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi); @@ -112,11 +126,10 @@ } @Test - public void testSetEffectiveClientRequestPolicy() { + public void testSetEffectiveClientRequestPolicy() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); - EasyMock.expect(boi.isUnwrapped()).andReturn(false).times(2); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); EffectivePolicy effectivePolicy = control.createMock(EffectivePolicy.class); control.replay(); engine.setEffectiveClientRequestPolicy(ei, boi, effectivePolicy); @@ -126,12 +139,12 @@ } @Test - public void testGetEffectiveServerResponsePolicy() throws NoSuchMethodException { + public void testGetEffectiveServerResponsePolicy() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); AssertingDestination destination = control.createMock(AssertingDestination.class); EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class); EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi); @@ -144,11 +157,10 @@ } @Test - public void testSetEffectiveServerResponsePolicy() { + public void testSetEffectiveServerResponsePolicy() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); - EasyMock.expect(boi.isUnwrapped()).andReturn(false).times(2); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); EffectivePolicy effectivePolicy = control.createMock(EffectivePolicy.class); control.replay(); engine.setEffectiveServerResponsePolicy(ei, boi, effectivePolicy); @@ -158,12 +170,12 @@ } @Test - public void testGetEffectiveServerFaultPolicy() throws NoSuchMethodException { + public void testGetEffectiveServerFaultPolicy() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingFaultInfo bfi = control.createMock(BindingFaultInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingFaultInfo bfi = new BindingFaultInfo(null, null); AssertingDestination destination = control.createMock(AssertingDestination.class); EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class); EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi); @@ -176,22 +188,22 @@ } @Test - public void testSetEffectiveServerFaultPolicy() { + public void testSetEffectiveServerFaultPolicy() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingFaultInfo bfi = control.createMock(BindingFaultInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingFaultInfo bfi = new BindingFaultInfo(null, null); EffectivePolicy epi = control.createMock(EffectivePolicy.class); engine.setEffectiveServerFaultPolicy(ei, bfi, epi); assertSame(epi, engine.getEffectiveServerFaultPolicy(ei, bfi, (Destination)null)); } @Test - public void testGetEffectiveServerRequestPolicyInfo() throws NoSuchMethodException { + public void testGetEffectiveServerRequestPolicyInfo() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class); EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi); epi.initialisePolicy(ei, boi, engine, false); @@ -203,11 +215,10 @@ } @Test - public void testSetEffectiveServerRequestPolicy() { + public void testSetEffectiveServerRequestPolicy() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); - EasyMock.expect(boi.isUnwrapped()).andReturn(false).times(2); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); EffectivePolicy effectivePolicy = control.createMock(EffectivePolicy.class); control.replay(); engine.setEffectiveServerRequestPolicy(ei, boi, effectivePolicy); @@ -216,12 +227,12 @@ } @Test - public void testGetEffectiveClientResponsePolicy() throws NoSuchMethodException { + public void testGetEffectiveClientResponsePolicy() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class); EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi); epi.initialisePolicy(ei, boi, engine, true); @@ -233,11 +244,10 @@ } @Test - public void testSetEffectiveClientResponsePolicy() { + public void testSetEffectiveClientResponsePolicy() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); - EasyMock.expect(boi.isUnwrapped()).andReturn(false).times(2); + EndpointInfo ei = createMockEndpointInfo(); + BindingOperationInfo boi = createMockBindingOperationInfo(); EffectivePolicy epi = control.createMock(EffectivePolicy.class); control.replay(); engine.setEffectiveClientResponsePolicy(ei, boi, epi); @@ -246,12 +256,12 @@ } @Test - public void testGetEffectiveClientFaultPolicy() throws NoSuchMethodException { + public void testGetEffectiveClientFaultPolicy() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingFaultInfo bfi = control.createMock(BindingFaultInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingFaultInfo bfi = new BindingFaultInfo(null, null); EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class); EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi); epi.initialisePolicy(ei, bfi, engine); @@ -263,22 +273,22 @@ } @Test - public void testSetEffectiveClientFaultPolicy() { + public void testSetEffectiveClientFaultPolicy() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingFaultInfo bfi = control.createMock(BindingFaultInfo.class); + EndpointInfo ei = createMockEndpointInfo(); + BindingFaultInfo bfi = new BindingFaultInfo(null, null); EffectivePolicy epi = control.createMock(EffectivePolicy.class); engine.setEffectiveClientFaultPolicy(ei, bfi, epi); assertSame(epi, engine.getEffectiveClientFaultPolicy(ei, bfi)); } @Test - public void testGetEndpointPolicyClientSide() throws NoSuchMethodException { + public void testGetEndpointPolicyClientSide() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createEndpointPolicyInfo", new Class[] {EndpointInfo.class, boolean.class, Assertor.class}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); + EndpointInfo ei = createMockEndpointInfo(); AssertingConduit conduit = control.createMock(AssertingConduit.class); EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class); EasyMock.expect(engine.createEndpointPolicyInfo(ei, true, conduit)).andReturn(epi); @@ -288,12 +298,12 @@ } @Test - public void testGetEndpointPolicyServerSide() throws NoSuchMethodException { + public void testGetEndpointPolicyServerSide() throws Exception { Method m = PolicyEngineImpl.class.getDeclaredMethod("createEndpointPolicyInfo", new Class[] {EndpointInfo.class, boolean.class, Assertor.class}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); + EndpointInfo ei = createMockEndpointInfo(); AssertingDestination destination = control.createMock(AssertingDestination.class); EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class); EasyMock.expect(engine.createEndpointPolicyInfo(ei, false, destination)).andReturn(epi); @@ -303,12 +313,12 @@ } @Test - public void testCreateEndpointPolicyInfo() throws NoSuchMethodException { + public void testCreateEndpointPolicyInfo() throws Exception { Method m1 = PolicyEngineImpl.class.getDeclaredMethod("createEndpointPolicyInfo", new Class[] {EndpointInfo.class, boolean.class, Assertor.class}); engine = control.createMock(PolicyEngineImpl.class, new Method[] {m1}); engine.init(); - EndpointInfo ei = control.createMock(EndpointInfo.class); + EndpointInfo ei = createMockEndpointInfo(); Assertor assertor = control.createMock(Assertor.class); EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class); EasyMock.expect(engine.createEndpointPolicyInfo(ei, false, assertor)).andReturn(epi); @@ -318,12 +328,11 @@ } @Test - public void testEndpointPolicyWithEqualPolicies() { + public void testEndpointPolicyWithEqualPolicies() throws Exception { engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); + EndpointInfo ei = createMockEndpointInfo(); ServiceInfo si = control.createMock(ServiceInfo.class); - ei.getService(); - EasyMock.expectLastCall().andReturn(si).times(2); + ei.setService(si); si.getExtensor(Policy.class); EasyMock.expectLastCall().andReturn(null).times(2); EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class); @@ -335,8 +344,7 @@ assertSame(epi, engine.getServerEndpointPolicy(ei, (Destination)null)); control.reset(); - ei.getService(); - EasyMock.expectLastCall().andReturn(si).times(2); + ei.setService(si); Policy p = new Policy(); si.getExtensor(Policy.class); EasyMock.expectLastCall().andReturn(p).times(2); @@ -444,11 +452,11 @@ } @Test - public void testGetAggregatedEndpointPolicy() { + public void testGetAggregatedEndpointPolicy() throws Exception { engine = new PolicyEngineImpl(); List providers = new ArrayList(); engine.setPolicyProviders(providers); - EndpointInfo ei = control.createMock(EndpointInfo.class); + EndpointInfo ei = createMockEndpointInfo(); control.replay(); Policy p = engine.getAggregatedEndpointPolicy(ei); @@ -480,11 +488,11 @@ } @Test - public void testGetAggregatedOperationPolicy() { + public void testGetAggregatedOperationPolicy() throws Exception { engine = new PolicyEngineImpl(); List providers = new ArrayList(); engine.setPolicyProviders(providers); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); + BindingOperationInfo boi = createMockBindingOperationInfo(); control.replay(); Policy p = engine.getAggregatedOperationPolicy(boi); @@ -660,32 +668,7 @@ assertEquals(1, assertions.size()); assertSame(a, assertions.iterator().next()); } - - @Test - public void testKeys() { - engine = new PolicyEngineImpl(); - EndpointInfo ei = control.createMock(EndpointInfo.class); - BindingOperationInfo boi = control.createMock(BindingOperationInfo.class); - BindingFaultInfo bfi = control.createMock(BindingFaultInfo.class); - control.replay(); - - PolicyEngineImpl.BindingOperation bo = engine.new BindingOperation(ei, boi); - assertNotNull(bo); - PolicyEngineImpl.BindingOperation bo2 = engine.new BindingOperation(ei, boi); - assertEquals(bo, bo2); - assertEquals(bo.hashCode(), bo2.hashCode()); - - PolicyEngineImpl.BindingFault bf = engine.new BindingFault(ei, bfi); - assertNotNull(bf); - PolicyEngineImpl.BindingFault bf2 = engine.new BindingFault(ei, bfi); - assertEquals(bf, bf2); - assertEquals(bf.hashCode(), bf2.hashCode()); - - control.verify(); - } - - - + private Set getInterceptorIds(List interceptors) { Set ids = new HashSet(); for (Interceptor i : interceptors) { Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/WSSecurityPolicyLoader.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/WSSecurityPolicyLoader.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/WSSecurityPolicyLoader.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/WSSecurityPolicyLoader.java Fri Aug 22 10:43:16 2008 @@ -54,6 +54,7 @@ import org.apache.cxf.ws.security.policy.builders.WSS10Builder; import org.apache.cxf.ws.security.policy.builders.WSS11Builder; import org.apache.cxf.ws.security.policy.builders.X509TokenBuilder; +import org.apache.cxf.ws.security.policy.interceptors.HttpsTokenInterceptorProvider; import org.apache.cxf.ws.security.policy.interceptors.WSSecurityPolicyInterceptorProvider; @@ -113,6 +114,9 @@ return; } reg.register(new WSSecurityPolicyInterceptorProvider()); + + reg.register(new HttpsTokenInterceptorProvider(SP11Constants.HTTPS_TOKEN)); + reg.register(new HttpsTokenInterceptorProvider(SP12Constants.HTTPS_TOKEN)); } } Added: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java?rev=688133&view=auto ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java (added) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java Fri Aug 22 10:43:16 2008 @@ -0,0 +1,188 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cxf.ws.security.policy.interceptors; + +import java.net.HttpURLConnection; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.net.ssl.HttpsURLConnection; +import javax.xml.namespace.QName; + +import org.apache.cxf.helpers.CastUtils; +import org.apache.cxf.interceptor.Fault; +import org.apache.cxf.message.Message; +import org.apache.cxf.phase.AbstractPhaseInterceptor; +import org.apache.cxf.phase.Phase; +import org.apache.cxf.security.transport.TLSSessionInfo; +import org.apache.cxf.ws.policy.AbstractPolicyInterceptorProvider; +import org.apache.cxf.ws.policy.AssertionInfo; +import org.apache.cxf.ws.policy.AssertionInfoMap; +import org.apache.cxf.ws.security.policy.model.HttpsToken; + +/** + * + */ +public class HttpsTokenInterceptorProvider extends AbstractPolicyInterceptorProvider { + + public HttpsTokenInterceptorProvider(QName name) { + super(Collections.singleton(name)); + this.getOutInterceptors().add(new HttpsTokenOutInterceptor(name)); + this.getOutFaultInterceptors().add(new HttpsTokenOutInterceptor(name)); + this.getInInterceptors().add(new HttpsTokenInInterceptor(name)); + this.getInFaultInterceptors().add(new HttpsTokenInInterceptor(name)); + } + + private static Map> getSetProtocolHeaders(Message message) { + Map> headers = + CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS)); + if (null == headers) { + headers = new HashMap>(); + message.put(Message.PROTOCOL_HEADERS, headers); + } + return headers; + } + + static class HttpsTokenOutInterceptor extends AbstractPhaseInterceptor { + QName name; + public HttpsTokenOutInterceptor(QName n) { + super(Phase.PREPARE_SEND); + name = n; + } + public void handleMessage(Message message) throws Fault { + AssertionInfoMap aim = message.get(AssertionInfoMap.class); + // extract Assertion information + if (aim != null) { + Collection ais = aim.get(name); + if (ais == null) { + return; + } + if (isRequestor(message)) { + assertHttps(ais, message); + } else { + //server side should be checked on the way in + for (AssertionInfo ai : ais) { + ai.setAsserted(true); + } + } + } + } + private void assertHttps(Collection ais, Message message) { + for (AssertionInfo ai : ais) { + HttpsToken token = (HttpsToken)ai.getAssertion(); + + boolean asserted = true; + HttpURLConnection connection = + (HttpURLConnection) message.get("http.connection"); + + Map> headers = getSetProtocolHeaders(message); + if (connection instanceof HttpsURLConnection) { + HttpsURLConnection https = (HttpsURLConnection)connection; + if (token.isRequireClientCertificate() + && https.getLocalCertificates().length == 0) { + asserted = false; + } + if (token.isHttpBasicAuthentication()) { + List auth = headers.get("Authorization"); + if (auth == null || auth.size() == 0 + || !auth.get(0).startsWith("Basic")) { + asserted = false; + } + } + if (token.isHttpDigestAuthentication()) { + List auth = headers.get("Authorization"); + if (auth == null || auth.size() == 0 + || !auth.get(0).startsWith("Digest")) { + asserted = false; + } + } + } else { + asserted = false; + } + ai.setAsserted(asserted); + } + } + + } + + static class HttpsTokenInInterceptor extends AbstractPhaseInterceptor { + QName name; + public HttpsTokenInInterceptor(QName n) { + super(Phase.PRE_STREAM); + name = n; + } + + public void handleMessage(Message message) throws Fault { + AssertionInfoMap aim = message.get(AssertionInfoMap.class); + // extract Assertion information + if (aim != null) { + Collection ais = aim.get(name); + if (ais == null) { + return; + } + if (!isRequestor(message)) { + assertHttps(ais, message); + } else { + //client side should be checked on the way out + for (AssertionInfo ai : ais) { + ai.setAsserted(true); + } + } + } + } + private void assertHttps(Collection ais, Message message) { + for (AssertionInfo ai : ais) { + boolean asserted = true; + HttpsToken token = (HttpsToken)ai.getAssertion(); + + Map> headers = getSetProtocolHeaders(message); + if (token.isHttpBasicAuthentication()) { + List auth = headers.get("Authorization"); + if (auth == null || auth.size() == 0 + || !auth.get(0).startsWith("Basic")) { + asserted = false; + } + } + if (token.isHttpDigestAuthentication()) { + List auth = headers.get("Authorization"); + if (auth == null || auth.size() == 0 + || !auth.get(0).startsWith("Digest")) { + asserted = false; + } + } + + TLSSessionInfo tlsInfo = message.get(TLSSessionInfo.class); + if (tlsInfo != null) { + if (token.isRequireClientCertificate() + && tlsInfo.getPeerCertificates().length == 0) { + asserted = false; + } + } else { + asserted = false; + } + + ai.setAsserted(asserted); + } + } + } +} Propchange: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/HttpsTokenInterceptorProvider.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/WSSecurityPolicyInterceptorProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/WSSecurityPolicyInterceptorProvider.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/WSSecurityPolicyInterceptorProvider.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/WSSecurityPolicyInterceptorProvider.java Fri Aug 22 10:43:16 2008 @@ -36,7 +36,6 @@ ASSERTION_TYPES = new ArrayList(); ASSERTION_TYPES.add(SP11Constants.TRANSPORT_BINDING); ASSERTION_TYPES.add(SP11Constants.TRANSPORT_TOKEN); - ASSERTION_TYPES.add(SP11Constants.HTTPS_TOKEN); ASSERTION_TYPES.add(SP11Constants.LAYOUT); ASSERTION_TYPES.add(SP11Constants.INCLUDE_TIMESTAMP); ASSERTION_TYPES.add(SP11Constants.ALGORITHM_SUITE); Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AbstractSecurityAssertion.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AbstractSecurityAssertion.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AbstractSecurityAssertion.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AbstractSecurityAssertion.java Fri Aug 22 10:43:16 2008 @@ -18,6 +18,9 @@ */ package org.apache.cxf.ws.security.policy.model; +import java.util.Collection; + +import org.apache.cxf.ws.policy.AssertionInfo; import org.apache.cxf.ws.policy.AssertionInfoMap; import org.apache.cxf.ws.policy.PolicyAssertion; import org.apache.cxf.ws.security.policy.SPConstants; @@ -48,7 +51,7 @@ } public boolean equal(PolicyComponent policyComponent) { - throw new UnsupportedOperationException(); + return policyComponent == this; } public void setNormalized(boolean normalized) { @@ -60,18 +63,21 @@ } public PolicyComponent normalize() { - - /* - * TODO: Handling the isOptional:TRUE case - */ return this; } - public boolean isAsserted(AssertionInfoMap aim) { - return false; - } public Policy getPolicy() { return null; } + + public boolean isAsserted(AssertionInfoMap aim) { + Collection ail = aim.getAssertionInfo(getName()); + for (AssertionInfo ai : ail) { + if (ai.isAsserted() && ai.getAssertion().equal(this)) { + return true; + } + } + return false; + } } Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AlgorithmSuite.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AlgorithmSuite.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AlgorithmSuite.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AlgorithmSuite.java Fri Aug 22 10:43:16 2008 @@ -30,7 +30,7 @@ import org.apache.cxf.ws.security.policy.WSSPolicyException; import org.apache.neethi.PolicyComponent; -public class AlgorithmSuite extends AbstractConfigurableSecurityAssertion { +public class AlgorithmSuite extends AbstractSecurityAssertion { private static final Logger LOG = LogUtils.getL7dLogger(AlgorithmSuite.class); private String algoSuiteString; Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AsymmetricBinding.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AsymmetricBinding.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AsymmetricBinding.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/AsymmetricBinding.java Fri Aug 22 10:43:16 2008 @@ -18,8 +18,6 @@ */ package org.apache.cxf.ws.security.policy.model; -import java.util.Iterator; -import java.util.List; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; @@ -80,34 +78,29 @@ } AlgorithmSuite algorithmSuite = getAlgorithmSuite(); - List configs = algorithmSuite.getConfigurations(); Policy policy = new Policy(); ExactlyOne exactlyOne = new ExactlyOne(); policy.addPolicyComponent(exactlyOne); - All wrapper; - AsymmetricBinding asymmetricBinding; - for (Iterator iterator = configs.iterator(); iterator.hasNext();) { - wrapper = new All(); - asymmetricBinding = new AsymmetricBinding(constants); - - asymmetricBinding.setAlgorithmSuite((AlgorithmSuite)iterator.next()); - asymmetricBinding.setEntireHeadersAndBodySignatures(isEntireHeadersAndBodySignatures()); - asymmetricBinding.setIncludeTimestamp(isIncludeTimestamp()); - asymmetricBinding.setInitiatorToken(getInitiatorToken()); - asymmetricBinding.setLayout(getLayout()); - asymmetricBinding.setProtectionOrder(getProtectionOrder()); - asymmetricBinding.setRecipientToken(getRecipientToken()); - asymmetricBinding.setSignatureProtection(isSignatureProtection()); - asymmetricBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens()); - asymmetricBinding.setTokenProtection(isTokenProtection()); + All wrapper = new All(); + AsymmetricBinding asymmetricBinding = new AsymmetricBinding(constants); - asymmetricBinding.setNormalized(true); - wrapper.addPolicyComponent(wrapper); - } + asymmetricBinding.setAlgorithmSuite(algorithmSuite); + asymmetricBinding.setEntireHeadersAndBodySignatures(isEntireHeadersAndBodySignatures()); + asymmetricBinding.setIncludeTimestamp(isIncludeTimestamp()); + asymmetricBinding.setInitiatorToken(getInitiatorToken()); + asymmetricBinding.setLayout(getLayout()); + asymmetricBinding.setProtectionOrder(getProtectionOrder()); + asymmetricBinding.setRecipientToken(getRecipientToken()); + asymmetricBinding.setSignatureProtection(isSignatureProtection()); + asymmetricBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens()); + asymmetricBinding.setTokenProtection(isTokenProtection()); + + asymmetricBinding.setNormalized(true); + wrapper.addPolicyComponent(wrapper); return policy; Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/HttpsToken.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/HttpsToken.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/HttpsToken.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/HttpsToken.java Fri Aug 22 10:43:16 2008 @@ -23,7 +23,6 @@ import javax.xml.stream.XMLStreamWriter; import org.apache.cxf.ws.security.policy.SPConstants; -import org.apache.neethi.PolicyComponent; /** * @author Ruchith Fernando (ruchith.fernando@gmail.com) @@ -78,10 +77,6 @@ return constants.getHttpsToken(); } - public PolicyComponent normalize() { - throw new UnsupportedOperationException(); - } - public void serialize(XMLStreamWriter writer) throws XMLStreamException { String localname = getName().getLocalPart(); Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/SymmetricBinding.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/SymmetricBinding.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/SymmetricBinding.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/SymmetricBinding.java Fri Aug 22 10:43:16 2008 @@ -18,9 +18,6 @@ */ package org.apache.cxf.ws.security.policy.model; -import java.util.Iterator; -import java.util.List; - import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; @@ -108,37 +105,30 @@ } AlgorithmSuite algorithmSuite = getAlgorithmSuite(); - List configurations = algorithmSuite.getConfigurations(); Policy policy = new Policy(); ExactlyOne exactlyOne = new ExactlyOne(); - All wrapper; - SymmetricBinding symmetricBinding; + All wrapper = new All(); + SymmetricBinding symmetricBinding = new SymmetricBinding(constants); - for (Iterator iterator = configurations.iterator(); iterator.hasNext();) { - wrapper = new All(); - symmetricBinding = new SymmetricBinding(constants); - - algorithmSuite = (AlgorithmSuite)iterator.next(); - symmetricBinding.setAlgorithmSuite(algorithmSuite); - - symmetricBinding.setEncryptionToken(getEncryptionToken()); - symmetricBinding.setEntireHeadersAndBodySignatures(isEntireHeadersAndBodySignatures()); - symmetricBinding.setIncludeTimestamp(isIncludeTimestamp()); - symmetricBinding.setLayout(getLayout()); - symmetricBinding.setProtectionOrder(getProtectionOrder()); - symmetricBinding.setProtectionToken(getProtectionToken()); - symmetricBinding.setSignatureProtection(isSignatureProtection()); - symmetricBinding.setSignatureToken(getSignatureToken()); - symmetricBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens()); - symmetricBinding.setSignedSupportingToken(getSignedSupportingToken()); - symmetricBinding.setTokenProtection(isTokenProtection()); - - symmetricBinding.setNormalized(true); - wrapper.addPolicyComponent(symmetricBinding); - exactlyOne.addPolicyComponent(wrapper); - } + symmetricBinding.setAlgorithmSuite(algorithmSuite); + + symmetricBinding.setEncryptionToken(getEncryptionToken()); + symmetricBinding.setEntireHeadersAndBodySignatures(isEntireHeadersAndBodySignatures()); + symmetricBinding.setIncludeTimestamp(isIncludeTimestamp()); + symmetricBinding.setLayout(getLayout()); + symmetricBinding.setProtectionOrder(getProtectionOrder()); + symmetricBinding.setProtectionToken(getProtectionToken()); + symmetricBinding.setSignatureProtection(isSignatureProtection()); + symmetricBinding.setSignatureToken(getSignatureToken()); + symmetricBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens()); + symmetricBinding.setSignedSupportingToken(getSignedSupportingToken()); + symmetricBinding.setTokenProtection(isTokenProtection()); + + symmetricBinding.setNormalized(true); + wrapper.addPolicyComponent(symmetricBinding); + exactlyOne.addPolicyComponent(wrapper); policy.addPolicyComponent(exactlyOne); return policy; Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportBinding.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportBinding.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportBinding.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportBinding.java Fri Aug 22 10:43:16 2008 @@ -18,10 +18,6 @@ */ package org.apache.cxf.ws.security.policy.model; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; @@ -36,8 +32,6 @@ private TransportToken transportToken; - private List transportBindings; - public TransportBinding(SPConstants version) { super(version); } @@ -56,66 +50,10 @@ this.transportToken = transportToken; } - public List getConfigurations() { - return transportBindings; - } - - public TransportBinding getDefaultConfiguration() { - if (transportBindings != null) { - return (TransportBinding)transportBindings.get(0); - } - return null; - } - - public void addConfiguration(TransportBinding transportBinding) { - if (transportBindings == null) { - transportBindings = new ArrayList(); - } - transportBindings.add(transportBinding); - } - public QName getName() { return constants.getTransportBinding(); } - public PolicyComponent normalize() { - if (isNormalized()) { - return this; - } - - AlgorithmSuite algorithmSuite = getAlgorithmSuite(); - List configurations = algorithmSuite.getConfigurations(); - - if (configurations == null || configurations.size() == 1) { - setNormalized(true); - return this; - } - - Policy policy = new Policy(); - ExactlyOne exactlyOne = new ExactlyOne(); - - All wrapper; - TransportBinding transportBinding; - - for (Iterator iterator = configurations.iterator(); iterator.hasNext();) { - wrapper = new All(); - transportBinding = new TransportBinding(constants); - - algorithmSuite = (AlgorithmSuite)iterator.next(); - transportBinding.setAlgorithmSuite(algorithmSuite); - transportBinding.setIncludeTimestamp(isIncludeTimestamp()); - transportBinding.setLayout(getLayout()); - transportBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens()); - transportBinding.setSignedSupportingToken(getSignedSupportingToken()); - transportBinding.setTransportToken(getTransportToken()); - - wrapper.addPolicyComponent(transportBinding); - exactlyOne.addPolicyComponent(wrapper); - } - - policy.addPolicyComponent(exactlyOne); - return policy; - } public void serialize(XMLStreamWriter writer) throws XMLStreamException { String localName = getName().getLocalPart(); @@ -181,5 +119,13 @@ writer.writeEndElement(); } - + public PolicyComponent normalize() { + Policy p = new Policy(); + ExactlyOne ea = new ExactlyOne(); + p.addPolicyComponent(ea); + All all = new All(); + ea.addPolicyComponent(all); + all.addPolicyComponent(transportToken); + return p.normalize(true); + } } Modified: cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportToken.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportToken.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportToken.java (original) +++ cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/model/TransportToken.java Fri Aug 22 10:43:16 2008 @@ -45,13 +45,13 @@ } public boolean isOptional() { - throw new UnsupportedOperationException(); + return false; } public PolicyComponent normalize() { - throw new UnsupportedOperationException(); + return transportToken; } - + public short getType() { return org.apache.neethi.Constants.TYPE_ASSERTION; } Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomPolicyTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomPolicyTest.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomPolicyTest.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomPolicyTest.java Fri Aug 22 10:43:16 2008 @@ -76,7 +76,7 @@ Node res = invoke(address, "http://schemas.xmlsoap.org/soap/http", "nonmtom.xml"); - assertValid("//faultstring[text()='These policy alternatives can be satisfied: " + assertValid("//faultstring[text()='These policy alternatives can not be satisfied: " + "[{http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization}" + "OptimizedMimeSerialization]']", res); } Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/policy/HTTPServerPolicyTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/policy/HTTPServerPolicyTest.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/policy/HTTPServerPolicyTest.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/policy/HTTPServerPolicyTest.java Fri Aug 22 10:43:16 2008 @@ -119,7 +119,7 @@ } catch (WebServiceException wse) { SoapFault sf = (SoapFault)wse.getCause(); assertEquals("Server", sf.getFaultCode().getLocalPart()); - assertEquals("These policy alternatives can be satisfied: " + assertEquals("These policy alternatives can not be satisfied: " + "[{http://cxf.apache.org/transports/http/configuration}server]", sf.getMessage()); // assertEquals("INCOMPATIBLE_HTTPSERVERPOLICY_ASSERTIONS", ex.getCode()); Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java Fri Aug 22 10:43:16 2008 @@ -21,9 +21,8 @@ import java.math.BigInteger; -import javax.xml.ws.BindingProvider; +import javax.jws.WebService; import javax.xml.ws.Endpoint; -import javax.xml.ws.soap.SOAPFaultException; import org.apache.cxf.policytest.doubleit.DoubleItPortType; import org.apache.cxf.policytest.doubleit.DoubleItService; @@ -35,10 +34,16 @@ public class SecurityPolicyTest extends AbstractBusClientServerTestBase { - public static final String POLICY_ADDRESS = "http://localhost:9009/SecPolTest"; + public static final String POLICY_ADDRESS = "http://localhost:9010/SecPolTest"; + public static final String POLICY_HTTPS_ADDRESS = "https://localhost:9009/SecPolTest"; + @BeforeClass public static void init() throws Exception { - createStaticBus().getExtension(PolicyEngine.class).setEnabled(true); + + createStaticBus(SecurityPolicyTest.class.getResource("https_config.xml").toString()) + .getExtension(PolicyEngine.class).setEnabled(true); + Endpoint.publish(POLICY_HTTPS_ADDRESS, + new DoubleItImplHttps()); Endpoint.publish(POLICY_ADDRESS, new DoubleItImpl()); } @@ -46,16 +51,41 @@ @Test public void testPolicy() throws Exception { DoubleItService service = new DoubleItService(); - DoubleItPortType pt = service.getDoubleItPort(); - ((BindingProvider)pt).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, - POLICY_ADDRESS); + DoubleItPortType pt = service.getDoubleItPortHttp(); try { pt.doubleIt(BigInteger.valueOf(25)); - } catch (SOAPFaultException ex) { + fail("https policy should have triggered"); + } catch (Exception ex) { assertTrue(ex.getCause().getCause() instanceof PolicyException); - //expected - we don't support any of the policies yet } + + pt = service.getDoubleItPortHttps(); + pt.doubleIt(BigInteger.valueOf(25)); } + + @WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt", + portName = "DoubleItPortHttp", + serviceName = "DoubleItService", + endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType", + wsdlLocation = "classpath:/wsdl_systest/DoubleIt.wsdl") + public static class DoubleItImpl implements DoubleItPortType { + /** {@inheritDoc}*/ + public BigInteger doubleIt(BigInteger numberToDouble) { + return numberToDouble.multiply(new BigInteger("2")); + } + } + + @WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt", + portName = "DoubleItPortHttps", + serviceName = "DoubleItService", + endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType", + wsdlLocation = "classpath:/wsdl_systest/DoubleIt.wsdl") + public static class DoubleItImplHttps implements DoubleItPortType { + /** {@inheritDoc}*/ + public BigInteger doubleIt(BigInteger numberToDouble) { + return numberToDouble.multiply(new BigInteger("2")); + } + } } Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml?rev=688133&view=auto ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml (added) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml Fri Aug 22 10:43:16 2008 @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/security/https_config.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Modified: cxf/trunk/systests/src/test/resources/wsdl_systest/DoubleIt.wsdl URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/wsdl_systest/DoubleIt.wsdl?rev=688133&r1=688132&r2=688133&view=diff ============================================================================== --- cxf/trunk/systests/src/test/resources/wsdl_systest/DoubleIt.wsdl (original) +++ cxf/trunk/systests/src/test/resources/wsdl_systest/DoubleIt.wsdl Fri Aug 22 10:43:16 2008 @@ -69,9 +69,13 @@ - + + location="https://localhost:9009/SecPolTest"/> + + + @@ -99,7 +103,7 @@ - +