Author: coheigea
Date: Tue Aug 20 10:56:47 2013
New Revision: 1515771

URL: http://svn.apache.org/r1515771
Log:
Add support for encrypted passwords in WS-Security Crypto property files

Added:
    cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties
    cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties
Modified:
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
    
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
    
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
    
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
    
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
    
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
 Tue Aug 20 10:56:47 2013
@@ -312,6 +312,20 @@ public final class SecurityConstants {
     public static final String ASYMMETRIC_SIGNATURE_ALGORITHM = 
         "ws-security.asymmetric.signature.algorithm";
     
+    /**
+     * This holds a reference to a PasswordEncryptor instance, which is used 
to encrypt or 
+     * decrypt passwords in the Merlin Crypto implementation (or any custom 
Crypto implementations).
+     * 
+     * By default, WSS4J uses the StrongJasyptPasswordEncryptor, which must be 
instantiated with a 
+     * master password to use to decrypt keystore passwords in the Merlin 
Crypto properties file.
+     * This master password is obtained via the CallbackHandler defined via 
PW_CALLBACK_CLASS
+     * or PW_CALLBACK_REF.
+     * 
+     * The encrypted passwords must be stored in the format "ENC(encoded 
encrypted password)".
+     */
+    public static final String PASSWORD_ENCRYPTOR_INSTANCE = 
+        "ws-security.password.encryptor.instance";
+    
     //
     // Validator implementations for validating received security tokens
     //
@@ -495,7 +509,7 @@ public final class SecurityConstants {
             DISABLE_STS_CLIENT_WSMEX_CALL_USING_EPR_ADDRESS, STS_TOKEN_CRYPTO,
             STS_TOKEN_PROPERTIES, STS_TOKEN_USERNAME, STS_TOKEN_ACT_AS, 
STS_TOKEN_ON_BEHALF_OF,
             TOKEN, TOKEN_ID, SUBJECT_ROLE_CLASSIFIER, 
SUBJECT_ROLE_CLASSIFIER_TYPE, MUST_UNDERSTAND,
-            ASYMMETRIC_SIGNATURE_ALGORITHM
+            ASYMMETRIC_SIGNATURE_ALGORITHM, PASSWORD_ENCRYPTOR_INSTANCE
         }));
         ALL_PROPERTIES = Collections.unmodifiableSet(s);
     }

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -40,8 +40,10 @@ import org.apache.cxf.message.MessageUti
 import org.apache.cxf.phase.PhaseInterceptor;
 import org.apache.cxf.resource.ResourceManager;
 import org.apache.cxf.ws.security.SecurityConstants;
+import org.apache.wss4j.common.ConfigurationConstants;
 import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
 import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.dom.WSConstants;
 import org.apache.wss4j.dom.handler.RequestData;
@@ -200,6 +202,12 @@ public abstract class AbstractWSS4JInter
             WSHandlerConstants.VALIDATE_SAML_SUBJECT_CONFIRMATION, 
             Boolean.toString(validateSAMLSubjectConf)
         );
+        
+        PasswordEncryptor passwordEncryptor = 
+            
(PasswordEncryptor)msg.getContextualProperty(SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE);
+        if (passwordEncryptor != null) {
+            
msg.setContextualProperty(ConfigurationConstants.PASSWORD_ENCRYPTOR_INSTANCE, 
passwordEncryptor);
+        }
     }
 
     @Override
@@ -226,7 +234,8 @@ public abstract class AbstractWSS4JInter
                     props.load(in);
                     in.close();
                     return CryptoFactory.getInstance(props,
-                                                     
this.getClassLoader(reqData.getMsgContext()));
+                                                     
this.getClassLoader(reqData.getMsgContext()),
+                                                     
getPasswordEncryptor(reqData));
                 }
             } catch (Exception e) {
                 //ignore

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -57,6 +57,8 @@ import org.apache.cxf.ws.security.tokens
 import org.apache.wss4j.common.ConfigurationConstants;
 import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
+import org.apache.wss4j.common.crypto.StrongJasyptPasswordEncryptor;
 import org.apache.wss4j.common.ext.WSPasswordCallback;
 import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.common.util.Loader;
@@ -176,6 +178,12 @@ public abstract class AbstractWSS4JStaxI
         if (properties != null) {
             properties.put(ConfigurationConstants.MUST_UNDERSTAND, 
Boolean.toString(mustUnderstand));
         }
+        
+        PasswordEncryptor passwordEncryptor = 
+            
(PasswordEncryptor)msg.getContextualProperty(SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE);
+        if (passwordEncryptor != null && securityProperties == null) {
+            properties.put(ConfigurationConstants.PASSWORD_ENCRYPTOR_INSTANCE, 
passwordEncryptor);
+        }
     }
     
     private  Collection<Pattern> convertCertConstraints(String 
certConstraints) {
@@ -369,7 +377,9 @@ public abstract class AbstractWSS4JStaxI
             if (crypto == null) {
                 Object obj = getProperty(soapMessage, refId);
                 if (obj instanceof Properties) {
-                    crypto = CryptoFactory.getInstance((Properties)obj);
+                    crypto = CryptoFactory.getInstance((Properties)obj, 
+                                                       getClassLoader(),
+                                                       
getPasswordEncryptor(soapMessage));
                     cryptos.put(refId, crypto);
                 } else if (obj instanceof Crypto) {
                     crypto = (Crypto)obj;
@@ -427,7 +437,8 @@ public abstract class AbstractWSS4JStaxI
                     InputStream in = url.openStream(); 
                     props.load(in);
                     in.close();
-                    return CryptoFactory.getInstance(props, getClassLoader());
+                    return CryptoFactory.getInstance(props, getClassLoader(), 
+                                                     
getPasswordEncryptor(soapMessage));
                 }
             } catch (Exception e) {
                 //ignore
@@ -440,6 +451,28 @@ public abstract class AbstractWSS4JStaxI
         }
     }
     
