Is it possible that this change causes this NPE?

at org ..apache ..geronimo ..jaxws ..builder.EndpointInfoBuilder.getProperties(EndpointInfoBuilder.java:282) at org ..apache ..geronimo ..jaxws.builder.EndpointInfoBuilder.build(EndpointInfoBuilder.java:246) at org ..apache ..geronimo ..axis2 ..builder ..Axis2ServiceRefBuilder.createService(Axis2ServiceRefBuilder.java:66) at org ..apache ..geronimo ..jaxws ..builder ..JAXWSServiceRefBuilder.buildNaming(JAXWSServiceRefBuilder.java:164) at org ..apache ..geronimo ..jaxws ..builder ..JAXWSServiceRefBuilder.buildNaming(JAXWSServiceRefBuilder.java:103) at org ..apache ..geronimo ..naming ..deployment ..SwitchingServiceRefBuilder ..buildNaming(SwitchingServiceRefBuilder.java:133) at org ..apache ..geronimo ..j2ee ..deployment ..NamingBuilderCollection.buildNaming(NamingBuilderCollection.java:69) at org ..apache ..geronimo ..web25 ..deployment ..AbstractWebModuleBuilder ..configureBasicWebModuleAttributes(AbstractWebModuleBuilder.java:614) at org ..apache ..geronimo ..tomcat ..deployment.TomcatModuleBuilder.addGBeans(TomcatModuleBuilder.java:349) at org ..apache ..geronimo ..j2ee ..deployment ..SwitchingModuleBuilder.addGBeans(SwitchingModuleBuilder.java:165) at org ..apache ..geronimo ..j2ee ..deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java: 652)
        at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:257)



On Jul 15, 2009, at 9:08 AM, [email protected] wrote:

Author: gawor
Date: Wed Jul 15 16:08:51 2009
New Revision: 794318

URL: http://svn.apache.org/viewvc?rev=794318&view=rev
Log:
1) set arbitrary port properties for service-references in geronimo plan and 2) recognize wss4j properties to enable ws-security for service-references (using CXF provider). Based on patch/work of Rahul Mehta (GERONIMO-4642)

Added:
geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFPasswordHandler.java (with props) geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFPortMethodInterceptor.java (with props)
Modified:
   geronimo/server/trunk/plugins/cxf/geronimo-cxf/pom.xml
geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFServiceReference.java geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/ main/xsd/geronimo-naming-1.2.xsd geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/ main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/ org/apache/geronimo/jaxws/client/EndpointInfo.java geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/ org/apache/geronimo/jaxws/client/PortMethodInterceptor.java

Modified: geronimo/server/trunk/plugins/cxf/geronimo-cxf/pom.xml
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/cxf/geronimo-cxf/pom.xml?rev=794318&r1=794317&r2=794318&view=diff
= = = = = = = = ======================================================================
--- geronimo/server/trunk/plugins/cxf/geronimo-cxf/pom.xml (original)
+++ geronimo/server/trunk/plugins/cxf/geronimo-cxf/pom.xml Wed Jul 15 16:08:51 2009
@@ -61,6 +61,11 @@
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
        </dependency>
+
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-ws-security</artifactId>
+        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>

