Yes. I'll fix that in a minute or two. Thanks. Jarek
On Thu, Jul 16, 2009 at 12:07 PM, David Jencks<[email protected]> wrote: > 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); >> } >> } >> } >> >> >