+    protected PasswordEncryptor getPasswordEncryptor(SoapMessage soapMessage) {
+        PasswordEncryptor passwordEncryptor = 
+            (PasswordEncryptor)soapMessage.getContextualProperty(
+                SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE
+            );
+        if (passwordEncryptor != null) {
+            return passwordEncryptor;
+        }
+        
+        CallbackHandler callbackHandler = null;
+        if (securityProperties != null) {
+            callbackHandler = securityProperties.getCallbackHandler();
+        } else {
+            callbackHandler = 
(CallbackHandler)getProperties().get(ConfigurationConstants.PW_CALLBACK_REF);
+        }
+        if (callbackHandler != null) {
+            return new StrongJasyptPasswordEncryptor(callbackHandler);
+        }
+        
+        return null;
+    }
+    
     private ClassLoader getClassLoader() {
         try {
             return Loader.getTCL();

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.logging.Logger;
 
+import javax.security.auth.callback.CallbackHandler;
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPException;
 import javax.xml.stream.XMLStreamException;
@@ -81,7 +82,10 @@ import org.apache.cxf.ws.security.wss4j.
 import 
org.apache.cxf.ws.security.wss4j.policyvalidators.X509TokenPolicyValidator;
 import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
+import org.apache.wss4j.common.crypto.StrongJasyptPasswordEncryptor;
 import org.apache.wss4j.common.ext.WSSecurityException;
+import org.apache.wss4j.common.util.Loader;
 import org.apache.wss4j.dom.WSConstants;
 import org.apache.wss4j.dom.WSDataRef;
 import org.apache.wss4j.dom.WSSecurityEngineResult;
@@ -236,7 +240,7 @@ public class PolicyBasedWSS4JInIntercept
     }
 
     private String checkAsymmetricBinding(
-        AssertionInfoMap aim, String action, SoapMessage message
+        AssertionInfoMap aim, String action, SoapMessage message, RequestData 
data
     ) throws WSSecurityException {
         Collection<AssertionInfo> ais = 
             getAllAssertionsByLocalname(aim, SPConstants.ASYMMETRIC_BINDING);
@@ -255,12 +259,12 @@ public class PolicyBasedWSS4JInIntercept
             e = 
message.getContextualProperty(SecurityConstants.ENCRYPT_PROPERTIES);
         }
         
-        Crypto encrCrypto = getEncryptionCrypto(e, message);
+        Crypto encrCrypto = getEncryptionCrypto(e, message, data);
         Crypto signCrypto = null;
         if (e != null && e.equals(s)) {
             signCrypto = encrCrypto;
         } else {
-            signCrypto = getSignatureCrypto(s, message);
+            signCrypto = getSignatureCrypto(s, message, data);
         }
         
         if (signCrypto != null) {
@@ -280,7 +284,7 @@ public class PolicyBasedWSS4JInIntercept
     }
     
     private String checkDefaultBinding(
-        AssertionInfoMap aim, String action, SoapMessage message
+        AssertionInfoMap aim, String action, SoapMessage message, RequestData 
data
     ) throws WSSecurityException {
         action = addToAction(action, "Signature", true);
         action = addToAction(action, "Encrypt", true);
@@ -293,12 +297,12 @@ public class PolicyBasedWSS4JInIntercept
             e = 
message.getContextualProperty(SecurityConstants.ENCRYPT_PROPERTIES);
         }
         
-        Crypto encrCrypto = getEncryptionCrypto(e, message);
+        Crypto encrCrypto = getEncryptionCrypto(e, message, data);
         Crypto signCrypto = null;
         if (e != null && e.equals(s)) {
             signCrypto = encrCrypto;
         } else {
-            signCrypto = getSignatureCrypto(s, message);
+            signCrypto = getSignatureCrypto(s, message, data);
         }
         
         if (signCrypto != null) {
@@ -334,7 +338,7 @@ public class PolicyBasedWSS4JInIntercept
     }
     
     private String checkSymmetricBinding(
-        AssertionInfoMap aim, String action, SoapMessage message
+        AssertionInfoMap aim, String action, SoapMessage message, RequestData 
data
     ) throws WSSecurityException {
         Collection<AssertionInfo> ais = 
             getAllAssertionsByLocalname(aim, SPConstants.SYMMETRIC_BINDING);
@@ -353,12 +357,12 @@ public class PolicyBasedWSS4JInIntercept
             e = 
message.getContextualProperty(SecurityConstants.ENCRYPT_PROPERTIES);
         }
         
-        Crypto encrCrypto = getEncryptionCrypto(e, message);
+        Crypto encrCrypto = getEncryptionCrypto(e, message, data);
         Crypto signCrypto = null;
         if (e != null && e.equals(s)) {
             signCrypto = encrCrypto;
         } else {
-            signCrypto = getSignatureCrypto(s, message);
+            signCrypto = getSignatureCrypto(s, message, data);
         }
         
         if (isRequestor(message)) {
@@ -402,7 +406,9 @@ public class PolicyBasedWSS4JInIntercept
         return action;
     }
     
-    private Crypto getEncryptionCrypto(Object e, SoapMessage message) throws 
WSSecurityException {
+    private Crypto getEncryptionCrypto(Object e, 
+                                       SoapMessage message, 
+                                       RequestData requestData) throws 
WSSecurityException {
         Crypto encrCrypto = null;
         if (e instanceof Crypto) {
             encrCrypto = (Crypto)e;
@@ -415,7 +421,9 @@ public class PolicyBasedWSS4JInIntercept
                 throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
             }
             
-            encrCrypto = CryptoFactory.getInstance(props);
+            PasswordEncryptor passwordEncryptor = 
getPasswordEncryptor(message, requestData);
+            encrCrypto = CryptoFactory.getInstance(props, 
Loader.getClassLoader(CryptoFactory.class),
+                                                   passwordEncryptor);
 
             EndpointInfo info = 
message.getExchange().get(Endpoint.class).getEndpointInfo();
             synchronized (info) {
@@ -425,7 +433,29 @@ public class PolicyBasedWSS4JInIntercept
         return encrCrypto;
     }
     
-    private Crypto getSignatureCrypto(Object s, SoapMessage message) throws 
WSSecurityException {
+    private PasswordEncryptor getPasswordEncryptor(SoapMessage soapMessage, 
RequestData requestData) {
+        PasswordEncryptor passwordEncryptor = 
+            (PasswordEncryptor)soapMessage.getContextualProperty(
+                SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE
+            );
+        if (passwordEncryptor != null) {
+            return passwordEncryptor;
+        }
+        
+        if (requestData.getPasswordEncryptor() != null) {
+            return requestData.getPasswordEncryptor();
+        }
+        
+        CallbackHandler callbackHandler = requestData.getCallbackHandler();
+        if (callbackHandler != null) {
+            return new StrongJasyptPasswordEncryptor(callbackHandler);
+        }
+        
+        return null;
+    }
+    
+    private Crypto getSignatureCrypto(Object s, SoapMessage message, 
+                                      RequestData requestData) throws 
WSSecurityException {
         Crypto signCrypto = null;
         if (s instanceof Crypto) {
             signCrypto = (Crypto)s;
@@ -438,7 +468,9 @@ public class PolicyBasedWSS4JInIntercept
                 throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
             }
             
-            signCrypto = CryptoFactory.getInstance(props);
+            PasswordEncryptor passwordEncryptor = 
getPasswordEncryptor(message, requestData);
+            signCrypto = CryptoFactory.getInstance(props, 
Loader.getClassLoader(CryptoFactory.class),
+                                                   passwordEncryptor);
 
             EndpointInfo info = 
message.getExchange().get(Endpoint.class).getEndpointInfo();
             synchronized (info) {
@@ -560,11 +592,11 @@ public class PolicyBasedWSS4JInIntercept
         if (aim != null) {
             //things that DO impact setup
             handleWSS11(aim, message);
-            action = checkAsymmetricBinding(aim, action, message);
-            action = checkSymmetricBinding(aim, action, message);
+            action = checkAsymmetricBinding(aim, action, message, data);
+            action = checkSymmetricBinding(aim, action, message, data);
             Collection<AssertionInfo> ais = 
aim.get(SP12Constants.TRANSPORT_BINDING);
             if ("".equals(action) || (ais != null && !ais.isEmpty())) {
-                action = checkDefaultBinding(aim, action, message);
+                action = checkDefaultBinding(aim, action, message, data);
             }
             
             // Allow for setting non-standard asymmetric signature algorithms

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -57,6 +57,7 @@ import org.apache.cxf.ws.security.Securi
 import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
 import org.apache.wss4j.common.ext.WSSecurityException;
+import org.apache.wss4j.common.util.Loader;
 import org.apache.wss4j.dom.handler.WSHandlerConstants;
 import org.apache.wss4j.policy.SP11Constants;
 import org.apache.wss4j.policy.SP12Constants;
@@ -345,7 +346,9 @@ public class PolicyBasedWSS4JStaxInInter
                 throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
             }
             
-            encrCrypto = CryptoFactory.getInstance(props);
+            encrCrypto = CryptoFactory.getInstance(props, 
+                                                   
Loader.getClassLoader(CryptoFactory.class),
+                                                   
getPasswordEncryptor(message));
 
             EndpointInfo info = 
message.getExchange().get(Endpoint.class).getEndpointInfo();
             synchronized (info) {
@@ -368,7 +371,9 @@ public class PolicyBasedWSS4JStaxInInter
                 throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
             }
             
-            signCrypto = CryptoFactory.getInstance(props);
+            signCrypto = CryptoFactory.getInstance(props,
+                                                   
Loader.getClassLoader(CryptoFactory.class),
+                                                   
getPasswordEncryptor(message));
 
             EndpointInfo info = 
message.getExchange().get(Endpoint.class).getEndpointInfo();
             synchronized (info) {

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -50,6 +50,7 @@ import org.apache.cxf.ws.security.wss4j.
 import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
 import org.apache.wss4j.common.ext.WSSecurityException;
+import org.apache.wss4j.common.util.Loader;
 import org.apache.wss4j.dom.handler.WSHandlerConstants;
 import org.apache.wss4j.policy.SP11Constants;
 import org.apache.wss4j.policy.SP12Constants;
@@ -298,7 +299,9 @@ public class PolicyBasedWSS4JStaxOutInte
                 throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
             }
             
-            encrCrypto = CryptoFactory.getInstance(props);
+            encrCrypto = CryptoFactory.getInstance(props,
+                                                   
Loader.getClassLoader(CryptoFactory.class),
+                                                   
getPasswordEncryptor(message));
 
             EndpointInfo info = 
message.getExchange().get(Endpoint.class).getEndpointInfo();
             synchronized (info) {
@@ -321,7 +324,9 @@ public class PolicyBasedWSS4JStaxOutInte
                 throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
             }
             
-            signCrypto = CryptoFactory.getInstance(props);
+            signCrypto = CryptoFactory.getInstance(props,
+                                                   
Loader.getClassLoader(CryptoFactory.class),
+                                                   
getPasswordEncryptor(message));
 
             EndpointInfo info = 
message.getExchange().get(Endpoint.class).getEndpointInfo();
             synchronized (info) {

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -219,6 +219,9 @@ public class WSS4JInInterceptor extends 
         try {
             reqData.setMsgContext(msg);
             setAlgorithmSuites(msg, reqData);
+            
+            reqData.setCallbackHandler(getCallback(reqData, utWithCallbacks));
+            
             computeAction(msg, reqData);
             List<Integer> actions = new ArrayList<Integer>();
             String action = getAction(msg, version);
@@ -230,8 +233,6 @@ public class WSS4JInInterceptor extends 
                 actor = 
(String)msg.getContextualProperty(SecurityConstants.ACTOR);
             }
 
-            reqData.setCallbackHandler(getCallback(reqData, doAction, 
utWithCallbacks));
-            
             // Configure replay caching
             ReplayCache nonceCache = 
                 getReplayCache(
@@ -611,57 +612,51 @@ public class WSS4JInInterceptor extends 
         
     }
 
-    protected CallbackHandler getCallback(RequestData reqData, int doAction, 
boolean utWithCallbacks) 
+    protected CallbackHandler getCallback(RequestData reqData, boolean 
utWithCallbacks) 
         throws WSSecurityException {
-        if (!utWithCallbacks 
-            && ((doAction & WSConstants.UT) != 0 || (doAction & 
WSConstants.UT_NOPASSWORD) != 0)) {
+        if (!utWithCallbacks) {
             CallbackHandler pwdCallback = null;
             try {
-                pwdCallback = getCallback(reqData, doAction);
+                pwdCallback = getCallback(reqData);
             } catch (Exception ex) {
                 // ignore
             }
             return new DelegatingCallbackHandler(pwdCallback);
         } else {
-            return getCallback(reqData, doAction);
+            return getCallback(reqData);
         }
     }
     
-    protected CallbackHandler getCallback(RequestData reqData, int doAction) 
throws WSSecurityException {
-        /*
-         * To check a UsernameToken or to decrypt an encrypted message we need 
a
-         * password.
-         */
-        CallbackHandler cbHandler = null;
-        if ((doAction & (WSConstants.ENCR | WSConstants.UT)) != 0) {
-            Object o = ((SoapMessage)reqData.getMsgContext())
-                .getContextualProperty(SecurityConstants.CALLBACK_HANDLER);
-            if (o instanceof String) {
-                try {
-                    o = ClassLoaderUtils.loadClass((String)o, 
this.getClass()).newInstance();
-                } catch (Exception e) {
-                    throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e);
-                }
-            }            
-            if (o instanceof CallbackHandler) {
-                cbHandler = (CallbackHandler)o;
+    protected CallbackHandler getCallback(RequestData reqData) throws 
WSSecurityException {
+        Object o = ((SoapMessage)reqData.getMsgContext())
+            .getContextualProperty(SecurityConstants.CALLBACK_HANDLER);
+        if (o instanceof String) {
+            try {
+                o = ClassLoaderUtils.loadClass((String)o, 
this.getClass()).newInstance();
+            } catch (Exception e) {
+                throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e);
             }
-            if (cbHandler == null) {
-                try {
-                    cbHandler = getPasswordCallbackHandler(reqData);
-                } catch (WSSecurityException sec) {
-                    Endpoint ep = 
((SoapMessage)reqData.getMsgContext()).getExchange().get(Endpoint.class);
-                    if (ep != null && ep.getEndpointInfo() != null) {
-                        TokenStore store = (TokenStore)ep.getEndpointInfo()
-                            .getProperty(TokenStore.class.getName());
-                        if (store != null) {
-                            return new TokenStoreCallbackHandler(null, store);
-                        }
-                    }                    
-                    throw sec;
-                }
+        }         
+        CallbackHandler cbHandler = null;
+        if (o instanceof CallbackHandler) {
+            cbHandler = (CallbackHandler)o;
+        }
+        if (cbHandler == null) {
+            try {
+                cbHandler = getPasswordCallbackHandler(reqData);
+            } catch (WSSecurityException sec) {
+                Endpoint ep = 
((SoapMessage)reqData.getMsgContext()).getExchange().get(Endpoint.class);
+                if (ep != null && ep.getEndpointInfo() != null) {
+                    TokenStore store = (TokenStore)ep.getEndpointInfo()
+                        .getProperty(TokenStore.class.getName());
+                    if (store != null) {
+                        return new TokenStoreCallbackHandler(null, store);
+                    }
+                }                    
+                throw sec;
             }
         }
+            
         Endpoint ep = 
((SoapMessage)reqData.getMsgContext()).getExchange().get(Endpoint.class);
         if (ep != null && ep.getEndpointInfo() != null) {
             TokenStore store = 
(TokenStore)ep.getEndpointInfo().getProperty(TokenStore.class.getName());

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
 Tue Aug 20 10:56:47 2013
@@ -120,8 +120,8 @@ public class WSS4JStaxInInterceptor exte
                 (List<SecurityEvent>) 
soapMessage.getExchange().get(SecurityEvent.class.getName() + ".out");
             
             translateProperties(soapMessage);
-            configureProperties(soapMessage);
             configureCallbackHandler(soapMessage);
+            configureProperties(soapMessage);
             
             InboundWSSec inboundWSSec = null;
             WSSSecurityProperties secProps = null;

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
 Tue Aug 20 10:56:47 2013
@@ -53,7 +53,6 @@ import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
-
 import org.apache.cxf.Bus;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.saaj.SAAJUtils;
@@ -82,6 +81,8 @@ import org.apache.neethi.Assertion;
 import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
 import org.apache.wss4j.common.crypto.CryptoType;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
+import org.apache.wss4j.common.crypto.StrongJasyptPasswordEncryptor;
 import org.apache.wss4j.common.derivedKey.ConversationConstants;
 import org.apache.wss4j.common.derivedKey.ConversationException;
 import org.apache.wss4j.common.ext.WSPasswordCallback;
@@ -90,6 +91,7 @@ import org.apache.wss4j.common.principal
 import org.apache.wss4j.common.saml.SAMLCallback;
 import org.apache.wss4j.common.saml.SAMLUtil;
 import org.apache.wss4j.common.saml.SamlAssertionWrapper;
+import org.apache.wss4j.common.util.Loader;
 import org.apache.wss4j.dom.WSConstants;
 import org.apache.wss4j.dom.WSEncryptionPart;
 import org.apache.wss4j.dom.WSSConfig;
@@ -1101,6 +1103,7 @@ public abstract class AbstractBindingBui
             try {
                 handler = (CallbackHandler)ClassLoaderUtils
                     .loadClass((String)o, this.getClass()).newInstance();
+                
message.setContextualProperty(SecurityConstants.CALLBACK_HANDLER, handler);
             } catch (Exception e) {
                 handler = null;
             }
@@ -1613,12 +1616,31 @@ public abstract class AbstractBindingBui
         }
         
         if (properties != null) {
-            crypto = CryptoFactory.getInstance(properties);
+            crypto = CryptoFactory.getInstance(properties, 
+                                               
Loader.getClassLoader(CryptoFactory.class),
+                                               getPasswordEncryptor());
             getCryptoCache().put(o, crypto);
         }
         return crypto;
     }
     
+    protected PasswordEncryptor getPasswordEncryptor() {
+        PasswordEncryptor passwordEncryptor = 
+            (PasswordEncryptor)message.getContextualProperty(
+                SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE
+            );
+        if (passwordEncryptor != null) {
+            return passwordEncryptor;
+        }
+        
+        CallbackHandler callbackHandler = getCallbackHandler();
+        if (callbackHandler != null) {
+            return new StrongJasyptPasswordEncryptor(callbackHandler);
+        }
+        
+        return null;
+    }
+    
     public void setKeyIdentifierType(WSSecBase secBase, AbstractTokenWrapper 
wrapper, AbstractToken token) {
         boolean tokenTypeSet = false;
         

Modified: 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
 Tue Aug 20 10:56:47 2013
@@ -116,4 +116,25 @@ public class ActionTest extends Abstract
         bus.shutdown(true);
     }
     
+    @org.junit.Test
+    public void testEncryptedPassword() throws Exception {
+
+        SpringBusFactory bf = new SpringBusFactory();
+        URL busFile = ActionTest.class.getResource("client.xml");
+
+        Bus bus = bf.createBus(busFile.toString());
+        SpringBusFactory.setDefaultBus(bus);
+        SpringBusFactory.setThreadDefaultBus(bus);
+        
+        URL wsdl = ActionTest.class.getResource("DoubleItAction.wsdl");
+        Service service = Service.create(wsdl, SERVICE_QNAME);
+        QName portQName = new QName(NAMESPACE, 
"DoubleItEncryptedPasswordPort");
+        DoubleItPortType port = 
+                service.getPort(portQName, DoubleItPortType.class);
+        updateAddressPort(port, PORT);
+        port.doubleIt(25);
+        
+        ((java.io.Closeable)port).close();
+        bus.shutdown(true);
+    }
 }

Modified: 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
 Tue Aug 20 10:56:47 2013
@@ -54,12 +54,16 @@ public class KeystorePasswordCallback im
     public void handle(Callback[] callbacks) throws IOException, 
UnsupportedCallbackException {
         for (int i = 0; i < callbacks.length; i++) {
             WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
-            String pass = passwords.get(pc.getIdentifier());
-            if (pass != null) {
-                pc.setPassword(pass);
-                return;
+            if (pc.getUsage() == 
WSPasswordCallback.Usage.PASSWORD_ENCRYPTOR_PASSWORD) {
+                pc.setPassword("this-is-a-secret");
             } else {
-                pc.setPassword("password");
+                String pass = passwords.get(pc.getIdentifier());
+                if (pass != null) {
+                    pc.setPassword(pass);
+                    return;
+                } else {
+                    pc.setPassword("password");
+                }
             }
         }
     }

Modified: 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
 Tue Aug 20 10:56:47 2013
@@ -301,6 +301,34 @@ public class StaxX509TokenTest extends A
     }
     
     @org.junit.Test
+    public void testAsymmetricEncryptedPassword() throws Exception {
+
+        SpringBusFactory bf = new SpringBusFactory();
+        URL busFile = StaxX509TokenTest.class.getResource("client.xml");
+
+        Bus bus = bf.createBus(busFile.toString());
+        SpringBusFactory.setDefaultBus(bus);
+        SpringBusFactory.setThreadDefaultBus(bus);
+
+        URL wsdl = X509TokenTest.class.getResource("DoubleItX509.wsdl");
+        Service service = Service.create(wsdl, SERVICE_QNAME);
+        QName portQName = new QName(NAMESPACE, 
"DoubleItAsymmetricEncryptedPasswordPort");
+        DoubleItPortType x509Port = 
+                service.getPort(portQName, DoubleItPortType.class);
+        updateAddressPort(x509Port, PORT);
+        
+        // DOM
+        x509Port.doubleIt(25);
+        
+        // Streaming
+        SecurityTestUtil.enableStreaming(x509Port);
+        x509Port.doubleIt(25);
+        
+        ((java.io.Closeable)x509Port).close();
+        bus.shutdown(true);
+    }
+    
+    @org.junit.Test
     public void testAsymmetricSHA256() throws Exception {
 
         SpringBusFactory bf = new SpringBusFactory();

Modified: 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
 Tue Aug 20 10:56:47 2013
@@ -356,6 +356,34 @@ public class X509TokenTest extends Abstr
     }
     
     @org.junit.Test
+    public void testAsymmetricEncryptedPassword() throws Exception {
+
+        SpringBusFactory bf = new SpringBusFactory();
+        URL busFile = X509TokenTest.class.getResource("client.xml");
+
+        Bus bus = bf.createBus(busFile.toString());
+        SpringBusFactory.setDefaultBus(bus);
+        SpringBusFactory.setThreadDefaultBus(bus);
+
+        URL wsdl = X509TokenTest.class.getResource("DoubleItX509.wsdl");
+        Service service = Service.create(wsdl, SERVICE_QNAME);
+        QName portQName = new QName(NAMESPACE, 
"DoubleItAsymmetricEncryptedPasswordPort");
+        DoubleItPortType x509Port = 
+                service.getPort(portQName, DoubleItPortType.class);
+        updateAddressPort(x509Port, PORT);
+        
+        // DOM
+        x509Port.doubleIt(25);
+        
+        // Streaming
+        SecurityTestUtil.enableStreaming(x509Port);
+        x509Port.doubleIt(25);
+        
+        ((java.io.Closeable)x509Port).close();
+        bus.shutdown(true);
+    }
+    
+    @org.junit.Test
     public void testAsymmetricSHA256() throws Exception {
 
         SpringBusFactory bf = new SpringBusFactory();

Added: cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties?rev=1515771&view=auto
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties 
(added)
+++ cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties Tue 
Aug 20 10:56:47 2013
@@ -0,0 +1,21 @@
+#    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.
+org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=ENC(mC9pTqoZ9n1dW2wETrJEpHHDmgXn1e7T)
+org.apache.ws.security.crypto.merlin.keystore.alias=alice
+org.apache.ws.security.crypto.merlin.keystore.file=certs/alice.jks

Added: cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties?rev=1515771&view=auto
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties (added)
+++ cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties Tue 
Aug 20 10:56:47 2013
@@ -0,0 +1,21 @@
+#    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.
+org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=ENC(eAsmYazOvgvygJmuMzWG5uvRBmkvXf5G)
+org.apache.ws.security.crypto.merlin.keystore.alias=bob
+org.apache.ws.security.crypto.merlin.keystore.file=certs/bob.jks

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
 Tue Aug 20 10:56:47 2013
@@ -57,6 +57,9 @@
         <wsdl:port name="DoubleItUsernameTokenPort2" 
binding="tns:DoubleItNoSecurityBinding">
             <soap:address 
location="http://localhost:9001/DoubleItUsernameToken2"; />
         </wsdl:port>
+        <wsdl:port name="DoubleItEncryptedPasswordPort" 
binding="tns:DoubleItNoSecurityBinding">
+            <soap:address 
location="http://localhost:9001/DoubleItEncryptedPassword"; />
+        </wsdl:port>
     </wsdl:service>
 
 </wsdl:definitions>

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
 Tue Aug 20 10:56:47 2013
@@ -81,4 +81,33 @@
        </jaxws:outInterceptors>
     </jaxws:client>
     
+    <jaxws:client 
name="{http://www.example.org/contract/DoubleIt}DoubleItEncryptedPasswordPort"; 
+                  createdFromAPI="true">
+       <jaxws:outInterceptors>
+           <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
+               <constructor-arg>
+                   <map>
+                        <entry key="action" value="Encrypt"/> 
+                        <entry key="passwordCallbackClass" 
+                               
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+                        <entry key="encryptionPropFile" 
value="bob-enc.properties"/>
+                        <entry key="encryptionUser" value="bob"/>
+                   </map>
+               </constructor-arg>
+           </bean>
+       </jaxws:outInterceptors>
+       <jaxws:inInterceptors>
+           <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
+               <constructor-arg>
+                   <map>
+                        <entry key="action" value="Encrypt"/> 
+                        <entry key="passwordCallbackClass" 
+                               
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+                        <entry key="decryptionPropFile" 
value="alice-enc.properties"/>
+                   </map>
+               </constructor-arg>
+           </bean>
+       </jaxws:inInterceptors>
+    </jaxws:client>
+    
 </beans>

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
 Tue Aug 20 10:56:47 2013
@@ -121,5 +121,40 @@
      
     </jaxws:endpoint> 
     
+    <jaxws:endpoint 
+       id="EncryptedPassword"
+       
address="http://localhost:${testutil.ports.Server}/DoubleItEncryptedPassword"; 
+       serviceName="s:DoubleItService"
+       endpointName="s:DoubleItEncryptedPasswordPort"
+       xmlns:s="http://www.example.org/contract/DoubleIt";
+       implementor="org.apache.cxf.systest.ws.common.DoubleItImpl"
+       wsdlLocation="org/apache/cxf/systest/ws/action/DoubleItAction.wsdl">
+       <jaxws:outInterceptors>
+           <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
+               <constructor-arg>
+                   <map>
+                        <entry key="action" value="Encrypt"/> 
+                        <entry key="passwordCallbackClass" 
+                               
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+                        <entry key="encryptionPropFile" 
value="alice-enc.properties"/>
+                        <entry key="encryptionUser" value="alice"/>
+                   </map>
+               </constructor-arg>
+           </bean>
+       </jaxws:outInterceptors>
+       <jaxws:inInterceptors>
+           <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
+               <constructor-arg>
+                   <map>
+                        <entry key="action" value="Encrypt"/> 
+                        <entry key="passwordCallbackClass" 
+                               
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+                        <entry key="decryptionPropFile" 
value="bob-enc.properties"/>
+                   </map>
+               </constructor-arg>
+           </bean>
+       </jaxws:inInterceptors>
+     
+    </jaxws:endpoint> 
     
 </beans>

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
 Tue Aug 20 10:56:47 2013
@@ -182,6 +182,25 @@
             </wsdl:fault>
         </wsdl:operation>
     </wsdl:binding>
+    <wsdl:binding name="DoubleItAsymmetricEncryptedPasswordBinding" 
type="tns:DoubleItPortType">
+        <wsp:PolicyReference URI="#DoubleItAsymmetricIssuerSerialPolicy" />
+        <soap:binding style="document"
+            transport="http://schemas.xmlsoap.org/soap/http"; />
+        <wsdl:operation name="DoubleIt">
+            <soap:operation soapAction="" />
+            <wsdl:input>
+                <soap:body use="literal" />
+                <wsp:PolicyReference 
URI="#DoubleItBinding_DoubleIt_Input_Policy"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal" />
+                <wsp:PolicyReference 
URI="#DoubleItBinding_DoubleIt_Output_Policy"/>
+            </wsdl:output>
+            <wsdl:fault name="DoubleItFault">
+                <soap:body use="literal" name="DoubleItFault" />
+            </wsdl:fault>
+        </wsdl:operation>
+    </wsdl:binding>
     <wsdl:binding name="DoubleItAsymmetricSHA256Binding" 
type="tns:DoubleItPortType">
         <wsp:PolicyReference URI="#DoubleItAsymmetricSHA256Policy" />
         <soap:binding style="document"
@@ -510,6 +529,10 @@
                    binding="tns:DoubleItAsymmetricIssuerSerialBinding">
             <soap:address 
location="http://localhost:9001/DoubleItX509Asymmetric"; />
         </wsdl:port>
+        <wsdl:port name="DoubleItAsymmetricEncryptedPasswordPort" 
+                   binding="tns:DoubleItAsymmetricEncryptedPasswordBinding">
+            <soap:address 
location="http://localhost:9001/DoubleItX509AsymmetricEncryptedPassword"; />
+        </wsdl:port>
         <wsdl:port name="DoubleItAsymmetricSHA256Port" 
                    binding="tns:DoubleItAsymmetricSHA256Binding">
             <soap:address 
location="http://localhost:9001/DoubleItX509AsymmetricSHA256"; />

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
 Tue Aug 20 10:56:47 2013
@@ -115,6 +115,18 @@
        </jaxws:properties>
     </jaxws:client>
     
+    <jaxws:client 
name="{http://www.example.org/contract/DoubleIt}DoubleItAsymmetricEncryptedPasswordPort";
 
+                  createdFromAPI="true">
+       <jaxws:properties>
+           <entry key="ws-security.encryption.properties" 
value="bob-enc.properties"/> 
+           <entry key="ws-security.encryption.username" value="bob"/>
+           <entry key="ws-security.signature.properties" 
value="alice-enc.properties"/> 
+           <entry key="ws-security.signature.username" value="alice"/>
+           <entry key="ws-security.callback-handler" 
+                  
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+       </jaxws:properties>
+    </jaxws:client>
+    
     <jaxws:client 
name="{http://www.example.org/contract/DoubleIt}DoubleItAsymmetricSHA256Port"; 
                   createdFromAPI="true">
        <jaxws:properties>

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
 Tue Aug 20 10:56:47 2013
@@ -232,6 +232,25 @@
     </jaxws:endpoint> 
     
     <jaxws:endpoint 
+       id="AsymmetricEncryptedPassword"
+       
address="http://localhost:${testutil.ports.Server}/DoubleItX509AsymmetricEncryptedPassword";
 
+       serviceName="s:DoubleItService"
+       endpointName="s:DoubleItAsymmetricEncryptedPasswordPort"
+       xmlns:s="http://www.example.org/contract/DoubleIt";
+       implementor="org.apache.cxf.systest.ws.common.DoubleItImpl"
+       wsdlLocation="org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl">
+        
+       <jaxws:properties>
+          <entry key="ws-security.callback-handler" 
+                  
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+          <entry key="ws-security.signature.properties" 
value="bob-enc.properties"/> 
+          <entry key="ws-security.encryption.properties" 
value="alice-enc.properties"/> 
+          <entry key="ws-security.encryption.username" value="alice"/>
+       </jaxws:properties> 
+     
+    </jaxws:endpoint> 
+    
+    <jaxws:endpoint 
        id="AsymmetricSHA256"
        
address="http://localhost:${testutil.ports.Server}/DoubleItX509AsymmetricSHA256";
 
        serviceName="s:DoubleItService"

Modified: 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
--- 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
 (original)
+++ 
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
 Tue Aug 20 10:56:47 2013
@@ -241,6 +241,26 @@
     </jaxws:endpoint> 
     
     <jaxws:endpoint 
+       id="AsymmetricEncryptedPassword"
+       
address="http://localhost:${testutil.ports.StaxServer}/DoubleItX509AsymmetricEncryptedPassword";
 
+       serviceName="s:DoubleItService"
+       endpointName="s:DoubleItAsymmetricEncryptedPasswordPort"
+       xmlns:s="http://www.example.org/contract/DoubleIt";
+       implementor="org.apache.cxf.systest.ws.common.DoubleItImpl"
+       wsdlLocation="org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl">
+        
+       <jaxws:properties>
+          <entry key="ws-security.callback-handler" 
+                  
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+          <entry key="ws-security.signature.properties" 
value="bob-enc.properties"/> 
+          <entry key="ws-security.encryption.properties" 
value="alice-enc.properties"/> 
+          <entry key="ws-security.encryption.username" value="alice"/>
+          <entry key="ws-security.enable.streaming" value="true"/>
+       </jaxws:properties> 
+     
+    </jaxws:endpoint> 
+    
+    <jaxws:endpoint 
        id="AsymmetricSHA256"
        
address="http://localhost:${testutil.ports.StaxServer}/DoubleItX509AsymmetricSHA256";
 
        serviceName="s:DoubleItService"


Reply via email to