[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