Added: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/ org/apache/geronimo/cxf/client/CXFPasswordHandler.java
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/client/CXFPasswordHandler.java?rev=794318&view=auto
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFPasswordHandler.java (added) +++ geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFPasswordHandler.java Wed Jul 15 16:08:51 2009
@@ -0,0 +1,44 @@
+/**
+ * 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.geronimo.cxf.client;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import org.apache.ws.security.WSPasswordCallback;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CXFPasswordHandler implements CallbackHandler {
+
+ private static final Logger LOG = LoggerFactory.getLogger(CXFPasswordHandler.class);
+
+    private String password;
+
+    public CXFPasswordHandler(String password) {
+        this.password = password;
+    }
+
+ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
+        pc.setPassword(this.password);
+    }
+}

Propchange: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFPasswordHandler.java
------------------------------------------------------------------------------
   svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFPasswordHandler.java
------------------------------------------------------------------------------
   svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFPasswordHandler.java
------------------------------------------------------------------------------
   svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/ org/apache/geronimo/cxf/client/CXFPortMethodInterceptor.java
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/client/CXFPortMethodInterceptor.java?rev=794318&view=auto
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFPortMethodInterceptor.java (added) +++ geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFPortMethodInterceptor.java Wed Jul 15 16:08:51 2009
@@ -0,0 +1,112 @@
+/**
+ * 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.geronimo.cxf.client;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.ws.BindingProvider;
+
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
+import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
+import org.apache.geronimo.jaxws.client.EndpointInfo;
+import org.apache.geronimo.jaxws.client.PortMethodInterceptor;
+import org.apache.ws.security.handler.WSHandlerConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CXFPortMethodInterceptor extends PortMethodInterceptor {
+
+ private static final Logger LOG = LoggerFactory.getLogger(CXFPortMethodInterceptor.class);
+
+    private static final String IN_PREFIX = "wss4j.in.";
+    private static final String OUT_PREFIX = "wss4j.out.";
+
+ public CXFPortMethodInterceptor(Map<Object, EndpointInfo> seiInfoMap) {
+        super(seiInfoMap);
+    }
+
+    @Override
+ protected void setProperties(BindingProvider proxy, EndpointInfo info, Map<String, Object> props) {
+        if (info == null) {
+            return;
+        }
+
+ Map<String, Object> wss4jInProps = new HashMap<String, Object>(); + Map<String, Object> wss4jOutProps = new HashMap<String, Object>(); + Map<String, Object> otherProps = new HashMap<String, Object>();
+
+        for (Map.Entry<String, Object> entry : props.entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            if (key.startsWith(IN_PREFIX)) {
+                key = key.substring(IN_PREFIX.length());
+                wss4jInProps.put(key, value);
+            } else if (key.startsWith(OUT_PREFIX)) {
+                key = key.substring(OUT_PREFIX.length());
+                wss4jOutProps.put(key, value);
+            } else {
+                otherProps.put(key, value);
+            }
+        }
+
+        super.setProperties(proxy, info, otherProps);
+
+        Client client = ClientProxy.getClient(proxy);
+        Endpoint cxfEndpoint = client.getEndpoint();
+
+        if (!wss4jOutProps.isEmpty()) {
+ // pass the security properties to the WSS4J out interceptor
+            updateSecurityProperties(wss4jOutProps);
+ WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(wss4jOutProps);
+            cxfEndpoint.getOutInterceptors().add(wssOut);
+        }
+
+        if (!wss4jInProps.isEmpty()) {
+ // pass the security properties to the WSS4J in interceptor + WSS4JInInterceptor wssIn = new WSS4JInInterceptor(wss4jInProps);
+            cxfEndpoint.getInInterceptors().add(wssIn);
+        }
+
+    }
+
+ private static void updateSecurityProperties(Map<String, Object> properties) { + String action = (String) properties.get(WSHandlerConstants.ACTION); + if (containsValue(action, WSHandlerConstants.USERNAME_TOKEN) && + ! properties.containsKey(WSHandlerConstants.PW_CALLBACK_CLASS)) {
+            String password = (String) properties.get("password");
+            properties.put(WSHandlerConstants.PW_CALLBACK_REF,
+                           new CXFPasswordHandler(password));
+        }
+    }
+
+ private static boolean containsValue(String property, String value) {
+        if (property != null) {
+            String[] entries = property.split(" ");
+            for (String entry : entries) {
+                if (value.equals(entry)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+}

Propchange: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFPortMethodInterceptor.java
------------------------------------------------------------------------------
   svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFPortMethodInterceptor.java
------------------------------------------------------------------------------
   svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFPortMethodInterceptor.java
------------------------------------------------------------------------------
   svn:mime-type = text/plain

Modified: geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/ java/org/apache/geronimo/cxf/client/CXFServiceReference.java
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/client/CXFServiceReference.java?rev=794318&r1=794317&r2=794318&view=diff
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFServiceReference.java (original) +++ geronimo/server/trunk/plugins/cxf/geronimo-cxf/src/main/java/org/ apache/geronimo/cxf/client/CXFServiceReference.java Wed Jul 15 16:08:51 2009
@@ -38,6 +38,7 @@
import org.apache.geronimo.jaxws.JNDIResolver;
import org.apache.geronimo.jaxws.client.EndpointInfo;
import org.apache.geronimo.jaxws.client.JAXWSServiceReference;
+import org.apache.geronimo.jaxws.client.PortMethodInterceptor;
import org.apache.geronimo.jaxws.handler.GeronimoHandlerResolver;
import org.apache.geronimo.xbeans.javaee.HandlerChainsType;

@@ -93,4 +94,9 @@
new GeronimoHandlerResolver(classLoader, serviceClass, getHandlerChains(), annotationProcessor);
        return handlerResolver;
    }
+
+    protected PortMethodInterceptor getPortMethodInterceptor() {
+        return new CXFPortMethodInterceptor(this.seiInfoMap);
+    }
+
}

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/ src/main/xsd/geronimo-naming-1.2.xsd
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/xsd/geronimo-naming-1.2.xsd?rev=794318&r1=794317&r2=794318&view=diff
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/ main/xsd/geronimo-naming-1.2.xsd (original) +++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/ main/xsd/geronimo-naming-1.2.xsd Wed Jul 15 16:08:51 2009
@@ -986,9 +986,19 @@
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
+ <xsd:element name="property" type="gernaming:portPropertyType"
+                         minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

+    <xsd:complexType name="portPropertyType">
+        <xsd:simpleContent>
+            <xsd:extension base="xsd:string">
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:extension>
+         </xsd:simpleContent>
+    </xsd:complexType>
+
    <xsd:complexType name="service-refType">
        <xsd:sequence>
            <xsd:element name="service-ref-name" type="xsd:string">

Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/ src/main/java/org/apache/geronimo/jaxws/builder/ EndpointInfoBuilder.java
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java?rev=794318&r1=794317&r2=794318&view=diff
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/ main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java (original) +++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/ main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java Wed Jul 15 16:08:51 2009
@@ -26,6 +26,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Properties;

import javax.wsdl.Binding;
import javax.wsdl.Definition;
@@ -47,6 +48,7 @@
import org.apache.geronimo.jaxws.client.EndpointInfo;
import org.apache.geronimo.jaxws.wsdl.CatalogJarWSDLLocator;
import org.apache.geronimo.jaxws.wsdl.CatalogWSDLLocator;
+import org.apache.geronimo.xbeans.geronimo.naming.GerPortPropertyType;
import org.apache.geronimo.xbeans.geronimo.naming.GerPortType;
import org.apache.geronimo.xbeans.geronimo.naming.GerServiceRefType;
import org.apache.geronimo.xbeans.javaee.PortComponentRefType;
@@ -118,7 +120,8 @@
                        URL location = getLocation(gerPort);
String credentialsName = getCredentialsName(gerPort);
                        boolean mtomEnabled = isMTOMEnabled(portName);
- EndpointInfo info = new EndpointInfo(location, credentialsName, mtomEnabled); + Map<String, Object> props = getProperties(gerPort); + EndpointInfo info = new EndpointInfo(location, credentialsName, mtomEnabled, props);
                        this.portInfoMap.put(portName, info);
                    }
                }
@@ -240,7 +243,9 @@

boolean mtomEnabled = isMTOMEnabled(portType.getQName());

- EndpointInfo info = new EndpointInfo(location, credentialsName, mtomEnabled);
+                Map<String, Object> props = getProperties(gerPort);
+
+ EndpointInfo info = new EndpointInfo(location, credentialsName, mtomEnabled, props);
                this.portInfoMap.put(portName, info);
                // prefer first binding listed in wsdl
if (! this.portInfoMap.containsKey(portType.getQName())) {
@@ -272,6 +277,16 @@
        return null;
    }

+    private Map<String, Object> getProperties(GerPortType port) {
+        Map<String, Object> props = new HashMap<String, Object>();
+        if (port.getPropertyArray() != null) {
+ for (GerPortPropertyType propertyType : port.getPropertyArray()) { + props.put(propertyType.getName(), propertyType.getStringValue().trim());
+            }
+        }
+        return props;
+    }
+
    private String getCredentialsName(GerPortType port) {
        String credentialsName = port.getCredentialsName();
return (credentialsName == null) ? null : credentialsName.trim();

Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/ main/java/org/apache/geronimo/jaxws/client/EndpointInfo.java
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/EndpointInfo.java?rev=794318&r1=794317&r2=794318&view=diff
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/ org/apache/geronimo/jaxws/client/EndpointInfo.java (original) +++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/ org/apache/geronimo/jaxws/client/EndpointInfo.java Wed Jul 15 16:08:51 2009
@@ -18,17 +18,20 @@

import java.io.Serializable;
import java.net.URL;
+import java.util.Map;

public class EndpointInfo implements Serializable {

    private URL location;
    private String credentialsName;
    private boolean mtomEnabled;
+    private Map<String, Object> properties;

- public EndpointInfo(URL location, String credentialsName, boolean mtomEnabled) { + public EndpointInfo(URL location, String credentialsName, boolean mtomEnabled, Map<String, Object> properties) {
        this.location = location;
        this.credentialsName = credentialsName;
        this.mtomEnabled = mtomEnabled;
+        this.properties = properties;
    }

    public boolean isMTOMEnabled() {
@@ -43,7 +46,11 @@
        return this.credentialsName;
    }

+    public Map<String, Object> getProperties() {
+        return properties;
+    }
+
    public String toString() {
- return this.location + " " + this.credentialsName + " " + this.mtomEnabled; + return this.location + " " + this.credentialsName + " " + this.mtomEnabled + " " + this.properties;
    }
}

Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/ main/java/org/apache/geronimo/jaxws/client/PortMethodInterceptor.java
URL: 
http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/PortMethodInterceptor.java?rev=794318&r1=794317&r2=794318&view=diff
= = = = = = = = ====================================================================== --- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/ org/apache/geronimo/jaxws/client/PortMethodInterceptor.java (original) +++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/ org/apache/geronimo/jaxws/client/PortMethodInterceptor.java Wed Jul 15 16:08:51 2009
@@ -97,7 +97,14 @@
        setProperties(proxy, info);
    }

- private void setProperties(BindingProvider proxy, EndpointInfo info) { + protected void setProperties(BindingProvider proxy, EndpointInfo info) {
+        if (info == null) {
+            return;
+        }
+        setProperties(proxy, info, info.getProperties());
+    }
+
+ protected void setProperties(BindingProvider proxy, EndpointInfo info, Map<String, Object> properties) {
        if (info == null) {
            return;
        }
@@ -119,29 +126,35 @@
        // set credentials
        String credentialsName = info.getCredentialsName();
        if (credentialsName != null) {
-            Subject subject = ContextManager.getNextCaller();
-            if (subject == null) {
- throw new IllegalStateException("Subject missing but authentication turned on");
-            } else {
- Set creds = subject.getPrivateCredentials(NamedUsernamePasswordCredential.class);
-                boolean found = false;
-
- for (Iterator iterator = creds.iterator(); iterator.hasNext();) { - NamedUsernamePasswordCredential namedUsernamePasswordCredential = (NamedUsernamePasswordCredential) iterator.next(); - if (credentialsName.equals(namedUsernamePasswordCredential.getName())) { - proxy.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, - namedUsernamePasswordCredential.getUsername()); - proxy.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, - new String(namedUsernamePasswordCredential.getPassword())); - LOG.debug("Set username/password property: " + credentialsName);
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
- throw new IllegalStateException("no NamedUsernamePasswordCredential found for name " + credentialsName); + NamedUsernamePasswordCredential namedUsernamePasswordCredential = findCredential(credentialsName); + proxy.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, + namedUsernamePasswordCredential.getUsername()); + proxy.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, + new String(namedUsernamePasswordCredential.getPassword())); + LOG.debug("Set username/password property: " + credentialsName);
+        }
+
+        // set user-specified properties
+        if (properties != null) {
+ for (Map.Entry<String, Object> entry : properties.entrySet()) { + proxy.getRequestContext().put(entry.getKey(), entry.getValue());
+            }
+        }
+    }
+
+ protected NamedUsernamePasswordCredential findCredential(String credentialsName) {
+        Subject subject = ContextManager.getNextCaller();
+        if (subject == null) {
+ throw new IllegalStateException("Subject missing but authentication turned on");
+        } else {
+ Set creds = subject.getPrivateCredentials(NamedUsernamePasswordCredential.class); + for (Iterator iterator = creds.iterator(); iterator.hasNext();) { + NamedUsernamePasswordCredential namedUsernamePasswordCredential = (NamedUsernamePasswordCredential) iterator.next(); + if (credentialsName.equals(namedUsernamePasswordCredential.getName())) {
+                    return namedUsernamePasswordCredential;
                }
            }
+ throw new IllegalStateException("No NamedUsernamePasswordCredential found for name " + credentialsName);
        }
    }
}


Reply via email to