Skip to content

Commit

Permalink
SWITCHYARD-365: targetNamespace is being ignored by NamedModel.getQNa…
Browse files Browse the repository at this point in the history
…me()
  • Loading branch information
errantepiphany committed Aug 11, 2011
1 parent 8f69fe2 commit e8f57db
Show file tree
Hide file tree
Showing 72 changed files with 504 additions and 231 deletions.
Expand Up @@ -36,14 +36,13 @@
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.util.AnnotationLiteral;
import javax.xml.namespace.QName;

import org.switchyard.Exchange;
import org.switchyard.ExchangeHandler;
import org.switchyard.ExchangeState;
import org.switchyard.ServiceReference;
import org.switchyard.component.bean.deploy.BeanDeploymentMetaData;
import org.switchyard.SynchronousInOutHandler;
import org.switchyard.component.bean.deploy.BeanDeploymentMetaData;
import org.switchyard.metadata.BaseExchangeContract;
import org.switchyard.metadata.InvocationContract;
import org.switchyard.metadata.ServiceOperation;
Expand All @@ -60,9 +59,9 @@
public class ClientProxyBean implements Bean {

/**
* The target Service {@link QName}.
* The target Service.
*/
private QName _serviceQName;
private String _serviceName;

/**
* Target service reference.
Expand All @@ -89,13 +88,13 @@ public class ClientProxyBean implements Bean {
/**
* Public constructor.
*
* @param serviceQName The name of the ESB Service being proxied to.
* @param serviceName The name of the ESB Service being proxied to.
* @param proxyInterface The proxy Interface.
* @param qualifiers The CDI bean qualifiers. Copied from the injection point.
* @param beanDeploymentMetaData Deployment metadata.
*/
public ClientProxyBean(QName serviceQName, Class<?> proxyInterface, Set<Annotation> qualifiers, BeanDeploymentMetaData beanDeploymentMetaData) {
this._serviceQName = serviceQName;
public ClientProxyBean(String serviceName, Class<?> proxyInterface, Set<Annotation> qualifiers, BeanDeploymentMetaData beanDeploymentMetaData) {
this._serviceName = serviceName;
this._serviceInterface = proxyInterface;

if (qualifiers != null) {
Expand All @@ -118,8 +117,8 @@ public ClientProxyBean(QName serviceQName, Class<?> proxyInterface, Set<Annotati
*
* @return The Service name.
*/
public QName getServiceQName() {
return _serviceQName;
public String getServiceName() {
return _serviceName;
}

/**
Expand Down Expand Up @@ -275,7 +274,7 @@ public ClientProxyInvocationHandler(Class<?> invokerInterface) {

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (_service == null) {
throw new BeanComponentException("A service reference to service '" + _serviceQName + "' is not bound into "
throw new BeanComponentException("A service reference to service '" + _serviceName + "' is not bound into "
+ "this client proxy instance. A reference configuration to the service may be required in the application configuration.");
}

Expand Down Expand Up @@ -308,7 +307,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
}
throw (Throwable) exceptionObj;
} else {
throw new BeanComponentException("Bean Component invocation failure. Service '" + _serviceQName + "', operation '" + method.getName() + "'.").setFaultExchange(exchangeOut);
throw new BeanComponentException("Bean Component invocation failure. Service '" + _serviceName + "', operation '" + method.getName() + "'.").setFaultExchange(exchangeOut);
}
}
} else {
Expand All @@ -330,7 +329,7 @@ private Exchange createExchange(ServiceReference service, Method method, Exchang
ServiceOperation serviceOperation = service.getInterface().getOperation(operationName);

if (serviceOperation == null) {
throw new BeanComponentException("Bean Component invocation failure. Operation '" + operationName + "' is not defined on Service '" + _serviceQName + "'.");
throw new BeanComponentException("Bean Component invocation failure. Operation '" + operationName + "' is not defined on Service '" + _serviceName + "'.");
}

BaseExchangeContract exchangeContext = new BaseExchangeContract(serviceOperation);
Expand Down
Expand Up @@ -36,9 +36,9 @@
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.ProcessBean;
import javax.xml.namespace.QName;

import org.apache.log4j.Logger;
import org.switchyard.common.type.Classes;
import org.switchyard.component.bean.deploy.BeanDeploymentMetaData;
import org.switchyard.component.bean.deploy.BeanDeploymentMetaDataCDIBean;
import org.switchyard.component.bean.deploy.CDIBean;
Expand Down Expand Up @@ -75,7 +75,7 @@ public class SwitchYardCDIServiceDiscovery implements Extension {
public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery beforeEvent, BeanManager beanManager) {
_beanDeploymentMetaData = new BeanDeploymentMetaData();
_beanDeploymentMetaData.setBeanManager(beanManager);
_beanDeploymentMetaData.setDeploymentClassLoader(Thread.currentThread().getContextClassLoader());
_beanDeploymentMetaData.setDeploymentClassLoader(Classes.getTCCL());
}

/**
Expand Down Expand Up @@ -122,7 +122,7 @@ public void processBean(@Observes ProcessBean processBean, BeanManager beanManag
*/
public void afterBeanDiscovery(@Observes AfterBeanDiscovery afterEvent) {
for (ClientProxyBean proxyBean : _createdProxyBeans) {
_logger.debug("Adding ClientProxyBean for bean Service " + proxyBean.getServiceQName() + ". Service Interface type is " + proxyBean.getServiceInterface().getName());
_logger.debug("Adding ClientProxyBean for bean Service " + proxyBean.getServiceName() + ". Service Interface type is " + proxyBean.getServiceInterface().getName());
afterEvent.addBean(proxyBean);
_beanDeploymentMetaData.addClientProxy(proxyBean);
}
Expand All @@ -132,27 +132,27 @@ public void afterBeanDiscovery(@Observes AfterBeanDiscovery afterEvent) {
}

private void addInjectableClientProxyBean(Field injectionPointField, Reference serviceReference, Set<Annotation> qualifiers, BeanManager beanManager) {
QName serviceQName;
final String serviceName;

if (serviceReference.value().length() > 0) {
serviceQName = QName.valueOf(serviceReference.value());
serviceName = serviceReference.value();
} else {
serviceQName = toServiceQName(injectionPointField.getType());
serviceName = injectionPointField.getType().getSimpleName();
}

addClientProxyBean(serviceQName, injectionPointField.getType(), qualifiers);
addClientProxyBean(serviceName, injectionPointField.getType(), qualifiers);
}

private void addClientProxyBean(QName serviceQName, Class<?> beanClass, Set<Annotation> qualifiers) {
private void addClientProxyBean(String serviceName, Class<?> beanClass, Set<Annotation> qualifiers) {
// Check do we already have a proxy for this service interface...
for (ClientProxyBean clientProxyBean : _createdProxyBeans) {
if (serviceQName.equals(clientProxyBean.getServiceQName()) && beanClass == clientProxyBean.getBeanClass()) {
if (serviceName.equals(clientProxyBean.getServiceName()) && beanClass == clientProxyBean.getBeanClass()) {
// ignore... we already have a proxy ...
return;
}
}

ClientProxyBean clientProxyBean = new ClientProxyBean(serviceQName, beanClass, qualifiers, _beanDeploymentMetaData);
ClientProxyBean clientProxyBean = new ClientProxyBean(serviceName, beanClass, qualifiers, _beanDeploymentMetaData);
_createdProxyBeans.add(clientProxyBean);
}

Expand All @@ -161,7 +161,4 @@ private boolean isServiceBean(Bean<?> bean) {
return (Modifier.isPublic(beanClass.getModifiers()) && beanClass.isAnnotationPresent(Service.class));
}

private QName toServiceQName(Class<?> serviceType) {
return new QName(serviceType.getSimpleName());
}
}
Expand Up @@ -87,6 +87,10 @@ public ScannerOutput<SwitchYardModel> scan(ScannerInput<SwitchYardModel> input)
continue;
}

BeanComponentImplementationModel beanModel = new V1BeanComponentImplementationModel();
beanModel.setClazz(serviceClass.getName());
componentModel.setImplementation(beanModel);

Class<?> iface = service.value();
ComponentServiceModel serviceModel = new V1ComponentServiceModel();
JavaComponentServiceInterfaceModel csiModel = new V1JavaComponentServiceInterfaceModel();
Expand Down Expand Up @@ -116,10 +120,6 @@ public ScannerOutput<SwitchYardModel> scan(ScannerInput<SwitchYardModel> input)
compositeModel.addComponent(componentModel);
componentModel.setName(name);
compositeModel.addComponent(componentModel);

BeanComponentImplementationModel beanModel = new V1BeanComponentImplementationModel();
beanModel.setClazz(serviceClass.getName());
componentModel.setImplementation(beanModel);
}

return new ScannerOutput<SwitchYardModel>().setModel(switchyardModel);
Expand Down
Expand Up @@ -32,7 +32,6 @@
import org.switchyard.config.model.composite.ComponentServiceModel;
import org.switchyard.deploy.BaseActivator;
import org.switchyard.exception.SwitchYardException;

import org.switchyard.metadata.ServiceInterface;

/**
Expand Down Expand Up @@ -65,7 +64,7 @@ public ExchangeHandler init(QName name, Model config) {
} else if (config instanceof ComponentServiceModel) {
// lookup the handler for the initialized service
for (ServiceDescriptor descriptor : _beanDeploymentMetaData.getServiceDescriptors()) {
if (descriptor.getServiceName().equals(name)) {
if (descriptor.getServiceName().equals(name.getLocalPart())) {
return descriptor.getHandler();
}
}
Expand All @@ -86,7 +85,7 @@ public void lookupBeanMetaData() {
* @param name The Service Name.
* @return The ServiceInterface instance.
*/
public ServiceInterface buildServiceInterface(QName name) {
public ServiceInterface buildServiceInterface(String name) {
for (ServiceDescriptor descriptor : _beanDeploymentMetaData.getServiceDescriptors()) {
if (descriptor.getServiceName().equals(name)) {
return descriptor.getInterface();
Expand All @@ -103,7 +102,7 @@ public ServiceInterface buildServiceInterface(QName name) {
public void start(ServiceReference service) {
// Initialise any client proxies to the started service...
for (ClientProxyBean proxyBean : _beanDeploymentMetaData.getClientProxies()) {
if (proxyBean.getServiceQName().equals(service.getName())) {
if (proxyBean.getServiceName().equals(service.getName().getLocalPart())) {
proxyBean.setService(service);
}
}
Expand Down
Expand Up @@ -19,20 +19,20 @@

package org.switchyard.component.bean.deploy;

import org.switchyard.component.bean.ClientProxyBean;
import org.switchyard.exception.SwitchYardException;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import org.switchyard.component.bean.ClientProxyBean;
import org.switchyard.exception.SwitchYardException;

/**
* Bean Deployment Meta Data.
Expand All @@ -49,6 +49,11 @@ public class BeanDeploymentMetaData {
private List<ClientProxyBean> _clientProxies = new ArrayList<ClientProxyBean>();
private List<CDIBean> _deploymentBeans = new ArrayList<CDIBean>();

/**
* Default no-arg constructor.
*/
public BeanDeploymentMetaData() {}

/**
* Set the deployment CDI BeanManager.
* @param beanManager The bean manager.
Expand Down
Expand Up @@ -16,47 +16,43 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/

package org.switchyard.component.bean.deploy;

import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.BeanManager;

import org.switchyard.ExchangeHandler;
import org.switchyard.common.lang.Strings;
import org.switchyard.component.bean.BeanServiceMetadata;
import org.switchyard.component.bean.Service;
import org.switchyard.component.bean.ServiceProxyHandler;
import org.switchyard.exception.SwitchYardException;

import org.switchyard.metadata.ServiceInterface;
import org.switchyard.metadata.java.JavaService;

import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.xml.namespace.QName;

/**
* SwitchYard CDI bean Service Descriptor.
*
* @author <a href="mailto:tom.fennelly@gmail.com">tom.fennelly@gmail.com</a>
*/
public class CDIBeanServiceDescriptor implements ServiceDescriptor {

private CDIBean _cdiBean;
private QName _serviceName;
private BeanServiceMetadata _serviceMetadata;
private BeanDeploymentMetaData _beanDeploymentMetaData;
private final CDIBean _cdiBean;
private final BeanDeploymentMetaData _beanDeploymentMetaData;
private final String _serviceName;
private final BeanServiceMetadata _serviceMetadata;

/**
* Public constructor.
* @param cdiBean The CDI bean instance.
* @param beanDeploymentMetaData bean deployment info
*/
public CDIBeanServiceDescriptor(CDIBean cdiBean, BeanDeploymentMetaData beanDeploymentMetaData) {
Class<?> serviceInterface = getServiceInterface(cdiBean.getBean());

this._cdiBean = cdiBean;
this._serviceName = new QName(serviceInterface.getSimpleName());
this._serviceMetadata = new BeanServiceMetadata(serviceInterface);
this._beanDeploymentMetaData = beanDeploymentMetaData;
final Class<?> beanClass = cdiBean.getBean().getBeanClass();
this._serviceName = getServiceName(beanClass);
this._serviceMetadata = new BeanServiceMetadata(getServiceInterface(beanClass));
}

/**
Expand All @@ -68,7 +64,7 @@ public CDIBean getCDIBean() {
}

@Override
public QName getServiceName() {
public String getServiceName() {
return _serviceName;
}

Expand Down Expand Up @@ -101,8 +97,13 @@ public ServiceInterface getInterface() {
return JavaService.fromClass(_serviceMetadata.getServiceClass());
}

private Class<?> getServiceInterface(Bean bean) {
return getServiceInterface(bean.getBeanClass());
private String getServiceName(Class<?> beanClass) {
Service service = beanClass.getAnnotation(Service.class);
String name = Strings.trimToNull(service.name());
if (name == null) {
name = getServiceInterface(beanClass).getSimpleName();
}
return name;
}

/**
Expand Down
Expand Up @@ -19,12 +19,11 @@

package org.switchyard.component.bean.deploy;

import java.io.Serializable;

import org.switchyard.ExchangeHandler;
import org.switchyard.metadata.ServiceInterface;

import javax.xml.namespace.QName;
import java.io.Serializable;

/**
* Service Descriptor.
*
Expand All @@ -36,7 +35,7 @@ public interface ServiceDescriptor extends Serializable {
* Get the Service name.
* @return The Service Name.
*/
QName getServiceName();
String getServiceName();

/**
* Get the ExchangeHandler.
Expand Down

0 comments on commit e8f57db

Please sign in to comment.