[jboss-cvs] JBossAS SVN: r109152 - in branches/switchboard-integration/webservices: src/main/java/org/jboss/webservices/integration/injection and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Nov 5 07:41:38 EDT 2010
Author: richard.opalka at jboss.com
Date: 2010-11-05 07:41:38 -0400 (Fri, 05 Nov 2010)
New Revision: 109152
Added:
branches/switchboard-integration/webservices/src/main/java/org/jboss/webservices/integration/injection/ServiceRefResourceProvider.java
Modified:
branches/switchboard-integration/webservices/pom.xml
Log:
[JBAS-8549] implementing service ref resource provider
Modified: branches/switchboard-integration/webservices/pom.xml
===================================================================
--- branches/switchboard-integration/webservices/pom.xml 2010-11-05 09:49:03 UTC (rev 109151)
+++ branches/switchboard-integration/webservices/pom.xml 2010-11-05 11:41:38 UTC (rev 109152)
@@ -83,6 +83,14 @@
</dependency>
<!-- jboss provided dependencies -->
<dependency>
+ <groupId>org.jboss.switchboard</groupId>
+ <artifactId>jboss-switchboard-spi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.switchboard</groupId>
+ <artifactId>jboss-switchboard-javaee</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.jboss.spec.javax.xml.ws</groupId>
<artifactId>jboss-jaxws-api_2.2_spec</artifactId>
<scope>provided</scope>
Added: branches/switchboard-integration/webservices/src/main/java/org/jboss/webservices/integration/injection/ServiceRefResourceProvider.java
===================================================================
--- branches/switchboard-integration/webservices/src/main/java/org/jboss/webservices/integration/injection/ServiceRefResourceProvider.java (rev 0)
+++ branches/switchboard-integration/webservices/src/main/java/org/jboss/webservices/integration/injection/ServiceRefResourceProvider.java 2010-11-05 11:41:38 UTC (rev 109152)
@@ -0,0 +1,425 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.webservices.integration.injection;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.Referenceable;
+import javax.xml.namespace.QName;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.serviceref.VirtualFileAdaptor;
+import org.jboss.switchboard.javaee.environment.Addressing;
+import org.jboss.switchboard.javaee.environment.Handler;
+import org.jboss.switchboard.javaee.environment.HandlerChainType;
+import org.jboss.switchboard.javaee.environment.PortComponent;
+import org.jboss.switchboard.javaee.environment.ServiceRefType;
+import org.jboss.switchboard.javaee.jboss.environment.JBossPortComponentRefType;
+import org.jboss.switchboard.javaee.jboss.environment.JBossServiceRefType;
+import org.jboss.switchboard.mc.spi.MCBasedResourceProvider;
+import org.jboss.switchboard.spi.Resource;
+import org.jboss.wsf.common.ResourceLoaderAdapter;
+import org.jboss.wsf.spi.SPIProvider;
+import org.jboss.wsf.spi.SPIProviderResolver;
+import org.jboss.wsf.spi.deployment.UnifiedVirtualFile;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedCallPropertyMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainsMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedInitParamMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedPortComponentRefMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedStubPropertyMetaData;
+import org.jboss.wsf.spi.serviceref.ServiceRefHandler;
+import org.jboss.wsf.spi.serviceref.ServiceRefHandlerFactory;
+
+/**
+ * Service reference resource provider.
+ *
+ * Conventions used in this source code are:
+ * <ul>
+ * <li>SBMD - switch board meta data</li>
+ * <li>UMDM - jbossws unified meta data model</li>
+ * </ul>
+ *
+ * @author alessio.soldano at jboss.com
+ * @author <a href="mailto:ropalka at redhat.com">Richard Opalka</a>
+ */
+public final class ServiceRefResourceProvider implements MCBasedResourceProvider<ServiceRefType>
+{
+
+ private static final Logger log = Logger.getLogger(ServiceRefResourceProvider.class);
+
+ private ServiceRefHandler delegate;
+
+ /**
+ * Constructor.
+ */
+ public ServiceRefResourceProvider()
+ {
+ final SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
+ this.delegate = spiProvider.getSPI(ServiceRefHandlerFactory.class).getServiceRefHandler();
+ }
+
+ /**
+ * Provides service ref resource.
+ */
+ @Override
+ public Resource provide(final DeploymentUnit deploymentUnit, final ServiceRefType serviceRefSBMD)
+ {
+ final UnifiedVirtualFile vfsRoot = this.getUnifiedVirtualFile(deploymentUnit);
+ final UnifiedServiceRefMetaData serviceRefUMDM = this.getUnifiedServiceRefMetaData(vfsRoot, serviceRefSBMD);
+ final Referenceable jndiReferenceable = this.delegate.createReferenceable(serviceRefUMDM);
+
+ return new ServiceRefResource(jndiReferenceable);
+ }
+
+ /**
+ * Inform about type this resource handler can handle.
+ *
+ * @return handled type
+ */
+ @Override
+ public Class<ServiceRefType> getEnvironmentEntryType()
+ {
+ return ServiceRefType.class;
+ }
+
+ /**
+ * Constructs vfs root from deployment unit.
+ *
+ * @param deploymentUnit
+ * @return vfs root
+ */
+ private UnifiedVirtualFile getUnifiedVirtualFile(final DeploymentUnit deploymentUnit)
+ {
+ if (deploymentUnit instanceof VFSDeploymentUnit)
+ {
+ return new VirtualFileAdaptor(((VFSDeploymentUnit) deploymentUnit).getRoot());
+ }
+ else
+ {
+ return new ResourceLoaderAdapter(deploymentUnit.getClassLoader());
+ }
+ }
+
+ /**
+ * Translates service ref switchboard meta data to JBossWS unified service ref meta data.
+ *
+ * @param vfsRoot virtual file system root
+ * @param serviceRefSBMD service reference switchboard meta data
+ * @return unified jbossws service reference meta data
+ */
+ private UnifiedServiceRefMetaData getUnifiedServiceRefMetaData(final UnifiedVirtualFile vfsRoot,
+ final ServiceRefType serviceRefSBMD)
+ {
+ final UnifiedServiceRefMetaData serviceRefUMDM = new UnifiedServiceRefMetaData(vfsRoot);
+ serviceRefUMDM.setServiceRefName(serviceRefSBMD.getServiceRefName());
+ serviceRefUMDM.setServiceRefType(serviceRefSBMD.getType());
+ serviceRefUMDM.setServiceInterface(serviceRefSBMD.getServiceInterface());
+ serviceRefUMDM.setWsdlFile(serviceRefSBMD.getWsdlFile());
+ serviceRefUMDM.setMappingFile(serviceRefSBMD.getMappingFile());
+ serviceRefUMDM.setServiceQName(serviceRefSBMD.getQName());
+ serviceRefUMDM.setHandlerChain(serviceRefSBMD.getHandlerChain());
+
+ // propagate addressing properties
+ serviceRefUMDM.setAddressingEnabled(serviceRefSBMD.isAddressingEnabled());
+ serviceRefUMDM.setAddressingRequired(serviceRefSBMD.isAddressingRequired());
+ serviceRefUMDM.setAddressingResponses(serviceRefSBMD.getAddressingResponses());
+
+ // propagate MTOM properties
+ serviceRefUMDM.setMtomEnabled(serviceRefSBMD.isMtomEnabled());
+ serviceRefUMDM.setMtomThreshold(serviceRefSBMD.getMtomThreshold());
+
+ // propagate respect binding properties
+ serviceRefUMDM.setRespectBindingEnabled(serviceRefSBMD.isRespectBindingEnabled());
+
+ // propagate port compoments
+ final Collection<? extends PortComponent> portComponentsSBMD = serviceRefSBMD.getPortComponents();
+ if (portComponentsSBMD != null)
+ {
+ for (final PortComponent portComponentSBMD : portComponentsSBMD)
+ {
+ final UnifiedPortComponentRefMetaData portComponentUMDM = this.getUnifiedPortComponentRefMetaData(
+ serviceRefUMDM, portComponentSBMD);
+ if (portComponentUMDM.getServiceEndpointInterface() != null || portComponentUMDM.getPortQName() != null)
+ {
+ serviceRefUMDM.addPortComponentRef(portComponentUMDM);
+ }
+ else
+ {
+ log.warn("Ignoring <port-component-ref> without <service-endpoint-interface> and <port-qname>: "
+ + portComponentUMDM);
+ }
+ }
+ }
+
+ // propagate handlers
+ final Collection<Handler> handlersSBMD = serviceRefSBMD.getHandlers();
+ if (handlersSBMD != null)
+ {
+ for (final Handler handlerSBMD : handlersSBMD)
+ {
+ final UnifiedHandlerMetaData handlerUMDM = this.getUnifiedHandlerMetaData(handlerSBMD);
+ serviceRefUMDM.addHandler(handlerUMDM);
+ }
+ }
+
+ // propagate handler chains
+ final List<HandlerChainType> handlerChainsSBMD = serviceRefSBMD.getHandlerChains();
+ if (handlerChainsSBMD != null)
+ {
+ final UnifiedHandlerChainsMetaData handlerChainsUMDM = this.getUnifiedHandlerChainsMetaData(handlerChainsSBMD);
+ serviceRefUMDM.setHandlerChains(handlerChainsUMDM);
+ }
+
+ // propagate jboss specific MD
+ if (serviceRefSBMD instanceof JBossServiceRefType)
+ {
+ this.processUnifiedJBossServiceRefMetaData(serviceRefUMDM, serviceRefSBMD);
+ }
+
+ return serviceRefUMDM;
+ }
+
+ /**
+ * Translates jboss service ref switchboard meta data to JBossWS unified service ref meta data.
+ *
+ * @param serviceRefUMDM service reference unified meta data
+ * @param serviceRefSBMD service reference switchboard meta data
+ */
+ private void processUnifiedJBossServiceRefMetaData(final UnifiedServiceRefMetaData serviceRefUMDM,
+ final ServiceRefType serviceRefSBMD)
+ {
+ final JBossServiceRefType jbossServiceRefSBMD = (JBossServiceRefType) serviceRefSBMD;
+ serviceRefUMDM.setServiceImplClass(jbossServiceRefSBMD.getServiceClass());
+ serviceRefUMDM.setConfigName(jbossServiceRefSBMD.getConfigName());
+ serviceRefUMDM.setConfigFile(jbossServiceRefSBMD.getConfigFile());
+ serviceRefUMDM.setWsdlOverride(jbossServiceRefSBMD.getWsdlOverride());
+ serviceRefUMDM.setHandlerChain(jbossServiceRefSBMD.getHandlerChain());
+ }
+
+ /**
+ * Translates handler chains switchboard meta data to JBossWS unified handler chains meta data.
+ *
+ * @param handlerChainsSBMD handler chains switchboard meta data
+ * @return handler chains JBossWS unified meta data
+ */
+ private UnifiedHandlerChainsMetaData getUnifiedHandlerChainsMetaData(final List<HandlerChainType> handlerChainsSBMD)
+ {
+ final UnifiedHandlerChainsMetaData handlerChainsUMDM = new UnifiedHandlerChainsMetaData();
+
+ for (final HandlerChainType handlerChainSBMD : handlerChainsSBMD)
+ {
+ final UnifiedHandlerChainMetaData handlerChainUMDM = new UnifiedHandlerChainMetaData();
+ handlerChainUMDM.setServiceNamePattern(handlerChainSBMD.getServiceNamePattern());
+ handlerChainUMDM.setPortNamePattern(handlerChainSBMD.getPortNamePattern());
+ handlerChainUMDM.setProtocolBindings(handlerChainSBMD.getProtocolBindings());
+
+ final List<Handler> handlersSBMD = handlerChainSBMD.getHandlers();
+ for (final Handler handlerSBMD : handlersSBMD)
+ {
+ final UnifiedHandlerMetaData handlerUMDM = getUnifiedHandlerMetaData(handlerSBMD);
+ handlerChainUMDM.addHandler(handlerUMDM);
+ }
+
+ handlerChainsUMDM.addHandlerChain(handlerChainUMDM);
+ }
+
+ return handlerChainsUMDM;
+ }
+
+ /**
+ * Translates handler switchboard meta data to JBossWS unified handler meta data.
+ *
+ * @param handlerSBMD handler switchboard meta data
+ * @return handler JBossWS unified meta data
+ */
+ private UnifiedHandlerMetaData getUnifiedHandlerMetaData(final Handler handlerSBMD)
+ {
+ final UnifiedHandlerMetaData handlerUMDM = new UnifiedHandlerMetaData();
+ handlerUMDM.setHandlerName(handlerSBMD.getHandlerName());
+ handlerUMDM.setHandlerClass(handlerSBMD.getHandlerClass());
+
+ // translate handler init params
+ final Map<String, String> handlerInitParamsSBMD = handlerSBMD.getInitParams();
+ if (handlerInitParamsSBMD != null)
+ {
+ for (final String initParamName : handlerInitParamsSBMD.keySet())
+ {
+ final UnifiedInitParamMetaData handlerInitParamUMDM = new UnifiedInitParamMetaData();
+ handlerInitParamUMDM.setParamName(initParamName);
+ handlerInitParamUMDM.setParamValue(handlerInitParamsSBMD.get(initParamName));
+ handlerUMDM.addInitParam(handlerInitParamUMDM);
+ }
+ }
+
+ // translate handler soap headers
+ final Collection<QName> handlerSoapHeadersSBDM = handlerSBMD.getSoapHeaders();
+ if (handlerSoapHeadersSBDM != null)
+ {
+ for (final QName soapHeader : handlerSoapHeadersSBDM)
+ {
+ handlerUMDM.addSoapHeader(soapHeader);
+ }
+ }
+
+ // translate handler soap roles
+ final Collection<String> handlerSoapRolesSBMD = handlerSBMD.getSoapRoles();
+ if (handlerSoapRolesSBMD != null)
+ {
+ for (final String soapRole : handlerSoapRolesSBMD)
+ {
+ handlerUMDM.addSoapRole(soapRole);
+ }
+ }
+
+ // translate handler port names
+ final Collection<String> handlerPortNamesSBMD = handlerSBMD.getPortNames();
+ if (handlerPortNamesSBMD != null)
+ {
+ for (final String portName : handlerPortNamesSBMD)
+ {
+ handlerUMDM.addPortName(portName);
+ }
+ }
+
+ return handlerUMDM;
+ }
+
+ /**
+ * Translates port component ref switchboard meta data to JBossWS unified port component ref meta data.
+ *
+ * @param serviceRefUMDM service ref unified meta data
+ * @param portComponentSBMD port component ref switchboard meta data
+ * @return port component ref unified meta data
+ */
+ private UnifiedPortComponentRefMetaData getUnifiedPortComponentRefMetaData(
+ final UnifiedServiceRefMetaData serviceRefUMDM, final PortComponent portComponentSBMD)
+ {
+ final UnifiedPortComponentRefMetaData portComponentUMDM = new UnifiedPortComponentRefMetaData(serviceRefUMDM);
+
+ // propagate service endpoint interface
+ portComponentUMDM.setServiceEndpointInterface(portComponentSBMD.getEndpointInterface());
+
+ // propagate MTOM properties
+ portComponentUMDM.setMtomEnabled(portComponentSBMD.isMtomEnabled());
+ portComponentUMDM.setMtomThreshold(portComponentSBMD.getMtomThreshold());
+
+ // propagate addressing properties
+ final Addressing addressingSBMD = portComponentSBMD.getAddressing();
+ if (addressingSBMD != null)
+ {
+ portComponentUMDM.setAddressingEnabled(addressingSBMD.isEnabled());
+ portComponentUMDM.setAddressingRequired(addressingSBMD.isRequired());
+ portComponentUMDM.setAddressingResponses(addressingSBMD.getResponses());
+ }
+
+ // propagate respect binding properties
+ portComponentUMDM.setRespectBindingEnabled(portComponentSBMD.isRespectBindingEnabled());
+
+ // propagate link
+ portComponentUMDM.setPortComponentLink(portComponentSBMD.getLink());
+
+ // propagate jboss specific MD
+ if (portComponentSBMD instanceof JBossPortComponentRefType)
+ {
+ this.processUnifiedJBossPortComponentRefMetaData(portComponentUMDM, portComponentSBMD);
+ }
+
+ return portComponentUMDM;
+ }
+
+ /**
+ * Translates jboss port component ref switchboard meta data to JBossWS unified port component ref meta data.
+ *
+ * @param portComponentUMDM port component unified meta data
+ * @param portComponentSBMD port component switchboard meta data
+ */
+ private void processUnifiedJBossPortComponentRefMetaData(final UnifiedPortComponentRefMetaData portComponentUMDM,
+ final PortComponent portComponentSBMD)
+ {
+ final JBossPortComponentRefType jbossPortComponentSBMD = (JBossPortComponentRefType) portComponentSBMD;
+
+ // propagate port QName
+ portComponentUMDM.setPortQName(jbossPortComponentSBMD.getPortQName());
+
+ // propagate configuration properties
+ portComponentUMDM.setConfigName(jbossPortComponentSBMD.getConfigName());
+ portComponentUMDM.setConfigFile(jbossPortComponentSBMD.getConfigFile());
+
+ // propagate stub properties
+ final Map<String, String> stubPropertiesSBMD = jbossPortComponentSBMD.getStubProperties();
+ if (stubPropertiesSBMD != null)
+ {
+ for (final String propertyName : stubPropertiesSBMD.keySet())
+ {
+ final UnifiedStubPropertyMetaData stubPropertyUMDM = new UnifiedStubPropertyMetaData();
+ stubPropertyUMDM.setPropName(propertyName);
+ stubPropertyUMDM.setPropValue(stubPropertiesSBMD.get(propertyName));
+ portComponentUMDM.addStubProperty(stubPropertyUMDM);
+ }
+ }
+
+ // propagate call properties
+ final Map<String, String> callPropertiesSBMD = jbossPortComponentSBMD.getCallProperties();
+ if (callPropertiesSBMD != null)
+ {
+ for (final String propertyName : callPropertiesSBMD.keySet())
+ {
+ final UnifiedCallPropertyMetaData callPropertyUMDM = new UnifiedCallPropertyMetaData();
+ callPropertyUMDM.setPropName(propertyName);
+ callPropertyUMDM.setPropValue(callPropertiesSBMD.get(propertyName));
+ portComponentUMDM.addCallProperty(callPropertyUMDM);
+ }
+ }
+ }
+
+ /**
+ * Switchboard service ref resource.
+ */
+ private static final class ServiceRefResource implements Resource
+ {
+ private final Referenceable target;
+
+ private ServiceRefResource(final Referenceable target)
+ {
+ this.target = target;
+ }
+
+ @Override
+ public Object getDependency()
+ {
+ return null;
+ }
+
+ @Override
+ public Object getTarget()
+ {
+ return this.target;
+ }
+ }
+}
More information about the jboss-cvs-commits
mailing list