[jbossws-commits] JBossWS SVN: r1468 - in trunk/src/main/java/org/jboss/ws: deployment integration/jboss50 integration/tomcat jaxrpc jaxws/spi metadata metadata/builder metadata/builder/jaxrpc metadata/builder/jaxws server

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Sun Nov 19 23:58:31 EST 2006


Author: jason.greene at jboss.com
Date: 2006-11-19 23:58:20 -0500 (Sun, 19 Nov 2006)
New Revision: 1468

Added:
   trunk/src/main/java/org/jboss/ws/metadata/builder/
   trunk/src/main/java/org/jboss/ws/metadata/builder/JAXWSMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientDeployment.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCDeployment.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCServerMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientEndpointMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSEndpointMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB21.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB3.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderJSE.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSProviderMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSServerMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java
Removed:
   trunk/src/main/java/org/jboss/ws/deployment/AnnotationsMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JAXWSProviderMetaDataBuilderJSE.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientDeployment.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR109Deployment.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR181Deployment.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB21.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB3.java
   trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderJSE.java
   trunk/src/main/java/org/jboss/ws/deployment/MetaDataBuilder.java
Modified:
   trunk/src/main/java/org/jboss/ws/deployment/JAXWSDeployment.java
   trunk/src/main/java/org/jboss/ws/deployment/ServiceEndpointDeployer.java
   trunk/src/main/java/org/jboss/ws/deployment/UnifiedDeploymentInfo.java
   trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXRPCDeployerJSE.java
   trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerEJB3.java
   trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerJSE.java
   trunk/src/main/java/org/jboss/ws/integration/jboss50/ServiceRefHandler.java
   trunk/src/main/java/org/jboss/ws/integration/tomcat/TomcatServiceEndpointServlet.java
   trunk/src/main/java/org/jboss/ws/jaxrpc/ServiceImpl.java
   trunk/src/main/java/org/jboss/ws/jaxws/spi/ServiceDelegateImpl.java
   trunk/src/main/java/org/jboss/ws/server/ServiceEndpointInfo.java
Log:
Refactor metadata builders to support JBCTS-414
Take steps towards a clean SPI


Deleted: trunk/src/main/java/org/jboss/ws/deployment/AnnotationsMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/AnnotationsMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/AnnotationsMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,135 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-// $Id:AnnotationsMetaDataBuilder.java 732 2006-08-12 18:40:21Z thomas.diesler at jboss.com $
-
-import javax.xml.ws.BindingType;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.annotation.PortComponent;
-import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-
-/** An abstract annotation meta data builder.
- *
- * @author Thomas.Diesler at jboss.org
- * @since 27-Jun-2005
- */
-public abstract class AnnotationsMetaDataBuilder extends MetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(AnnotationsMetaDataBuilder.class);
-
-   public AnnotationsMetaDataBuilder()
-   {
-   }
-
-   protected void processBindingType(EndpointMetaData epMetaData, Class wsClass)
-   {
-      BindingType anBindingType = (BindingType)wsClass.getAnnotation(BindingType.class);
-      String uri = anBindingType.value();
-      if (uri.length() > 0)
-      {
-         epMetaData.setBindingId(uri);
-      }
-   }
-
-   protected void processPortComponent(UnifiedDeploymentInfo udi, Class wsClass, String linkName, ServerEndpointMetaData sepMetaData)
-   {
-      PortComponent anPortComponent = (PortComponent)wsClass.getAnnotation(PortComponent.class);
-      if (anPortComponent != null)
-      {
-         // setup config name
-         if (anPortComponent.configName().length() > 0)
-         {
-            String configName = anPortComponent.configName();
-            sepMetaData.setConfigName(configName);
-         }
-
-         // setup config file
-         if (anPortComponent.configFile().length() > 0)
-         {
-            String configFile = anPortComponent.configFile();
-            sepMetaData.setConfigFile(configFile);
-         }
-
-         boolean isJSEEndpoint = udi.type == DeploymentType.JSR181_JSE || udi.type == DeploymentType.JAXWS_PROVIDER_JSE;
-
-         // context-root
-         if (anPortComponent.contextRoot().length() > 0)
-         {
-            if (isJSEEndpoint)
-               log.warn("@PortComponent.contextRoot is only valid on EJB endpoints");
-
-            if (isJSEEndpoint == false)
-            {
-               String contextRoot = anPortComponent.contextRoot();
-               if (contextRoot.startsWith("/") == false)
-                  contextRoot = "/" + contextRoot;
-               
-               sepMetaData.setContextRoot(contextRoot);
-            }
-         }
-
-         // url-pattern
-         if (anPortComponent.urlPattern().length() > 0)
-         {
-            if (isJSEEndpoint)
-               log.warn("@PortComponent.urlPattern is only valid on EJB endpoints");
-
-            if (isJSEEndpoint == false)
-            {
-               String urlPattern = anPortComponent.urlPattern();
-               sepMetaData.setURLPattern(urlPattern);
-            }
-         }
-
-         // auth-method
-         if (anPortComponent.authMethod().length() > 0)
-         {
-            if (isJSEEndpoint)
-               log.warn("@PortComponent.authMethod is only valid on EJB endpoints");
-            
-            if (isJSEEndpoint == false)
-            {
-               String authMethod = anPortComponent.authMethod();
-               sepMetaData.setAuthMethod(authMethod);
-            }
-         }
-
-         // transport-guarantee
-         if (anPortComponent.transportGuarantee().length() > 0)
-         {
-            if (isJSEEndpoint)
-               log.warn("@PortComponent.transportGuarantee is only valid on EJB endpoints");
-
-            if (isJSEEndpoint == false)
-            {
-               String transportGuarantee = anPortComponent.transportGuarantee();
-               sepMetaData.setTransportGuarantee(transportGuarantee);
-            }
-         }
-      }
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,320 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-//$Id$
-
-import java.io.IOException;
-import java.net.URL;
-
-import javax.xml.namespace.QName;
-import javax.xml.rpc.ParameterMode;
-import javax.xml.rpc.encoding.TypeMappingRegistry;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.jaxrpc.Style;
-import org.jboss.ws.jaxrpc.TypeMappingImpl;
-import org.jboss.ws.jaxrpc.TypeMappingRegistryImpl;
-import org.jboss.ws.metadata.ClientEndpointMetaData;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ParameterMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.TypeMappingMetaData;
-import org.jboss.ws.metadata.TypesMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.EndpointMetaData.Type;
-import org.jboss.ws.metadata.wsdl.NCName;
-import org.jboss.ws.metadata.wsdl.WSDLBinding;
-import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
-import org.jboss.ws.metadata.wsdl.WSDLInterface;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationInput;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationOutput;
-import org.jboss.ws.metadata.wsdl.WSDLService;
-import org.jboss.ws.metadata.wsdl.WSDLUtils;
-import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
-
-/**
- * A client side meta data builder.
- *
- * @author Thomas.Diesler at jboss.org
- * @since 19-May-2005
- */
-public class JAXWSClientMetaDataBuilder extends JAXWSMetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JAXWSClientMetaDataBuilder.class);
-
-   /** Build from WSDL and jaxrpc-mapping.xml
-    */
-   public ServiceMetaData buildMetaData(QName serviceName, URL wsdlURL)
-   {
-      if (wsdlURL == null)
-         throw new IllegalArgumentException("Invalid wsdlURL: " + wsdlURL);
-
-      log.debug("START buildMetaData: [service=" + serviceName + "]");
-      try
-      {
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setClassLoader(classLoader);
-
-         ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, serviceName);
-         wsMetaData.addService(serviceMetaData);
-
-         serviceMetaData.setWsdlFile(wsdlURL.toExternalForm());
-         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
-
-         buildMetaDataInternal(serviceMetaData, wsdlDefinitions);
-
-         // Read the WSDL and initialize the schema model
-         // This should only be needed for debuging purposes of the UMDM
-         JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlDefinitions.getWsdlTypes());
-         serviceMetaData.getTypesMetaData().setSchemaModel(schemaModel);
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return serviceMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-
-   private void buildMetaDataInternal(ServiceMetaData serviceMetaData, WSDLDefinitions wsdlDefinitions) throws IOException
-   {
-      QName serviceName = serviceMetaData.getServiceName();
-
-      // Get the WSDL service
-      WSDLService wsdlService = null;
-      if (serviceName == null)
-      {
-         if (wsdlDefinitions.getServices().length != 1)
-            throw new IllegalArgumentException("Expected a single service element");
-
-         wsdlService = wsdlDefinitions.getServices()[0];
-         serviceMetaData.setServiceName(wsdlService.getQName());
-      }
-      else
-      {
-         wsdlService = wsdlDefinitions.getService(new NCName(serviceName.getLocalPart()));
-      }
-      if (wsdlService == null)
-         throw new IllegalArgumentException("Cannot obtain wsdl service: " + serviceName);
-
-      // Build endpoint meta data
-      for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
-      {
-         QName portName = wsdlEndpoint.getQName();
-         QName interfaceQName = wsdlEndpoint.getInterface().getQName();
-         ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, interfaceQName, Type.JAXWS);
-         epMetaData.setEndpointAddress(wsdlEndpoint.getAddress());
-         serviceMetaData.addEndpoint(epMetaData);
-
-         // Init the endpoint binding
-         initEndpointBinding(wsdlEndpoint, epMetaData);
-
-         // Init the service encoding style
-         initEndpointEncodingStyle(epMetaData);
-
-         processEndpointMetaDataExtensions(epMetaData, wsdlDefinitions);
-         setupOperationsFromWSDL(epMetaData, wsdlEndpoint);
-      }
-   }
-
-   protected void setupOperationsFromWSDL(EndpointMetaData epMetaData, WSDLEndpoint wsdlEndpoint)
-   {
-      WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getInterface().getWsdlDefinitions();
-
-      // For every WSDL interface operation build the OperationMetaData
-      WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
-      for (WSDLInterfaceOperation wsdlOperation : wsdlInterface.getOperations())
-      {
-         String opName = wsdlOperation.getName().toString();
-         QName opQName = wsdlOperation.getQName();
-
-         // Set java method name
-         String javaName = opName.substring(0, 1).toLowerCase() + opName.substring(1);
-
-         OperationMetaData opMetaData = new OperationMetaData(epMetaData, opQName, javaName);
-         epMetaData.addOperation(opMetaData);
-
-         // Set the operation style
-         String style = wsdlOperation.getStyle();
-         epMetaData.setStyle((Constants.URI_STYLE_IRI.equals(style) ? Style.DOCUMENT : Style.RPC));
-
-         // Set the operation MEP
-         if (Constants.WSDL20_PATTERN_IN_ONLY.equals(wsdlOperation.getPattern()))
-            opMetaData.setOneWayOperation(true);
-
-         // Set the operation SOAPAction
-         WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getQName());
-         WSDLBindingOperation wsdlBindingOperation = wsdlBinding.getOperationByRef(opQName);
-         if (wsdlBindingOperation != null)
-            opMetaData.setSOAPAction(wsdlBindingOperation.getSOAPAction());
-
-         // Get the type mapping for the encoding style
-         String encStyle = epMetaData.getEncodingStyle().toURI();
-         TypeMappingRegistry tmRegistry = new TypeMappingRegistryImpl();
-         TypeMappingImpl typeMapping = (TypeMappingImpl)tmRegistry.getTypeMapping(encStyle);
-//
-//         // Build the parameter meta data
-//         if (opMetaData.getStyle() == Style.RPC)
-//         {
-//            buildParameterMetaDataRpc(opMetaData, wsdlOperation, typeMapping);
-//         }
-//         else
-//         {
-//            buildParameterMetaDataDoc(opMetaData, wsdlOperation, typeMapping);
-//         }
-//
-//         // Build operation faults
-//         buildFaultMetaData(opMetaData, wsdlOperation);
-
-         // process further operation extensions
-         processOpMetaExtensions(opMetaData, wsdlOperation);
-      }
-   }
-
-   private void buildParameterMetaDataRpc(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, TypeMappingImpl typeMapping)
-   {
-      log.trace("buildParameterMetaDataRpc: " + opMetaData.getQName());
-
-      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
-
-      for (WSDLInterfaceOperationInput opInput : wsdlOperation.getInputs())
-      {
-         QName xmlName = opInput.getElement();
-         QName xmlType = opInput.getXMLType();
-         String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-
-         ParameterMetaData inMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-         opMetaData.addParameter(inMetaData);
-
-         boolean inHeader = opInput.getProperty(Constants.WSDL_PROPERTY_APPLICATION_DATA) != null;
-         inMetaData.setInHeader(inHeader);
-      }
-
-      for (WSDLInterfaceOperationOutput opOutput : wsdlOperation.getOutputs())
-      {
-         String partName = opOutput.getProperty(Constants.WSDL_PROPERTY_PART_NAME).getValue();
-         QName xmlName = opOutput.getElement();
-
-         ParameterMetaData outMetaData = opMetaData.getParameter(xmlName);
-         if (outMetaData != null && wsdlOperation.getInputByPartName(partName) != null)
-         {
-            outMetaData.setMode(ParameterMode.INOUT);
-         }
-         else
-         {
-            QName xmlType = opOutput.getXMLType();
-            String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-
-            boolean inHeader = opOutput.getProperty(Constants.WSDL_PROPERTY_APPLICATION_DATA) != null;
-            boolean hasReturnMapping = (inHeader == false);
-
-            if (hasReturnMapping)
-            {
-               outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-               opMetaData.setReturnParameter(outMetaData);
-            }
-            else
-            {
-               outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-               outMetaData.setMode(ParameterMode.OUT);
-               opMetaData.addParameter(outMetaData);
-
-               outMetaData.setInHeader(inHeader);
-            }
-         }
-      }
-   }
-
-   private void buildParameterMetaDataDoc(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, TypeMappingImpl typeMapping)
-   {
-      log.trace("buildParameterMetaDataDoc: " + opMetaData.getQName());
-
-      EndpointMetaData epMetaData = opMetaData.getEndpointMetaData();
-      ServiceMetaData serviceMetaData = epMetaData.getServiceMetaData();
-      TypesMetaData typesMetaData = serviceMetaData.getTypesMetaData();
-
-      for (WSDLInterfaceOperationInput opInput : wsdlOperation.getInputs())
-      {
-         QName xmlName = opInput.getElement();
-         QName xmlType = opInput.getXMLType();
-         String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-
-         TypeMappingMetaData typeMetaData = typesMetaData.getTypeMappingByXMLType(xmlType);
-         if (typeMetaData != null)
-            javaTypeName = typeMetaData.getJavaTypeName();
-
-         ParameterMetaData inMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-         inMetaData.setInHeader(opInput.getProperty(Constants.WSDL_PROPERTY_APPLICATION_DATA) != null);
-         opMetaData.addParameter(inMetaData);
-      }
-
-      for (WSDLInterfaceOperationOutput opOutput : wsdlOperation.getOutputs())
-      {
-         String partName = opOutput.getProperty(Constants.WSDL_PROPERTY_PART_NAME).getValue();
-         QName xmlName = opOutput.getElement();
-
-         ParameterMetaData paramMetaData = opMetaData.getParameter(xmlName);
-         if (paramMetaData != null && wsdlOperation.getInputByPartName(partName) != null)
-         {
-            paramMetaData.setMode(ParameterMode.INOUT);
-         }
-         else
-         {
-            QName xmlType = opOutput.getXMLType();
-            String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-
-            boolean inHeader = opOutput.getProperty(Constants.WSDL_PROPERTY_APPLICATION_DATA) != null;
-            boolean hasReturnMapping = (inHeader == false);
-
-            if (typesMetaData.getTypeMappingByXMLType(xmlType) != null)
-               javaTypeName = typesMetaData.getTypeMappingByXMLType(xmlType).getJavaTypeName();
-
-            if (hasReturnMapping)
-            {
-               ParameterMetaData retMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-               opMetaData.setReturnParameter(retMetaData);
-            }
-            else
-            {
-               ParameterMetaData outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-               opMetaData.addParameter(outMetaData);
-               outMetaData.setMode(ParameterMode.OUT);
-
-               outMetaData.setInHeader(inHeader);
-            }
-         }
-      }
-   }
-}

Modified: trunk/src/main/java/org/jboss/ws/deployment/JAXWSDeployment.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JAXWSDeployment.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JAXWSDeployment.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -25,14 +25,13 @@
 // $Id$
 
 /**
- * The container independent deployment info. 
+ * The container independent deployment info.
  *
  * @author Thomas.Diesler at jboss.org
  * @since 29-Jun-2006
  */
 public class JAXWSDeployment extends UnifiedDeploymentInfo
 {
-
    public JAXWSDeployment(DeploymentType type)
    {
       super(type);

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,42 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-// $Id$
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-
-/** An abstract annotation meta data builder.
- *
- * @author Thomas.Diesler at jboss.org
- * @since 27-Jun-2006
- */
-public abstract class JAXWSMetaDataBuilder extends AnnotationsMetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JAXWSMetaDataBuilder.class);
-
-   public JAXWSMetaDataBuilder()
-   {
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JAXWSProviderMetaDataBuilderJSE.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JAXWSProviderMetaDataBuilderJSE.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JAXWSProviderMetaDataBuilderJSE.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,222 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.
- */
-// $Id$
-package org.jboss.ws.deployment;
-
-import java.util.Map;
-
-import javax.jws.WebService;
-import javax.jws.soap.SOAPBinding.ParameterStyle;
-import javax.management.ObjectName;
-import javax.xml.namespace.QName;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.transform.Source;
-import javax.xml.ws.Provider;
-import javax.xml.ws.ServiceMode;
-import javax.xml.ws.WebServiceException;
-import javax.xml.ws.WebServiceProvider;
-import javax.xml.ws.Service.Mode;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.jaxrpc.Style;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ParameterMetaData;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.EndpointMetaData.Type;
-import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
-import org.jboss.ws.metadata.wsdl.WSDLUtils;
-import org.jboss.ws.utils.JavaUtils;
-
-/**
- * A server side meta data builder that is based on JSR-181 annotations
- *
- * @author Thomas.Diesler at jboss.org
- * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
- * @since 23-Jul-2005
- */
-public class JAXWSProviderMetaDataBuilderJSE extends JAXWSMetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JAXWSProviderMetaDataBuilderJSE.class);
-
-   /** Build from annotations
-    */
-   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
-   {
-      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
-      try
-      {
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setDeploymentName(udi.getCanonicalName());
-         wsMetaData.setClassLoader(classLoader);
-
-         if (udi.classLoader == null)
-            throw new WSException("Deployment class loader not initialized");
-
-         // For every bean
-         UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
-         Map<String, String> servletClassMap = webMetaData.getServletClassNames();
-         for (String servletName : servletClassMap.keySet())
-         {
-            String servletClassName = servletClassMap.get(servletName);
-            try
-            {
-               Class beanClass = udi.classLoader.loadClass(servletClassName);
-               if (beanClass.isAnnotationPresent(WebServiceProvider.class))
-               {
-                  setupEndpointFromAnnotations(wsMetaData, udi, beanClass, servletName);
-               }
-            }
-            catch (ClassNotFoundException ex)
-            {
-               log.warn("Cannot load service endpoint class: " + servletClassName);
-            }
-         }
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return wsMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-
-   private ServerEndpointMetaData setupEndpointFromAnnotations(UnifiedMetaData wsMetaData, UnifiedDeploymentInfo udi, Class sepClass, String linkName)
-         throws ClassNotFoundException, SecurityException, NoSuchMethodException
-   {
-      // 5.3 Conformance (Provider implementation): A Provider based service endpoint implementation MUST
-      // implement a typed Provider interface.
-      if (JavaUtils.isAssignableFrom(Provider.class, sepClass) == false)
-         throw new WebServiceException("Endpoint implementation does not implement javax.xml.ws.Provider: " + sepClass.getName());
-
-      // 5.4 Conformance (WebServiceProvider annotation): A Provider based service endpoint implementation
-      // MUST carry a WebServiceProvider annotation
-      WebServiceProvider anWebServiceProvider = (WebServiceProvider)sepClass.getAnnotation(WebServiceProvider.class);
-      if (anWebServiceProvider == null)
-         throw new WebServiceException("Cannot obtain @WebServiceProvider annotation from: " + sepClass.getName());
-
-      // 7.3 Conformance (WebServiceProvider and WebService): A class annotated with the WebServiceProvider
-      // annotation MUST NOT carry a WebService annotation
-      if (sepClass.isAnnotationPresent(WebService.class))
-         throw new WebServiceException("Provider cannot carry @WebService annotation: " + sepClass.getName());
-
-      WSDLUtils wsdlUtils = WSDLUtils.getInstance();
-
-      String name = wsdlUtils.getJustClassName(sepClass);
-
-      String serviceName = anWebServiceProvider.serviceName();
-      if (serviceName.length() == 0)
-         serviceName = name + "Service";
-
-      String targetNS = anWebServiceProvider.targetNamespace();
-      if (targetNS.length() == 0)
-         targetNS = wsdlUtils.getTypeNamespace(sepClass);
-
-      String portName = anWebServiceProvider.portName();
-      if (portName.length() == 0)
-         portName = name + "Port";
-
-      ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, new QName(targetNS, serviceName));
-      wsMetaData.addService(serviceMetaData);
-
-      // Setup the ServerEndpointMetaData
-      QName portQName = new QName(targetNS, portName);
-      QName portTypeQName = new QName(targetNS, name);
-      ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portQName, portTypeQName, Type.JAXWS);
-      sepMetaData.setLinkName(linkName);
-
-      sepMetaData.setStyle(Style.DOCUMENT);
-      sepMetaData.setParameterStyle(ParameterStyle.BARE);
-
-      sepMetaData.setServiceEndpointImplName(sepClass.getName());
-      sepMetaData.setServiceEndpointInterfaceName(sepClass.getName());
-
-      ServiceMode anServiceMode = (ServiceMode)sepClass.getAnnotation(ServiceMode.class);
-      if (anServiceMode != null)
-         sepMetaData.setServiceMode(anServiceMode.value());
-      else sepMetaData.setServiceMode(Mode.PAYLOAD);
-
-      serviceMetaData.addEndpoint(sepMetaData);
-
-      // Process invoke method
-      processInvokeMethod(sepMetaData);
-
-      // Process WSDL
-      String wsdlLocation = anWebServiceProvider.wsdlLocation();
-      if (wsdlLocation != null)
-         serviceMetaData.setWsdlFile(wsdlLocation);
-
-      // Set the endpoint address
-      processPortComponent(udi, sepClass, linkName, sepMetaData);
-
-      // Init the endpoint address
-      initEndpointAddress(udi, sepMetaData, linkName);
-      
-      // replace the SOAP address
-      replaceAddressLocation(sepMetaData);
-      
-      // init service endpoint id
-      ObjectName sepID = getServiceEndpointID(udi, sepMetaData);
-      sepMetaData.setServiceEndpointID(sepID);
-
-      return sepMetaData;
-   }
-
-   @Override
-   protected void replaceAddressLocation(ServerEndpointMetaData epMetaData)
-   {
-      // A provider may not have a WSDL file
-      if (epMetaData.getServiceMetaData().getWsdlFile() != null)
-         super.replaceAddressLocation(epMetaData);
-   }
-
-   private void processInvokeMethod(ServerEndpointMetaData epMetaData) throws SecurityException, NoSuchMethodException
-   {
-      String javaName = "invoke";
-      String targetNS = epMetaData.getQName().getNamespaceURI();
-      OperationMetaData opMetaData = new OperationMetaData(epMetaData, new QName(targetNS, javaName), javaName);
-      epMetaData.addOperation(opMetaData);
-
-      Mode serviceMode = epMetaData.getServiceMode();
-      Class paramType = (serviceMode == Mode.MESSAGE ? SOAPMessage.class : Source.class);
-
-      // Setup invoke param
-      QName xmlName = new QName("invokeParam");
-      QName xmlType = Constants.TYPE_LITERAL_ANYTYPE;
-      ParameterMetaData pmd = new ParameterMetaData(opMetaData, xmlName, xmlType, paramType.getName());
-      opMetaData.addParameter(pmd);
-
-      // Setup invoke return
-      xmlName = new QName("invokeReturn");
-      ParameterMetaData retMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, paramType.getName());
-      opMetaData.setReturnParameter(retMetaData);
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientDeployment.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientDeployment.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientDeployment.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,40 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-
-// $Id: UnifiedDeploymentInfo.java 312 2006-05-11 10:49:22Z thomas.diesler at jboss.com $
-
-/**
- * The container independent deployment info. 
- *
- * @author Thomas.Diesler at jboss.org
- * @since 05-May-2006
- */
-public class JSR109ClientDeployment extends UnifiedDeploymentInfo
-{
-
-   public JSR109ClientDeployment(DeploymentType type)
-   {
-      super(type);
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,259 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-//$Id$
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.namespace.QName;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.metadata.ClientEndpointMetaData;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.EndpointMetaData.Type;
-import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
-import org.jboss.ws.metadata.config.jaxrpc.WSClientConfigJAXRPC;
-import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedServiceRefMetaData;
-import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMappingFactory;
-import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
-import org.jboss.ws.metadata.wsdl.NCName;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
-import org.jboss.ws.metadata.wsdl.WSDLService;
-import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
-import org.jboss.ws.metadata.wsse.WSSecurityConfigurationFactory;
-
-/**
- * A client side meta data builder.
- *
- * @author Thomas.Diesler at jboss.org
- * @since 19-May-2005
- */
-public class JSR109ClientMetaDataBuilder extends JSR109MetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JSR109ClientMetaDataBuilder.class);
-
-   /** Build from WSDL and jaxrpc-mapping.xml
-    */
-   public ServiceMetaData buildMetaData(QName serviceQName, URL wsdlURL, URL mappingURL, URL securityURL, UnifiedServiceRefMetaData serviceRefMetaData)
-   {
-      try
-      {
-         JavaWsdlMapping javaWsdlMapping = null;
-         if (mappingURL != null)
-         {
-            JavaWsdlMappingFactory mappingFactory = JavaWsdlMappingFactory.newInstance();
-            javaWsdlMapping = mappingFactory.parse(mappingURL);
-         }
-
-         WSSecurityConfiguration securityConfig = null;
-         if (securityURL != null)
-         {
-            securityConfig = WSSecurityConfigurationFactory.newInstance().parse(securityURL);
-         }
-
-         return buildMetaData(serviceQName, wsdlURL, javaWsdlMapping, securityConfig, serviceRefMetaData);
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-
-   /** Build from WSDL and jaxrpc-mapping.xml
-    */
-   public ServiceMetaData buildMetaData(QName serviceQName, URL wsdlURL, JavaWsdlMapping javaWsdlMapping, WSSecurityConfiguration securityConfig,
-         UnifiedServiceRefMetaData serviceRefMetaData)
-   {
-      log.debug("START buildMetaData: [service=" + serviceQName + "]");
-      try
-      {
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setClassLoader(classLoader);
-
-         ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, serviceQName);
-         wsMetaData.addService(serviceMetaData);
-
-         serviceMetaData.setWsdlFile(wsdlURL.toExternalForm());
-         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
-
-         URL mappingURL = null;
-         if (javaWsdlMapping != null)
-         {
-            mappingURL = new URL(Constants.NS_JBOSSWS_URI + "/dummy-mapping-url");
-            wsMetaData.addMappingDefinition(mappingURL.toExternalForm(), javaWsdlMapping);
-            serviceMetaData.setJaxrpcMappingFile(mappingURL.toExternalForm());
-         }
-
-         if (securityConfig != null)
-         {
-            serviceMetaData.setSecurityConfiguration(securityConfig);
-            setupSecurity(securityConfig);
-         }
-
-         buildMetaDataInternal(serviceMetaData, wsdlDefinitions, javaWsdlMapping, serviceRefMetaData);
-
-         // eagerly initialize
-         wsMetaData.eagerInitialize();
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return serviceMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-
-   private void buildMetaDataInternal(ServiceMetaData serviceMetaData, WSDLDefinitions wsdlDefinitions, JavaWsdlMapping javaWsdlMapping,
-         UnifiedServiceRefMetaData serviceRefMetaData) throws IOException
-   {
-      QName serviceQName = serviceMetaData.getServiceName();
-
-      // Get the WSDL service
-      WSDLService wsdlService = null;
-      if (serviceQName == null)
-      {
-         if (wsdlDefinitions.getServices().length != 1)
-            throw new IllegalArgumentException("Expected a single service element");
-
-         wsdlService = wsdlDefinitions.getServices()[0];
-         serviceMetaData.setServiceName(wsdlService.getQName());
-      }
-      else
-      {
-         wsdlService = wsdlDefinitions.getService(new NCName(serviceQName.getLocalPart()));
-      }
-      if (wsdlService == null)
-         throw new IllegalArgumentException("Cannot obtain wsdl service: " + serviceQName);
-
-      // Build type mapping meta data
-      setupTypesMetaData(serviceMetaData);
-
-      // Build endpoint meta data
-      for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
-      {
-         QName portName = wsdlEndpoint.getQName();
-         QName interfaceQName = wsdlEndpoint.getInterface().getQName();
-         ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, interfaceQName, Type.JAXRPC);
-         epMetaData.setEndpointAddress(wsdlEndpoint.getAddress());
-         serviceMetaData.addEndpoint(epMetaData);
-
-         // config-name, config-file
-         if (serviceRefMetaData != null)
-         {
-            String configName = serviceRefMetaData.getConfigName();
-            if (configName != null)
-               epMetaData.setConfigName(configName);
-
-            String configFile = serviceRefMetaData.getConfigFile();
-            if (configFile != null)
-               epMetaData.setConfigFile(configFile);
-         }
-
-         // Init the endpoint binding
-         initEndpointBinding(wsdlEndpoint, epMetaData);
-
-         // Init the service encoding style
-         initEndpointEncodingStyle(epMetaData);
-
-         ServiceEndpointInterfaceMapping seiMapping = null;
-         if (javaWsdlMapping != null)
-         {
-            QName portType = wsdlEndpoint.getInterface().getQName();
-            seiMapping = javaWsdlMapping.getServiceEndpointInterfaceMappingByPortType(portType);
-            if (seiMapping != null)
-            {
-               epMetaData.setServiceEndpointInterfaceName(seiMapping.getServiceEndpointInterface());
-            }
-            else
-            {
-               log.warn("Cannot obtain the SEI mapping for: " + portType);
-            }
-         }
-
-         processEndpointMetaDataExtensions(epMetaData, wsdlDefinitions);
-         setupOperationsFromWSDL(epMetaData, wsdlEndpoint, seiMapping);
-         setupHandlers(serviceRefMetaData, portName, epMetaData);
-      }
-   }
-
-   private void setupHandlers(UnifiedServiceRefMetaData serviceRefMetaData, QName portName, EndpointMetaData epMetaData)
-   {
-      // Add pre handlers
-      WSClientConfigJAXRPC jaxrpcConfig = (WSClientConfigJAXRPC)epMetaData.getEndpointConfig();
-      epMetaData.addHandlers(jaxrpcConfig.getHandlers(epMetaData, HandlerType.PRE));
-
-      // Setup the endpoint handlers
-      if (serviceRefMetaData != null)
-      {
-         for (UnifiedHandlerMetaData uhmd : serviceRefMetaData.getHandlers())
-         {
-            Set<String> portNames = uhmd.getPortNames();
-            if (portNames.size() == 0 || portNames.contains(portName.getLocalPart()))
-            {
-               epMetaData.addHandler(uhmd.getHandlerMetaDataJAXRPC(epMetaData, HandlerType.ENDPOINT));
-            }
-         }
-      }
-
-      // Add post handlers
-      epMetaData.addHandlers(jaxrpcConfig.getHandlers(epMetaData, HandlerType.POST));
-   }
-
-   private void setupSecurity(WSSecurityConfiguration securityConfig)
-   {
-      if (securityConfig.getKeyStoreFile() != null)
-      {
-         URL location = classLoader.getResource(securityConfig.getKeyStoreFile());
-         if (location != null)
-            securityConfig.setKeyStoreURL(location);
-      }
-
-      if (securityConfig.getTrustStoreFile() != null)
-      {
-         URL location = classLoader.getResource(securityConfig.getTrustStoreFile());
-         if (location != null)
-            securityConfig.setTrustStoreURL(location);
-      }
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR109Deployment.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109Deployment.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109Deployment.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,74 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-import java.io.InputStream;
-import java.net.URL;
-
-import org.jboss.ws.metadata.jsr109.WebservicesFactory;
-import org.jboss.ws.metadata.jsr109.WebservicesMetaData;
-import org.jboss.xb.binding.ObjectModelFactory;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
-
-// $Id: UnifiedDeploymentInfo.java 312 2006-05-11 10:49:22Z thomas.diesler at jboss.com $
-
-/**
- * The container independent deployment info. 
- *
- * @author Thomas.Diesler at jboss.org
- * @since 05-May-2006
- */
-public class JSR109Deployment extends UnifiedDeploymentInfo
-{
-   private WebservicesMetaData jsr109MetaData;
-
-   public JSR109Deployment(DeploymentType type, URL webservicesURL)
-   {
-      super(type);
-
-      try
-      {
-         // Unmarshall webservices.xml
-         InputStream is = webservicesURL.openStream();
-         try
-         {
-            Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
-            ObjectModelFactory factory = new WebservicesFactory(webservicesURL);
-            jsr109MetaData = (WebservicesMetaData)unmarshaller.unmarshal(is, factory, null);
-         }
-         finally
-         {
-            is.close();
-         }
-      }
-      catch (Exception ex)
-      {
-         throw new RuntimeException(ex);
-      }
-   }
-
-   public WebservicesMetaData getWebservicesMetaData()
-   {
-      return jsr109MetaData;
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109MetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,866 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-//$Id$
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.jws.soap.SOAPBinding.ParameterStyle;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.ParameterMode;
-import javax.xml.rpc.encoding.TypeMappingRegistry;
-import javax.xml.ws.addressing.AddressingConstants;
-
-import org.apache.xerces.xs.XSTypeDefinition;
-import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.addressing.AddressingConstantsImpl;
-import org.jboss.ws.jaxrpc.LiteralTypeMapping;
-import org.jboss.ws.jaxrpc.Style;
-import org.jboss.ws.jaxrpc.TypeMappingImpl;
-import org.jboss.ws.jaxrpc.TypeMappingRegistryImpl;
-import org.jboss.ws.jaxrpc.Use;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ParameterMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.TypeMappingMetaData;
-import org.jboss.ws.metadata.TypesMetaData;
-import org.jboss.ws.metadata.WrappedParameter;
-import org.jboss.ws.metadata.jaxrpcmapping.ExceptionMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.JavaXmlTypeMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.MethodParamPartsMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointMethodMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.VariableMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.WsdlMessageMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.WsdlReturnValueMapping;
-import org.jboss.ws.metadata.wsdl.WSDLBinding;
-import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
-import org.jboss.ws.metadata.wsdl.WSDLBindingOperationInput;
-import org.jboss.ws.metadata.wsdl.WSDLBindingOperationOutput;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
-import org.jboss.ws.metadata.wsdl.WSDLInterface;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationInput;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationOutput;
-import org.jboss.ws.metadata.wsdl.WSDLMIMEPart;
-import org.jboss.ws.metadata.wsdl.WSDLProperty;
-import org.jboss.ws.metadata.wsdl.WSDLRPCPart;
-import org.jboss.ws.metadata.wsdl.WSDLRPCSignatureItem;
-import org.jboss.ws.metadata.wsdl.WSDLSOAPHeader;
-import org.jboss.ws.metadata.wsdl.WSDLTypes;
-import org.jboss.ws.metadata.wsdl.WSDLUtils;
-import org.jboss.ws.metadata.wsdl.WSDLRPCSignatureItem.Direction;
-import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
-import org.jboss.ws.utils.JavaUtils;
-import org.jboss.ws.xop.XOPScanner;
-
-/**
- * A meta data builder that is based on webservices.xml.
- *
- * @author Thomas.Diesler at jboss.org
- * @authoer <a href="mailto:jason.greene at jboss.org">Jason T. Greene</a>
- * @since 19-Oct-2005
- */
-public abstract class JSR109MetaDataBuilder extends MetaDataBuilder
-{
-   // provide logging
-   final Logger log = Logger.getLogger(JSR109MetaDataBuilder.class);
-
-   private AddressingConstants ADDR = new AddressingConstantsImpl();
-
-   protected QName lookupSchemaType(WSDLInterfaceOperation operation, QName element)
-   {
-      WSDLDefinitions wsdlDefinitions = operation.getWsdlInterface().getWsdlDefinitions();
-      WSDLTypes wsdlTypes = wsdlDefinitions.getWsdlTypes();
-      return wsdlTypes.getXMLType(element);
-   }
-
-   protected void setupTypesMetaData(ServiceMetaData serviceMetaData)
-   {
-      WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
-      JavaWsdlMapping javaWsdlMapping = serviceMetaData.getJavaWsdlMapping();
-      TypesMetaData typesMetaData = serviceMetaData.getTypesMetaData();
-
-      // Copy the schema locations to the types meta data
-      if (wsdlDefinitions != null)
-      {
-         WSDLTypes wsdlTypes = wsdlDefinitions.getWsdlTypes();
-         typesMetaData.setSchemaModel(WSDLUtils.getSchemaModel(wsdlTypes));
-      }
-
-      // Copy the type mappings to the types meta data
-      if (javaWsdlMapping != null)
-      {
-         for (JavaXmlTypeMapping xmlTypeMapping : javaWsdlMapping.getJavaXmlTypeMappings())
-         {
-            String javaTypeName = xmlTypeMapping.getJavaType();
-            String qnameScope = xmlTypeMapping.getQnameScope();
-
-            QName xmlType = xmlTypeMapping.getRootTypeQName();
-            QName anonymousXMLType = xmlTypeMapping.getAnonymousTypeQName();
-            if (xmlType == null && anonymousXMLType != null)
-               xmlType = anonymousXMLType;
-
-            String nsURI = xmlType.getNamespaceURI();
-            if (Constants.NS_SCHEMA_XSD.equals(nsURI) == false && Constants.URI_SOAP11_ENC.equals(nsURI) == false)
-            {
-               TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
-               tmMetaData.setQNameScope(qnameScope);
-               typesMetaData.addTypeMapping(tmMetaData);
-            }
-         }
-
-         for (ExceptionMapping exceptionMapping : javaWsdlMapping.getExceptionMappings())
-         {
-            QName xmlType = exceptionMapping.getWsdlMessage();
-            String javaTypeName = exceptionMapping.getExceptionType();
-            TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
-            typesMetaData.addTypeMapping(tmMetaData);
-         }
-      }
-   }
-
-   protected void setupOperationsFromWSDL(EndpointMetaData epMetaData, WSDLEndpoint wsdlEndpoint, ServiceEndpointInterfaceMapping seiMapping)
-   {
-      WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getInterface().getWsdlDefinitions();
-
-      // For every WSDL interface operation build the OperationMetaData
-      WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
-      for (WSDLInterfaceOperation wsdlOperation : wsdlInterface.getOperations())
-      {
-         String opName = wsdlOperation.getName().toString();
-         QName opQName = wsdlOperation.getQName();
-
-         // Set java method name
-         String javaName = opName.substring(0, 1).toLowerCase() + opName.substring(1);
-         ServiceEndpointMethodMapping seiMethodMapping = null;
-         if (seiMapping != null)
-         {
-            epMetaData.setServiceEndpointInterfaceName(seiMapping.getServiceEndpointInterface());
-
-            seiMethodMapping = seiMapping.getServiceEndpointMethodMappingByWsdlOperation(opName);
-            if (seiMethodMapping == null)
-               throw new WSException("Cannot obtain method mapping for: " + opName);
-
-            javaName = seiMethodMapping.getJavaMethodName();
-         }
-
-         OperationMetaData opMetaData = new OperationMetaData(epMetaData, opQName, javaName);
-         epMetaData.addOperation(opMetaData);
-
-         // Set the operation style
-         String style = wsdlOperation.getStyle();
-         epMetaData.setStyle((Constants.URI_STYLE_IRI.equals(style) ? Style.DOCUMENT : Style.RPC));
-
-         // Set the operation MEP
-         if (Constants.WSDL20_PATTERN_IN_ONLY.equals(wsdlOperation.getPattern()))
-            opMetaData.setOneWayOperation(true);
-
-         // Set the operation SOAPAction
-         WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getQName());
-         WSDLBindingOperation wsdlBindingOperation = wsdlBinding.getOperationByRef(opQName);
-         if (wsdlBindingOperation != null)
-            opMetaData.setSOAPAction(wsdlBindingOperation.getSOAPAction());
-
-         // Get the type mapping for the encoding style
-         String encStyle = epMetaData.getEncodingStyle().toURI();
-         TypeMappingRegistry tmRegistry = new TypeMappingRegistryImpl();
-         TypeMappingImpl typeMapping = (TypeMappingImpl)tmRegistry.getTypeMapping(encStyle);
-
-         // Build the parameter meta data
-         if (opMetaData.getStyle() == Style.RPC)
-         {
-            buildParameterMetaDataRpc(opMetaData, wsdlOperation, seiMethodMapping, typeMapping);
-         }
-         else
-         {
-            buildParameterMetaDataDoc(opMetaData, wsdlOperation, seiMethodMapping, typeMapping);
-         }
-
-         // Build operation faults
-         buildFaultMetaData(opMetaData, wsdlOperation);
-
-         // process further operation extensions
-         processOpMetaExtensions(opMetaData, wsdlOperation);
-      }
-   }
-
-   private ParameterMetaData buildInputParameter(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, String partName, QName xmlName, QName xmlType, int pos)
-   {
-      WSDLRPCSignatureItem item = wsdlOperation.getRpcSignatureitem(partName);
-      if (item != null)
-         pos = item.getPosition();
-
-      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-      if (seiMethodMapping != null)
-      {
-         MethodParamPartsMapping paramMapping = seiMethodMapping.getMethodParamPartsMappingByPartName(partName);
-         if (paramMapping == null)
-            throw new WSException("Cannot obtain method parameter mapping for message part '" + partName + "' in wsdl operation: "
-                  + seiMethodMapping.getWsdlOperation());
-
-         javaTypeName = paramMapping.getParamType();
-         pos = paramMapping.getParamPosition();
-      }
-
-      JavaWsdlMapping javaWsdlMapping = opMetaData.getEndpointMetaData().getServiceMetaData().getJavaWsdlMapping();
-      if (javaTypeName == null && javaWsdlMapping != null)
-      {
-         String packageName = javaWsdlMapping.getPackageNameForNamespaceURI(xmlType.getNamespaceURI());
-         if (packageName != null)
-         {
-            javaTypeName = packageName + "." + xmlType.getLocalPart();
-            log.warn("Guess java type from package mapping: [xmlType=" + xmlType + ",javaType=" + javaTypeName + "]");
-         }
-      }
-
-      if (javaTypeName == null)
-         throw new WSException("Cannot obtain java type mapping for: " + xmlType);
-
-      ParameterMetaData inMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-      inMetaData.setPartName(partName);
-      inMetaData.setIndex(pos);
-      opMetaData.addParameter(inMetaData);
-
-      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
-      // In arrays of user types, wscompile does not generate a mapping in jaxrpc-mapping.xml
-      if (typesMetaData.getTypeMappingByXMLType(xmlType) == null)
-      {
-         String nsURI = xmlType.getNamespaceURI();
-         if (Constants.NS_SCHEMA_XSD.equals(nsURI) == false && Constants.URI_SOAP11_ENC.equals(nsURI) == false)
-         {
-            TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
-            typesMetaData.addTypeMapping(tmMetaData);
-         }
-      }
-
-      return inMetaData;
-   }
-
-   private ParameterMetaData buildOutputParameter(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, int pos, String partName, QName xmlName, QName xmlType, TypeMappingImpl typeMapping)
-   {
-      // Default is first listed output
-      boolean hasReturnMapping = opMetaData.getReturnParameter() == null;
-
-      WSDLRPCSignatureItem item = wsdlOperation.getRpcSignatureitem(partName);
-      if (item != null)
-      {
-         hasReturnMapping = item.getDirection() == Direction.RETURN;
-         pos = item.getPosition();
-      }
-
-      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-      if (seiMethodMapping != null)
-      {
-         MethodParamPartsMapping paramMapping = seiMethodMapping.getMethodParamPartsMappingByPartName(partName);
-         if (paramMapping != null)
-         {
-            javaTypeName = paramMapping.getParamType();
-            pos = paramMapping.getParamPosition();
-            hasReturnMapping = false;
-         }
-         else
-         {
-            WsdlReturnValueMapping returnMapping = seiMethodMapping.getWsdlReturnValueMapping();
-            String mappingPart = returnMapping.getWsdlMessagePartName();
-            if (returnMapping != null && mappingPart != null && partName.equals(mappingPart));
-            {
-               javaTypeName = returnMapping.getMethodReturnValue();
-               hasReturnMapping = true;
-            }
-         }
-      }
-
-      JavaWsdlMapping javaWsdlMapping = opMetaData.getEndpointMetaData().getServiceMetaData().getJavaWsdlMapping();
-      if (javaTypeName == null && javaWsdlMapping != null)
-      {
-         String packageName = javaWsdlMapping.getPackageNameForNamespaceURI(xmlType.getNamespaceURI());
-         if (packageName != null)
-         {
-            javaTypeName = packageName + "." + xmlType.getLocalPart();
-            log.warn("Guess java type from package mapping: [xmlType=" + xmlType + ",javaType=" + javaTypeName + "]");
-         }
-      }
-
-      if (javaTypeName == null)
-         throw new WSException("Cannot obtain java type mapping for: " + xmlType);
-
-      ParameterMetaData outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-      outMetaData.setPartName(partName);
-
-      if (hasReturnMapping)
-      {
-         opMetaData.setReturnParameter(outMetaData);
-      }
-      else
-      {
-         outMetaData.setIndex(pos);
-         outMetaData.setMode(ParameterMode.OUT);
-         opMetaData.addParameter(outMetaData);
-      }
-
-      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
-      // In arrays of user types, wscompile does not generate a mapping in jaxrpc-mapping.xml
-      if (typesMetaData.getTypeMappingByXMLType(xmlType) == null)
-      {
-         String nsURI = xmlType.getNamespaceURI();
-         if (Constants.NS_SCHEMA_XSD.equals(nsURI) == false && Constants.URI_SOAP11_ENC.equals(nsURI) == false)
-         {
-            TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
-            typesMetaData.addTypeMapping(tmMetaData);
-         }
-      }
-
-      return outMetaData;
-   }
-
-   private int processBindingParameters(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, WSDLBindingOperation bindingOperation, int wsdlPosition)
-   {
-      WSDLBindingOperationInput bindingInput = bindingOperation.getInputs()[0];
-      for (WSDLSOAPHeader header : bindingInput.getSoapHeaders())
-      {
-         QName xmlName = header.getElement();
-         QName xmlType = lookupSchemaType(wsdlOperation, xmlName);
-         String partName = header.getPartName();
-
-         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++);
-         pmd.setInHeader(true);
-      }
-
-      for (WSDLMIMEPart mimePart : bindingInput.getMimeParts())
-      {
-         String partName = mimePart.getPartName();
-         QName xmlName = new QName(partName);
-         QName xmlType = mimePart.getXmlType();
-
-         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++);
-         pmd.setSwA(true);
-         pmd.setMimeTypes(mimePart.getMimeTypes());
-      }
-
-      return wsdlPosition;
-   }
-
-   private int processBindingOutputParameters(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, WSDLBindingOperation bindingOperation, int wsdlPosition)
-   {
-      WSDLBindingOperationOutput bindingOutput = bindingOperation.getOutputs()[0];
-      for (WSDLSOAPHeader header : bindingOutput.getSoapHeaders())
-      {
-         String partName = header.getPartName();
-         QName xmlName = header.getElement();
-
-         ParameterMetaData outMetaData = opMetaData.getParameter(xmlName);
-         if (outMetaData != null)
-         {
-            outMetaData.setMode(ParameterMode.INOUT);
-         }
-         else
-         {
-            QName xmlType = lookupSchemaType(wsdlOperation, xmlName);
-
-            ParameterMetaData pmd = buildOutputParameter(opMetaData, wsdlOperation, seiMethodMapping, wsdlPosition, partName, xmlName, xmlType, typeMapping);
-            pmd.setInHeader(true);
-
-            if (opMetaData.getReturnParameter() != pmd)
-               wsdlPosition++;
-         }
-      }
-
-      for (WSDLMIMEPart mimePart : bindingOutput.getMimeParts())
-      {
-         String partName = mimePart.getPartName();
-         QName xmlName = new QName(partName);
-
-         ParameterMetaData outMetaData = opMetaData.getParameter(xmlName);
-         if (outMetaData != null)
-         {
-            outMetaData.setMode(ParameterMode.INOUT);
-         }
-         else
-         {
-            QName xmlType = mimePart.getXmlType();
-
-            ParameterMetaData pmd = buildOutputParameter(opMetaData, wsdlOperation, seiMethodMapping, wsdlPosition, partName, xmlName, xmlType, typeMapping);
-            pmd.setSwA(true);
-            pmd.setMimeTypes(mimePart.getMimeTypes());
-
-            if (opMetaData.getReturnParameter() != pmd)
-               wsdlPosition++;
-         }
-      }
-
-      return wsdlPosition;
-   }
-
-   /* SOAP-ENC:Array
-    *
-    * FIXME: This hack should be removed as soon as we can reliably get the
-    * soapenc:arrayType from wsdl + schema.
-    */
-   private void setupSOAPArrayParameter(ParameterMetaData paramMetaData)
-   {
-      Use use = paramMetaData.getOperationMetaData().getUse();
-      String xmlTypeLocalPart = paramMetaData.getXmlType().getLocalPart();
-      if (use == Use.ENCODED && xmlTypeLocalPart.indexOf("ArrayOf") >= 0)
-      {
-         paramMetaData.setSOAPArrayParam(true);
-         try
-         {
-            String javaTypeName = paramMetaData.getJavaTypeName();
-            // This approach determins the array component type from the javaTypeName.
-            // It will not work for user defined types, nor will the array dimension be
-            // initialized properly. Ideally the array parameter meta data should be initialized
-            // from the XSModel or wherever it is defined in WSDL.
-            Class javaType = JavaUtils.loadJavaType(javaTypeName);
-            Class compJavaType = javaType.getComponentType();
-
-            if (xmlTypeLocalPart.indexOf("ArrayOfArrayOf") >= 0)
-               compJavaType = compJavaType.getComponentType();
-
-            QName compXMLType = new LiteralTypeMapping().getXMLType(compJavaType);
-            paramMetaData.setSOAPArrayCompType(compXMLType);
-         }
-         catch (ClassNotFoundException e)
-         {
-            // ignore that user defined types cannot be loaded yet
-         }
-      }
-   }
-
-   private void setupXOPAttachmentParameter(WSDLInterfaceOperation operation, ParameterMetaData paramMetaData)
-   {
-      QName xmlType = paramMetaData.getXmlType();
-
-      // An XOP parameter is detected if it is a complex type that derives from xsd:base64Binary
-      WSDLTypes wsdlTypes = operation.getWsdlInterface().getWsdlDefinitions().getWsdlTypes();
-      JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlTypes);
-      String localPart = xmlType.getLocalPart() != null ? xmlType.getLocalPart() : "";
-      String ns = xmlType.getNamespaceURI() != null ? xmlType.getNamespaceURI() : "";
-      XSTypeDefinition xsType = schemaModel.getTypeDefinition(localPart, ns);
-      XOPScanner scanner = new XOPScanner();
-      if(scanner.findXOPTypeDef(xsType)!=null | (localPart.equals("base64Binary")&&ns.equals(Constants.NS_SCHEMA_XSD)))
-      {
-         // FIXME: read the xmime:contentType from the element declaration
-         // See SchemaUtils#findXOPTypeDef(XSTypeDefinition typeDef) for details
-
-         /*
-         FIXME: the classloader is not set yet
-         paramMetaData.setXopContentType(
-             MimeUtils.resolveMimeType(paramMetaData.getJavaType())
-         );
-         */
-
-         paramMetaData.setXOP(true);
-
-      }
-   }
-
-   /*
-    * Perhaps the JAX-RPC mapping model should be hash based. For now we optimize just this case.
-    */
-   private Map<String, String> createVariableMappingMap(VariableMapping[] mappings)
-   {
-      HashMap<String, String> map = new HashMap<String, String>();
-      if (mappings != null)
-         for (VariableMapping mapping : mappings)
-            map.put(mapping.getXmlElementName(), mapping.getJavaVariableName());
-
-      return map;
-   }
-
-   private void buildParameterMetaDataRpc(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping,
-         TypeMappingImpl typeMapping)
-   {
-      log.trace("buildParameterMetaDataRpc: " + opMetaData.getQName());
-
-      WSDLBindingOperation bindingOperation = wsdlOperation.getBindingOperation();
-      if (bindingOperation == null)
-         throw new WSException("Could not locate binding operation for:" + opMetaData.getQName());
-
-      // RPC has one input
-      WSDLInterfaceOperationInput input = wsdlOperation.getInputs()[0];
-      int wsdlPosition = 0;
-      for (WSDLRPCPart part : input.getChildParts())
-      {
-         QName xmlType = part.getType();
-         String partName = part.getName();
-         QName xmlName = new QName(partName);
-
-         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++);
-
-         setupXOPAttachmentParameter(wsdlOperation, pmd);
-         setupSOAPArrayParameter(pmd);
-      }
-
-      wsdlPosition = processBindingParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
-
-      WSDLInterfaceOperationOutput[] outputs = wsdlOperation.getOutputs();
-      if (outputs.length > 0)
-      {
-         WSDLInterfaceOperationOutput output = outputs[0];
-         for (WSDLRPCPart part : output.getChildParts())
-         {
-            String partName = part.getName();
-
-            ParameterMetaData outMetaData = opMetaData.getParameter(new QName(partName));
-            if (outMetaData != null)
-            {
-               outMetaData.setMode(ParameterMode.INOUT);
-            }
-            else
-            {
-               QName xmlName = new QName(partName);
-               QName xmlType = part.getType();
-
-               ParameterMetaData pmd = buildOutputParameter(opMetaData, wsdlOperation, seiMethodMapping, wsdlPosition, partName, xmlName, xmlType, typeMapping);
-               if (opMetaData.getReturnParameter() != pmd)
-                  wsdlPosition++;
-
-               setupXOPAttachmentParameter(wsdlOperation, pmd);
-               setupSOAPArrayParameter(pmd);
-            }
-         }
-
-         processBindingOutputParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
-      }
-      else if (wsdlOperation.getPattern() != Constants.WSDL20_PATTERN_IN_ONLY)
-      {
-         throw new WSException("RPC style was missing an output, and was not an IN-ONLY MEP.");
-      }
-   }
-
-   private int processDocElement(OperationMetaData operation, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter> wrappedParameters, List<WrappedParameter> wrappedResponseParameters)
-   {
-      WSDLInterfaceOperationInput input = wsdlOperation.getInputs()[0];
-      int wsdlPosition;
-
-      QName xmlName = input.getElement();
-      QName xmlType = input.getXMLType();
-      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-
-      TypesMetaData typesMetaData = operation.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
-      TypeMappingMetaData typeMetaData = typesMetaData.getTypeMappingByXMLType(xmlType);
-      if (typeMetaData != null)
-         javaTypeName = typeMetaData.getJavaTypeName();
-
-      if (javaTypeName == null)
-         throw new WSException("Cannot obtain java type mapping for: " + xmlType);
-
-      // Check if we need to wrap the parameters
-      boolean isWrapped = isWrapped(seiMethodMapping, javaTypeName);
-      operation.getEndpointMetaData().setParameterStyle(isWrapped ? ParameterStyle.WRAPPED : ParameterStyle.BARE);
-
-      ParameterMetaData inMetaData = new ParameterMetaData(operation, xmlName, xmlType, javaTypeName);
-      operation.addParameter(inMetaData);
-
-
-      // Set the variable names
-      if (inMetaData.getOperationMetaData().isDocumentWrapped())
-      {
-         if (seiMethodMapping == null)
-            throw new IllegalArgumentException("Cannot wrap parameters without SEI method mapping");
-
-         ServiceEndpointInterfaceMapping seiMapping = seiMethodMapping.getServiceEndpointInterfaceMapping();
-         JavaXmlTypeMapping javaXmlTypeMapping = seiMapping.getJavaWsdlMapping().getTypeMappingForQName(xmlType);
-         if (javaXmlTypeMapping == null)
-            throw new WSException("Cannot obtain java/xml type mapping for: " + xmlType);
-
-
-         Map<String, String> variableMap = createVariableMappingMap(javaXmlTypeMapping.getVariableMappings());
-         for (MethodParamPartsMapping partMapping : seiMethodMapping.getMethodParamPartsMappings())
-         {
-            WsdlMessageMapping wsdlMessageMapping = partMapping.getWsdlMessageMapping();
-            if (wsdlMessageMapping == null)
-               throw new IllegalArgumentException("wsdl-message-message mapping required for document/literal wrapped");
-
-            String elementName = wsdlMessageMapping.getWsdlMessagePartName();
-            String variable = variableMap.get(wsdlMessageMapping.getWsdlMessagePartName());
-            if (variable == null)
-               throw new IllegalArgumentException("Could not determine variable name for element: " + elementName);
-
-            WrappedParameter wrapped = new WrappedParameter(new QName(elementName), partMapping.getParamType(), variable,
-                  partMapping.getParamPosition());
-
-
-            String parameterMode = wsdlMessageMapping.getParameterMode();
-            if (parameterMode == null || parameterMode.length() < 2)
-               throw new IllegalArgumentException("Invalid parameter mode for element: " + elementName);
-
-            if (! "OUT".equals(parameterMode))
-               wrappedParameters.add(wrapped);
-            if (! "IN".equals(parameterMode))
-               wrappedResponseParameters.add(wrapped);
-         }
-         inMetaData.setWrappedParameters(wrappedParameters);
-         wsdlPosition = wrappedParameters.size();
-      }
-      else
-      {
-         if (seiMethodMapping != null)
-         {
-            MethodParamPartsMapping part = seiMethodMapping.getMethodParamPartsMappingByPartName(input.getPartName());
-            if (part != null)
-            {
-               inMetaData.setJavaTypeName(part.getParamType());
-               inMetaData.setIndex(part.getParamPosition());
-            }
-         }
-
-         setupXOPAttachmentParameter(wsdlOperation, inMetaData);
-         wsdlPosition = 1;
-      }
-
-      return wsdlPosition;
-   }
-
-   private boolean isWrapped(ServiceEndpointMethodMapping seiMethodMapping, String javaTypeName)
-   {
-      boolean isWrapParameters = (seiMethodMapping != null ? seiMethodMapping.isWrappedElement() : false);
-      log.trace("isWrapParameters based on wrapped-element: " + isWrapParameters);
-      if (isWrapParameters == false && seiMethodMapping != null)
-      {
-
-         MethodParamPartsMapping[] partsMappings = seiMethodMapping.getMethodParamPartsMappings();
-         if (partsMappings.length > 0)
-         {
-            boolean matchingPartFound = false;
-            for (MethodParamPartsMapping partsMapping : partsMappings)
-            {
-               String paramTypeName = partsMapping.getParamType();
-               if (paramTypeName.equals(javaTypeName))
-               {
-                  matchingPartFound = true;
-                  break;
-               }
-               else
-               {
-                  // Check assignability,
-                  // JavaUtils.isAssignableFrom("org.w3c.dom.Element",
-                  // "javax.xml.soap.SOAPElement")
-                  try
-                  {
-                     Class paramType = JavaUtils.loadJavaType(paramTypeName);
-                     Class javaType = JavaUtils.loadJavaType(javaTypeName);
-
-                     // If it is assignable the explict mapping takes presedence
-                     // and we don't wrap
-                     if (JavaUtils.isAssignableFrom(javaType, paramType))
-                     {
-                        // javaTypeName = paramTypeName;
-                        matchingPartFound = true;
-                        break;
-                     }
-                  }
-                  catch (ClassNotFoundException e)
-                  {
-                     // Ignore. For simple types this should work, others should
-                     // be lexically equal
-                     // if it is not wrapped.
-                  }
-               }
-            }
-            // Do we really want to continue to handle invalid mappings?
-            isWrapParameters = (matchingPartFound == false);
-            log.trace("isWrapParameters based on matching parts: " + isWrapParameters);
-         }
-      }
-      return isWrapParameters;
-   }
-
-   private int processOutputDocElement(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation,
-         ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter> wrappedResponseParameters,
-         int wsdlPosition)
-   {
-      WSDLInterfaceOperationOutput opOutput = wsdlOperation.getOutputs()[0];
-      QName xmlName = opOutput.getElement();
-      QName xmlType = opOutput.getXMLType();
-
-      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
-
-      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
-      if (typesMetaData.getTypeMappingByXMLType(xmlType) != null)
-         javaTypeName = typesMetaData.getTypeMappingByXMLType(xmlType).getJavaTypeName();
-
-      if (javaTypeName == null)
-         throw new WSException("Cannot obtain java/xml type mapping for: " + xmlType);
-
-      ParameterMetaData outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-
-      boolean hasReturnMapping = true;
-      if (opMetaData.isDocumentWrapped())
-      {
-         if (seiMethodMapping == null)
-            throw new IllegalArgumentException("Cannot wrap parameters without SEI method mapping");
-
-         WsdlReturnValueMapping returnValueMapping = seiMethodMapping.getWsdlReturnValueMapping();
-         if (returnValueMapping != null)
-         {
-            ServiceEndpointInterfaceMapping seiMapping = seiMethodMapping.getServiceEndpointInterfaceMapping();
-            JavaWsdlMapping javaWsdlMapping = seiMapping.getJavaWsdlMapping();
-            JavaXmlTypeMapping javaXmlTypeMapping = javaWsdlMapping.getTypeMappingForQName(xmlType);
-            if (javaXmlTypeMapping == null)
-               throw new WSException("Cannot obtain java/xml type mapping for: " + xmlType);
-
-            Map<String, String> map = createVariableMappingMap(javaXmlTypeMapping.getVariableMappings());
-            String elementName = returnValueMapping.getWsdlMessagePartName();
-            String variable = map.get(elementName);
-            if (variable == null)
-               throw new IllegalArgumentException("Could not determine variable name for element: " + elementName);
-
-            String wrappedType = returnValueMapping.getMethodReturnValue();
-            QName element = new QName(elementName);
-            WrappedParameter wrappedParameter = new WrappedParameter(element, wrappedType, variable, WrappedParameter.RETURN);
-            wrappedResponseParameters.add(0, wrappedParameter);
-         }
-
-         outMetaData.setWrappedParameters(wrappedResponseParameters);
-      }
-      else
-      {
-         if (seiMethodMapping != null)
-         {
-            MethodParamPartsMapping part = seiMethodMapping.getMethodParamPartsMappingByPartName(opOutput.getPartName());
-            String mode = null;
-            if (part != null)
-            {
-               WsdlMessageMapping wsdlMessageMapping = part.getWsdlMessageMapping();
-               mode = wsdlMessageMapping.getParameterMode();
-            }
-            if ("INOUT".equals(mode))
-            {
-               ParameterMetaData inMetaData = opMetaData.getParameter(xmlName);
-               if (inMetaData != null)
-               {
-                  inMetaData.setMode(ParameterMode.INOUT);
-                  return wsdlPosition;
-               }
-
-               throw new WSException("Could not update IN parameter to be INOUT, as indicated in the mapping: " + opOutput.getPartName());
-            }
-            // It's potentialy possible that an input parameter could exist with the same part name
-            else if ("OUT".equals(mode))
-            {
-               hasReturnMapping = false;
-               javaTypeName = part.getParamType();
-               outMetaData.setIndex(part.getParamPosition());
-               outMetaData.setJavaTypeName(javaTypeName);
-            }
-            else
-            {
-               WsdlReturnValueMapping returnValueMapping = seiMethodMapping.getWsdlReturnValueMapping();
-               if (returnValueMapping != null)
-               {
-                  javaTypeName = returnValueMapping.getMethodReturnValue();
-                  outMetaData.setJavaTypeName(javaTypeName);
-               }
-            }
-         }
-
-         setupXOPAttachmentParameter(wsdlOperation, outMetaData);
-      }
-
-      if (hasReturnMapping)
-      {
-         opMetaData.setReturnParameter(outMetaData);
-      }
-      else
-      {
-         opMetaData.addParameter(outMetaData);
-         outMetaData.setMode(ParameterMode.OUT);
-         wsdlPosition++;
-      }
-
-      return wsdlPosition;
-   }
-
-   private void buildParameterMetaDataDoc(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping,
-         TypeMappingImpl typeMapping)
-   {
-      log.trace("buildParameterMetaDataDoc: " + opMetaData.getQName());
-
-      WSDLBindingOperation bindingOperation = wsdlOperation.getBindingOperation();
-      if (bindingOperation == null)
-         throw new WSException("Could not locate binding operation for:" + bindingOperation);
-
-      List<WrappedParameter> wrappedParameters = new ArrayList<WrappedParameter>();
-      List<WrappedParameter> wrappedResponseParameters = new ArrayList<WrappedParameter>();
-
-      int wsdlPosition = 0;
-      // WS-I BP 1.0 allows document/literal bare to have zero message parts
-      if (wsdlOperation.getInputs().length > 0)
-      {
-         wsdlPosition = processDocElement(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, wrappedParameters, wrappedResponseParameters);
-         wsdlPosition = processBindingParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
-      }
-      else
-      {
-         // Set the default to bare in case there isn't an input object, revisit this
-         opMetaData.getEndpointMetaData().setParameterStyle(ParameterStyle.BARE);
-      }
-
-      if (wsdlOperation.getOutputs().length > 0)
-      {
-         wsdlPosition = processOutputDocElement(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, wrappedResponseParameters, wsdlPosition);
-         wsdlPosition = processBindingOutputParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
-      }
-   }
-
-   /**
-    * Build default action according to the pattern described in
-    * http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/
-    * Section 3.3.2 'Default Action Pattern'<br>
-    * [target namespace]/[port type name]/[input|output name]
-    *
-    * @param wsdlOperation
-    * @return action value
-    */
-   private String buildWsaActionValue(WSDLInterfaceOperation wsdlOperation)
-   {
-      WSDLProperty wsaAction = wsdlOperation.getProperty(Constants.WSDL_ATTRIBUTE_WSA_ACTION.toString());
-      String actionValue = null;
-
-      if (null == wsaAction)
-      {
-
-         String tns = wsdlOperation.getQName().getNamespaceURI();
-         String portTypeName = wsdlOperation.getQName().getLocalPart();
-         WSDLProperty messageName = wsdlOperation.getProperty("http://www.jboss.org/jbossws/messagename/in");
-
-         actionValue = new String(tns + "/" + portTypeName + "/" + messageName.getValue());
-      }
-      else
-      {
-         actionValue = wsaAction.getValue();
-      }
-
-      return actionValue;
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,280 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.
- */
-// $Id$
-package org.jboss.ws.deployment;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.ObjectName;
-import javax.xml.namespace.QName;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.WSException;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.EndpointMetaData.Type;
-import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
-import org.jboss.ws.metadata.config.jaxrpc.WSEndpointConfigJAXRPC;
-import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedEjbPortComponentMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
-import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
-import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
-import org.jboss.ws.metadata.jsr109.PortComponentMetaData;
-import org.jboss.ws.metadata.jsr109.WebserviceDescriptionMetaData;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
-import org.jboss.ws.metadata.wsdl.WSDLService;
-import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
-import org.jboss.ws.utils.DOMUtils;
-import org.w3c.dom.Element;
-
-/**
- * A server side meta data builder that is based on webservices.xml.
- * 
- * @author Thomas.Diesler at jboss.org
- * @since 19-May-2005
- */
-public class JSR109ServerMetaDataBuilder extends JSR109MetaDataBuilder
-{
-   // provide logging
-   final Logger log = Logger.getLogger(JSR109ServerMetaDataBuilder.class);
-
-   /**
-    * Build from webservices.xml
-    */
-   public UnifiedMetaData buildMetaData(JSR109Deployment udi)
-   {
-      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
-      try
-      {
-         // For every webservice-description build the ServiceMetaData
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setDeploymentName(udi.getCanonicalName());
-         wsMetaData.setClassLoader(classLoader);
-
-         WebserviceDescriptionMetaData[] wsDescriptionArr = udi.getWebservicesMetaData().getWebserviceDescriptions();
-         for (WebserviceDescriptionMetaData wsdMetaData : wsDescriptionArr)
-         {
-            ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, null);
-            serviceMetaData.setWebserviceDescriptionName(wsdMetaData.getWebserviceDescriptionName());
-            wsMetaData.addService(serviceMetaData);
-
-            // Unmarshall the WSDL
-            serviceMetaData.setWsdlFile(wsdMetaData.getWsdlFile());
-            WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
-
-            // Unmarshall the jaxrpc-mapping.xml
-            serviceMetaData.setJaxrpcMappingFile(wsdMetaData.getJaxrpcMappingFile());
-            JavaWsdlMapping javaWsdlMapping = serviceMetaData.getJavaWsdlMapping();
-            if (javaWsdlMapping == null)
-               throw new WSException("jaxrpc-mapping-file not configured from webservices.xml");
-
-            // Build type mapping meta data
-            setupTypesMetaData(serviceMetaData);
-
-            // Assign the WS-Security configuration,
-            WSSecurityConfiguration securityConfiguration = getWsSecurityConfiguration(udi);
-            serviceMetaData.setSecurityConfiguration(securityConfiguration);
-
-            // For every port-component build the EndpointMetaData
-            PortComponentMetaData[] pcMetaDataArr = wsdMetaData.getPortComponents();
-            for (PortComponentMetaData pcMetaData : pcMetaDataArr)
-            {
-               QName portName = pcMetaData.getWsdlPort();
-
-               // JBWS-722
-               // <wsdl-port> in webservices.xml should be qualified
-               if (portName.getNamespaceURI().length() == 0)
-               {
-                  String nsURI = wsdlDefinitions.getTargetNamespace();
-                  portName = new QName(nsURI, portName.getLocalPart());
-                  log.warn("Adding wsdl targetNamespace to: " + portName);
-                  pcMetaData.setWsdlPort(portName);
-               }
-
-               WSDLEndpoint wsdlEndpoint = getWsdlEndpoint(wsdlDefinitions, portName);
-               if (wsdlEndpoint == null)
-                  throw new WSException("Cannot find port in wsdl: " + portName);
-
-               // set service name
-               serviceMetaData.setServiceName(wsdlEndpoint.getWsdlService().getQName());
-               QName interfaceQName = wsdlEndpoint.getInterface().getQName();
-
-               ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName, interfaceQName, Type.JAXRPC);
-               sepMetaData.setPortComponentName(pcMetaData.getPortComponentName());
-               String linkName = pcMetaData.getEjbLink() != null ? pcMetaData.getEjbLink() : pcMetaData.getServletLink();
-               sepMetaData.setLinkName(linkName);
-               serviceMetaData.addEndpoint(sepMetaData);
-
-               initEndpointEncodingStyle(sepMetaData);
-
-               initEndpointAddress(udi, sepMetaData, linkName);
-
-               if (udi.metaData instanceof UnifiedApplicationMetaData)
-               {
-                  UnifiedApplicationMetaData apMetaData = (UnifiedApplicationMetaData)udi.metaData;
-                  wsMetaData.setSecurityDomain(apMetaData.getSecurityDomain());
-
-                  // Copy the wsdl publish location from jboss.xml
-                  String wsdName = serviceMetaData.getWebserviceDescriptionName();
-                  String wsdlPublishLocation = apMetaData.getWsdlPublishLocationByName(wsdName);
-                  serviceMetaData.setWsdlPublishLocation(wsdlPublishLocation);
-
-                  // Copy <port-component> meta data
-                  UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)apMetaData.getBeanByEjbName(linkName);
-                  if (beanMetaData == null)
-                     throw new WSException("Cannot obtain UnifiedBeanMetaData for: " + linkName);
-
-                  String configName = apMetaData.getConfigName();
-                  if (configName != null)
-                     sepMetaData.setConfigName(configName);
-
-                  String configFile = apMetaData.getConfigFile();
-                  if (configFile != null)
-                     sepMetaData.setConfigFile(configFile);
-
-                  UnifiedEjbPortComponentMetaData bpcMetaData = beanMetaData.getPortComponent();
-                  if (bpcMetaData != null)
-                  {
-                     if (bpcMetaData.getAuthMethod() != null)
-                     {
-                        String authMethod = bpcMetaData.getAuthMethod();
-                        sepMetaData.setAuthMethod(authMethod);
-                     }
-                     if (bpcMetaData.getTransportGuarantee() != null)
-                     {
-                        String transportGuarantee = bpcMetaData.getTransportGuarantee();
-                        sepMetaData.setTransportGuarantee(transportGuarantee);
-                     }
-
-                     sepMetaData.setURLPattern(bpcMetaData.getURLPattern());
-                  }
-               }
-               else if (udi.metaData instanceof UnifiedWebMetaData)
-               {
-                  UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
-                  wsMetaData.setSecurityDomain(webMetaData.getSecurityDomain());
-
-                  String targetBean = webMetaData.getServletClassNames().get(linkName);
-                  sepMetaData.setServiceEndpointImplName(targetBean);
-
-                  // Copy the wsdl publish location from jboss-web.xml
-                  String wsdName = serviceMetaData.getWebserviceDescriptionName();
-                  String wsdlPublishLocation = webMetaData.getWsdlPublishLocationByName(wsdName);
-                  serviceMetaData.setWsdlPublishLocation(wsdlPublishLocation);
-
-                  String configName = webMetaData.getConfigName();
-                  if (configName != null)
-                     sepMetaData.setConfigName(configName);
-
-                  String configFile = webMetaData.getConfigFile();
-                  if (configFile != null)
-                     sepMetaData.setConfigFile(configFile);
-
-                  initTransportGuaranteeJSE(udi, sepMetaData, linkName);
-               }
-
-               // init service endpoint id
-               ObjectName sepID = getServiceEndpointID(udi, sepMetaData);
-               sepMetaData.setServiceEndpointID(sepID);
-
-               replaceAddressLocation(sepMetaData);
-
-               String seiName = pcMetaData.getServiceEndpointInterface();
-               sepMetaData.setServiceEndpointInterfaceName(seiName);
-
-               ServiceEndpointInterfaceMapping seiMapping = javaWsdlMapping.getServiceEndpointInterfaceMapping(seiName);
-               if (seiMapping == null)
-                  log.warn("Cannot obtain SEI mapping for: " + seiName);
-
-               // process endpoint meta extension
-               processEndpointMetaDataExtensions(sepMetaData, wsdlDefinitions);
-
-               // Setup the endpoint operations
-               setupOperationsFromWSDL(sepMetaData, wsdlEndpoint, seiMapping);
-
-               // Add pre handlers
-               WSEndpointConfigJAXRPC jaxrpcConfig = (WSEndpointConfigJAXRPC)sepMetaData.getEndpointConfig();
-               sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.PRE));
-
-               // Setup the endpoint handlers
-               for (UnifiedHandlerMetaData uhmd : pcMetaData.getHandlers())
-               {
-                  Set<String> portNames = uhmd.getPortNames();
-                  if (portNames.size() == 0 || portNames.contains(portName.getLocalPart()))
-                  {
-                     sepMetaData.addHandler(uhmd.getHandlerMetaDataJAXRPC(sepMetaData, HandlerType.ENDPOINT));
-                  }
-               }
-
-               // Add post handlers
-               sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.POST));
-            }
-         }
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return wsMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-
-   private WSDLEndpoint getWsdlEndpoint(WSDLDefinitions wsdlDefinitions, QName portName)
-   {
-      WSDLEndpoint wsdlEndpoint = null;
-      for (WSDLService wsdlService : wsdlDefinitions.getServices())
-      {
-         WSDLEndpoint auxEndpoint = wsdlService.getEndpoint(portName);
-         if (auxEndpoint != null)
-         {
-            wsdlEndpoint = auxEndpoint;
-            break;
-         }
-      }
-      return wsdlEndpoint;
-   }
-
-   /**
-    * Read the transport guarantee from web.xml
-    */
-   protected void initTransportGuaranteeJSE(UnifiedDeploymentInfo udi, EndpointMetaData epMetaData, String servletLink) throws IOException
-   {
-      UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
-      epMetaData.setTransportGuarantee(getTransportGuarantee(webMetaData, servletLink));
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,89 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.
-*/
-// $Id$
-package org.jboss.ws.deployment;
-
-import javax.jws.HandlerChain;
-import javax.jws.soap.SOAPBinding;
-import javax.xml.ws.BindingType;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
-import org.jboss.ws.metadata.config.jaxws.WSClientConfigJAXWS;
-
-/**
- * A client side meta data builder that is based on JSR-181 annotations
- *
- * @author Thomas.Diesler at jboss.org
- * @since 9-Aug-2006
- */
-public class JSR181ClientMetaDataBuilder extends JSR181MetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JSR181ClientMetaDataBuilder.class);
-
-   public void rebuildEndpointMetaData(EndpointMetaData epMetaData, Class wsClass)
-   {
-      log.debug("START: rebuildMetaData");
-
-      // Clear the java types, etc.
-      resetMetaDataBuilder(epMetaData.getClassLoader());
-
-      // Nuke parameterStyle
-      epMetaData.setParameterStyle(null);
-
-      // Process an optional @BindingType annotation
-      if (wsClass.isAnnotationPresent(BindingType.class))
-         processBindingType(epMetaData, wsClass);
-
-      // Process @SOAPBinding
-      if (wsClass.isAnnotationPresent(SOAPBinding.class))
-         processSOAPBinding(epMetaData, wsClass);
-
-      // Clear handlers
-      epMetaData.clearHandlers();
-
-      // Add pre handlers
-      WSClientConfigJAXWS jaxwsConfig = (WSClientConfigJAXWS)epMetaData.getEndpointConfig();
-      epMetaData.addHandlers(jaxwsConfig.getHandlers(epMetaData, HandlerType.PRE));
-
-      // Process an optional @HandlerChain annotation
-      if (wsClass.isAnnotationPresent(HandlerChain.class))
-         processHandlerChain(epMetaData, wsClass);
-
-      // Add post handlers
-      epMetaData.addHandlers(jaxwsConfig.getHandlers(epMetaData, HandlerType.POST));
-
-      // Process @WebMethod
-      processWebMethods(epMetaData, wsClass, true);
-
-      // Initialize types
-      createJAXBContext(epMetaData);
-      populateXmlTypes(epMetaData);
-
-      // Eager initialization
-      epMetaData.eagerInitialize();
-
-      log.debug("END: rebuildMetaData\n" + epMetaData.getServiceMetaData());
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR181Deployment.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181Deployment.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181Deployment.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,40 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-
-// $Id: UnifiedDeploymentInfo.java 312 2006-05-11 10:49:22Z thomas.diesler at jboss.com $
-
-/**
- * The container independent deployment info. 
- *
- * @author Thomas.Diesler at jboss.org
- * @since 05-May-2006
- */
-public class JSR181Deployment extends UnifiedDeploymentInfo
-{
-
-   public JSR181Deployment(DeploymentType type)
-   {
-      super(type);
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,1008 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-// $Id$
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Writer;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import javax.jws.HandlerChain;
-import javax.jws.Oneway;
-import javax.jws.WebMethod;
-import javax.jws.WebParam;
-import javax.jws.WebResult;
-import javax.jws.WebService;
-import javax.jws.soap.SOAPBinding;
-import javax.jws.soap.SOAPMessageHandlers;
-import javax.jws.soap.SOAPBinding.ParameterStyle;
-import javax.management.ObjectName;
-import javax.xml.bind.JAXBException;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.ParameterMode;
-import javax.xml.ws.BindingType;
-import javax.xml.ws.RequestWrapper;
-import javax.xml.ws.ResponseWrapper;
-import javax.xml.ws.WebFault;
-import javax.xml.ws.addressing.AddressingProperties;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.addressing.AddressingPropertiesImpl;
-import org.jboss.ws.addressing.metadata.AddressingOpMetaExt;
-import org.jboss.ws.jaxrpc.Style;
-import org.jboss.ws.jaxrpc.Use;
-import org.jboss.ws.jaxws.DynamicWrapperGenerator;
-import org.jboss.ws.jaxws.WrapperGenerator;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.FaultMetaData;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ParameterMetaData;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.ServiceMetaData;
-import org.jboss.ws.metadata.TypeMappingMetaData;
-import org.jboss.ws.metadata.TypesMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.WrappedParameter;
-import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
-import org.jboss.ws.metadata.acessor.JAXBAccessor;
-import org.jboss.ws.metadata.config.jaxws.WSEndpointConfigJAXWS;
-import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
-import org.jboss.ws.metadata.jsr181.HandlerChainFactory;
-import org.jboss.ws.metadata.jsr181.HandlerChainMetaData;
-import org.jboss.ws.metadata.jsr181.HandlerChainsMetaData;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLUtils;
-import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
-import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
-import org.jboss.ws.server.ServerConfig;
-import org.jboss.ws.server.ServerConfigFactory;
-import org.jboss.ws.tools.jaxws.JAXBWSDLGenerator;
-import org.jboss.ws.tools.jaxws.WSDLGenerator;
-import org.jboss.ws.utils.HolderUtils;
-import org.jboss.ws.utils.IOUtils;
-import org.jboss.ws.utils.JBossWSEntityResolver;
-import org.jboss.ws.utils.JavaUtils;
-import org.jboss.xb.binding.ObjectModelFactory;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
-
-import com.sun.xml.bind.api.JAXBRIContext;
-import com.sun.xml.bind.api.TypeReference;
-
-/** An abstract annotation meta data builder.
- *
- * @author Thomas.Diesler at jboss.org
- * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
- * @since 15-Oct-2005
- */
-public abstract class JSR181MetaDataBuilder extends AnnotationsMetaDataBuilder
-{
-   // provide logging
-   private static final Logger log = Logger.getLogger(JSR181MetaDataBuilder.class);
-
-   private WrapperGenerator wrapperGenerator;
-   private List<Class> javaTypes = new ArrayList<Class>();
-   private List<TypeReference> typeRefs = new ArrayList<TypeReference>();
-   private JAXBRIContext jaxbCtx;
-
-   public JSR181MetaDataBuilder()
-   {
-   }
-
-   protected ServerEndpointMetaData setupEndpointFromAnnotations(UnifiedMetaData wsMetaData, UnifiedDeploymentInfo udi, Class<?> sepClass, String linkName)
-         throws ClassNotFoundException
-   {
-      WebService anWebService = (WebService)sepClass.getAnnotation(WebService.class);
-      if (anWebService == null)
-         throw new WSException("Cannot obtain @WebService annotation from: " + sepClass.getName());
-
-      try
-      {
-         Class seiClass = null;
-         String seiName = null;
-
-         if (anWebService.endpointInterface().length() > 0)
-         {
-            seiName = anWebService.endpointInterface();
-            seiClass = udi.classLoader.loadClass(seiName);
-            anWebService = (WebService)seiClass.getAnnotation(WebService.class);
-
-            if (anWebService == null)
-               throw new WSException("Interface does not have a @WebService annotation: " + seiName);
-         }
-         else
-         {
-
-            WebService seiAnnotation = null;
-
-            for(Class potentialSEI : sepClass.getInterfaces())
-            {
-               if(potentialSEI.isAnnotationPresent(WebService.class))
-               {
-                  seiClass = potentialSEI;
-                  seiName = seiClass.getName();
-                  seiAnnotation = sepClass.getAnnotation(WebService.class);
-                  break;
-               }
-            }
-
-            if(seiAnnotation!=null)
-               anWebService = seiAnnotation;
-         }
-
-         // Clear the java types, etc.
-         resetMetaDataBuilder(udi.classLoader);
-         
-         Class wsClass = (seiClass != null ? seiClass : sepClass);
-
-         WSDLUtils wsdlUtils = WSDLUtils.getInstance();
-
-         String name = anWebService.name();
-         if (name.length() == 0)
-            name = wsdlUtils.getJustClassName(wsClass);
-
-         String serviceName = anWebService.serviceName();
-         if (serviceName.length() == 0)
-            serviceName = name + "Service";
-
-         String targetNS = anWebService.targetNamespace();
-         if (targetNS.length() == 0)
-            targetNS = wsdlUtils.getTypeNamespace(wsClass);
-
-         String portName = anWebService.portName();
-         if (portName.length() == 0)
-            portName = name + "Port";
-
-         ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, new QName(targetNS, serviceName));
-         wsMetaData.addService(serviceMetaData);
-
-         // Setup the ServerEndpointMetaData
-         QName portQName = new QName(targetNS, portName);
-         QName portTypeQName = new QName(targetNS, name);
-         ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portQName, portTypeQName, EndpointMetaData.Type.JAXWS);
-         sepMetaData.setLinkName(linkName);
-
-         // Assign the WS-Security configuration,
-         WSSecurityConfiguration securityConfiguration = getWsSecurityConfiguration(udi);
-         serviceMetaData.setSecurityConfiguration(securityConfiguration);
-
-         sepMetaData.setServiceEndpointImplName(sepClass.getName());
-         sepMetaData.setServiceEndpointInterfaceName(wsClass.getName());
-
-         serviceMetaData.addEndpoint(sepMetaData);
-
-         // Process an optional @SOAPBinding annotation
-         if (wsClass.isAnnotationPresent(SOAPBinding.class))
-            processSOAPBinding(sepMetaData, wsClass);
-
-         // Process an optional @BindingType annotation
-         if (wsClass.isAnnotationPresent(BindingType.class))
-            processBindingType(sepMetaData, wsClass);
-
-         boolean includeAllMethods = (wsClass == seiClass);
-         processWebMethods(sepMetaData, wsClass, includeAllMethods);
-
-         // Initialize types
-         createJAXBContext(sepMetaData);
-         populateXmlTypes(sepMetaData);
-
-         // Process or generate WSDL
-         String wsdlLocation = anWebService.wsdlLocation();
-         processOrGenerateWSDL(wsClass, serviceMetaData, wsdlLocation, sepMetaData);
-
-         // Read the generated WSDL and initialize the schema model
-         // FIXME - This should be removed
-         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
-         JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlDefinitions.getWsdlTypes());
-         serviceMetaData.getTypesMetaData().setSchemaModel(schemaModel);
-
-         // Set the endpoint address
-         processPortComponent(udi, wsClass, linkName, sepMetaData);
-
-         // Init the endpoint address
-         initEndpointAddress(udi, sepMetaData, linkName);
-
-         // replace the SOAP address
-         replaceAddressLocation(sepMetaData);
-
-         // Process an optional @SOAPMessageHandlers annotation
-         if (sepClass.isAnnotationPresent(SOAPMessageHandlers.class) || wsClass.isAnnotationPresent(SOAPMessageHandlers.class))
-            log.warn("@SOAPMessageHandlers is deprecated as of JSR-181 2.0 with no replacement.");
-
-         // Add pre handlers
-         WSEndpointConfigJAXWS jaxrpcConfig = (WSEndpointConfigJAXWS)sepMetaData.getEndpointConfig();
-         sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.PRE));
-
-         // Process an optional @HandlerChain annotation
-         if (sepClass.isAnnotationPresent(HandlerChain.class))
-            processHandlerChain(sepMetaData, sepClass);
-         else if (wsClass.isAnnotationPresent(HandlerChain.class))
-            processHandlerChain(sepMetaData, wsClass);
-
-         // Add post handlers
-         sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.POST));
-
-         // init service endpoint id
-         ObjectName sepID = getServiceEndpointID(udi, sepMetaData);
-         sepMetaData.setServiceEndpointID(sepID);
-
-         return sepMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-
-   protected void resetMetaDataBuilder(ClassLoader loader)
-   {
-      wrapperGenerator = new DynamicWrapperGenerator(loader);
-      javaTypes.clear();
-      typeRefs.clear();
-      jaxbCtx = null;
-   }
-
-   protected void createJAXBContext(EndpointMetaData epMetaData)
-   {
-	   try
-	   {
-		   String targetNS = epMetaData.getInterfaceQName().getNamespaceURI();
-		   log.debug("JAXBContext [types=" + javaTypes + ",tns=" + targetNS + "]");
-		   jaxbCtx = JAXBRIContext.newInstance(javaTypes.toArray(new Class[0]), typeRefs, targetNS, false);
-	   }
-	   catch (JAXBException ex)
-	   {
-         throw new IllegalStateException("Cannot build JAXB context", ex);
-	   }
-   }
-
-   protected void populateXmlTypes(EndpointMetaData epMetaData)
-   {
-      for (OperationMetaData operation : epMetaData.getOperations())
-      {
-         // parameters
-         for (ParameterMetaData paramMetaData : operation.getParameters())
-         {
-            populateXmlType(paramMetaData);
-         }
-         
-         // return value
-         ParameterMetaData returnParameter = operation.getReturnParameter();
-         if (returnParameter != null)
-            populateXmlType(returnParameter);
-         
-         // faults
-         for (FaultMetaData faultMetaData : operation.getFaults())
-         {
-            populateXmlType(faultMetaData);
-         }
-      }
-   }
-
-   private void populateXmlType(ParameterMetaData paramMetaData)
-   {
-      EndpointMetaData epMetaData = paramMetaData.getOperationMetaData().getEndpointMetaData();
-      TypesMetaData types = epMetaData.getServiceMetaData().getTypesMetaData();
-
-      QName xmlName = paramMetaData.getXmlName();
-      QName xmlType = paramMetaData.getXmlType();
-      Class javaType = paramMetaData.getJavaType();
-      String javaName = paramMetaData.getJavaTypeName();
-
-      if (xmlType == null)
-      {
-         try
-         {
-            xmlType = jaxbCtx.getTypeName(new TypeReference(xmlName, javaType));
-         }
-         catch (IllegalArgumentException e)
-         {
-            throw new IllegalStateException("Cannot obtain xml type for: [xmlName=" + xmlName + ",javaName=" + javaName + "]");
-         }
-
-         /* Anonymous type.
-          *
-          * Currently the design of our stack is based on the
-          * notion of their always being a unique type. In order to lookup the
-          * appropriate (de)serializer you must have a type. So we use a fake
-          * name. This is an illegal NCName, so it shouldn't collide.
-          */
-         if (xmlType == null)
-            xmlType = new QName(xmlName.getNamespaceURI(), ">" + xmlName.getLocalPart());
-
-         paramMetaData.setXmlType(xmlType);
-      }
-
-	  types.addTypeMapping(new TypeMappingMetaData(types, xmlType, javaName));
-   }
-   
-   private void populateXmlType(FaultMetaData faultMetaData)
-   {
-      EndpointMetaData epMetaData = faultMetaData.getOperationMetaData().getEndpointMetaData();
-      TypesMetaData types = epMetaData.getServiceMetaData().getTypesMetaData();
-      
-      QName xmlType = faultMetaData.getXmlType();
-      String faultBeanName = faultMetaData.getFaultBeanName();
-      
-      types.addTypeMapping(new TypeMappingMetaData(types, xmlType, faultBeanName));
-   }
-
-   protected void processSOAPBinding(EndpointMetaData epMetaData, Class wsClass)
-   {
-      SOAPBinding anSoapBinding = (SOAPBinding)wsClass.getAnnotation(SOAPBinding.class);
-
-      SOAPBinding.Style attrStyle = anSoapBinding.style();
-      Style style = (attrStyle == SOAPBinding.Style.RPC ? Style.RPC : Style.DOCUMENT);
-      epMetaData.setStyle(style);
-
-      SOAPBinding.Use attrUse = anSoapBinding.use();
-      if (attrUse == SOAPBinding.Use.ENCODED)
-         throw new WSException("SOAP encoding is not supported for JSR-181 deployments");
-
-      epMetaData.setEncodingStyle(Use.LITERAL);
-
-      ParameterStyle paramStyle = anSoapBinding.parameterStyle();
-      epMetaData.setParameterStyle(paramStyle);
-   }
-
-   private WebParam getWebParamAnnotation(Method method, int pos)
-   {
-      for (Annotation annotation : method.getParameterAnnotations()[pos])
-         if (annotation instanceof WebParam)
-            return (WebParam)annotation;
-
-      return null;
-   }
-
-   protected void processWebMethods(EndpointMetaData epMetaData, Class wsClass, boolean includeAllMethods)
-   {
-      epMetaData.clearOperations();
-
-      // Process an @WebMethod annotations
-      int webMethodCount = 0;
-      for (Method method : wsClass.getMethods())
-      {
-         if (includeAllMethods || method.isAnnotationPresent(WebMethod.class))
-         {
-            processWebMethod(epMetaData, method);
-            webMethodCount++;
-         }
-      }
-
-      // @WebService should expose all inherited methods if @WebMethod is never specified
-      // http://jira.jboss.org/jira/browse/JBWS-754
-      if (webMethodCount == 0)
-      {
-         Class superClass = wsClass.getSuperclass();
-
-         while (superClass != null)
-         {
-            boolean isJDKClass = superClass.getPackage().getName().startsWith("java");
-
-            if(!isJDKClass)
-            {
-               for (Method method : superClass.getMethods())
-               {
-                  processWebMethod(epMetaData, method);
-                  webMethodCount++;
-               }
-
-               superClass = superClass.getSuperclass();
-
-            }
-         }
-      }
-
-      if (webMethodCount == 0)
-         throw new WSException("At least one @WebMethod annotation is required");
-   }
-
-   private void processWebMethod(EndpointMetaData epMetaData, Method method)
-   {
-      String javaName = method.getName();
-
-      // skip asnyc methods, they dont need meta data representation
-      if(method.getName().endsWith(Constants.ASYNC_METHOD_SUFFIX))
-         return;
-
-      ServiceMetaData serviceMetaData = epMetaData.getServiceMetaData();
-      TypesMetaData typesMetaData = serviceMetaData.getTypesMetaData();
-      String targetNS = epMetaData.getQName().getNamespaceURI();
-
-      // reflection defaults
-      String soapAction = "";
-      String operationName = method.getName();
-
-      // annotation values that override defaults
-      if (method.isAnnotationPresent(WebMethod.class))
-      {
-         WebMethod anWebMethod = method.getAnnotation(WebMethod.class);
-         soapAction = anWebMethod.action();
-         if (anWebMethod.operationName().length() > 0)
-         {
-            operationName = anWebMethod.operationName();
-         }
-      }
-
-      OperationMetaData opMetaData = new OperationMetaData(epMetaData, new QName(targetNS, operationName), javaName);
-      opMetaData.setOneWayOperation(method.isAnnotationPresent(Oneway.class));
-      opMetaData.setSOAPAction(soapAction);
-      epMetaData.addOperation(opMetaData);
-
-      // Build parameter meta data
-      Class[] parameterTypes = method.getParameterTypes();
-      Type[] genericTypes = method.getGenericParameterTypes();
-      Annotation[][] parameterAnnotations = method.getParameterAnnotations();
-      ParameterMetaData wrapperParameter = null, wrapperOutputParameter = null;
-      List<WrappedParameter> wrappedParameters = null, wrappedOutputParameters = null;
-
-      // Force paramter style to wrapped
-      if (method.isAnnotationPresent(RequestWrapper.class) || method.isAnnotationPresent(ResponseWrapper.class))
-      {
-         epMetaData.setParameterStyle(ParameterStyle.WRAPPED);
-      }
-
-      if (opMetaData.isDocumentWrapped())
-      {
-         wrapperParameter = createRequestWrapper(opMetaData, method);
-         wrappedParameters = new ArrayList<WrappedParameter>(parameterTypes.length);
-         wrapperParameter.setWrappedParameters(wrappedParameters);
-
-         if (!opMetaData.isOneWay())
-         {
-            wrapperOutputParameter = createResponseWrapper(opMetaData, method);
-            wrappedOutputParameters = new ArrayList<WrappedParameter>(parameterTypes.length + 1);
-            wrapperOutputParameter.setWrappedParameters(wrappedOutputParameters);
-         }
-      }
-
-      for (int i = 0; i < parameterTypes.length; i++)
-      {
-         Class javaType = parameterTypes[i];
-         Type genericType = genericTypes[i];
-         String javaTypeName = javaType.getName();
-         WebParam anWebParam = getWebParamAnnotation(method, i);
-         boolean isHeader = anWebParam != null && anWebParam.header();
-         boolean isWrapped = opMetaData.isDocumentWrapped() && !isHeader;
-         ParameterMode mode = getParameterMode(anWebParam, javaType);
-
-         // Assert one-way
-         if (opMetaData.isOneWay() && mode != ParameterMode.IN)
-            throw new IllegalArgumentException("A one-way operation can not have output parameters [" + "method = " + method.getName() + ", parameter = " + i + "]");
-
-         if (HolderUtils.isHolderType(javaType))
-         {
-            genericType = HolderUtils.getGenericValueType(genericType);
-            javaType = JavaUtils.erasure(genericType);
-            javaTypeName = javaType.getName();
-         }
-
-         if (isWrapped)
-         {
-            QName wrappedElementName = getWebParamName(opMetaData, i, javaType, anWebParam);
-            String variable = convertToVariable(wrappedElementName.getLocalPart());
-
-            WrappedParameter wrappedParameter = new WrappedParameter(wrappedElementName, javaTypeName, variable, i);
-            wrappedParameter.setTypeArguments(convertTypeArguments(javaType, genericType));
-
-            if (mode != ParameterMode.OUT)
-               wrappedParameters.add(wrappedParameter);
-            if (mode != ParameterMode.IN)
-            {
-               wrappedOutputParameters.add(wrappedParameter);
-               wrappedParameter.setHolder(true);
-            }
-         }
-         else
-         {
-            QName xmlName = getWebParamName(opMetaData, i, javaType, anWebParam);
-
-            ParameterMetaData paramMetaData = new ParameterMetaData(opMetaData, xmlName, javaTypeName);
-            paramMetaData.setInHeader(isHeader);
-            paramMetaData.setIndex(i);
-            paramMetaData.setMode(mode);
-
-            opMetaData.addParameter(paramMetaData);
-            javaTypes.add(javaType);
-            typeRefs.add(new TypeReference(xmlName, genericType, parameterAnnotations[i]));
-         }
-      }
-
-      // Build result meta data
-      Class returnType = method.getReturnType();
-      Type genericReturnType = method.getGenericReturnType();
-      String returnTypeName = returnType.getName();
-      if ((returnType == void.class) == false)
-      {
-         if (opMetaData.isOneWay())
-            throw new IllegalArgumentException("[JSR-181 2.5.1] The method '" + method.getName() + "' can not have a return value if it is marked OneWay");
-
-         WebResult anWebResult = method.getAnnotation(WebResult.class);
-         boolean isHeader = anWebResult != null && anWebResult.header();
-         boolean isWrapped = opMetaData.isDocumentWrapped() && !isHeader;
-         QName xmlName = getWebResultName(opMetaData, returnType, anWebResult);
-
-         if (isWrapped)
-         {
-            WrappedParameter wrapped = new WrappedParameter(xmlName, returnTypeName, convertToVariable(xmlName.getLocalPart()), -1);
-            wrapped.setTypeArguments(convertTypeArguments(returnType, genericReturnType));
-
-            // insert at the beginning just for prettiness
-            wrappedOutputParameters.add(0, wrapped);
-         }
-         else
-         {
-            ParameterMetaData retMetaData = new ParameterMetaData(opMetaData, xmlName, returnTypeName);
-            retMetaData.setInHeader(isHeader);
-            opMetaData.setReturnParameter(retMetaData);
-
-            javaTypes.add(returnType);
-            typeRefs.add(new TypeReference(xmlName, genericReturnType, method.getAnnotations()));
-         }
-      }
-
-      // Generate wrapper beans
-      if (opMetaData.isDocumentWrapped())
-      {
-         wrapperGenerator.generate(wrapperParameter);
-         Class wrapperClass = wrapperParameter.getJavaType();
-         javaTypes.add(wrapperClass);
-         // In case there is no @XmlRootElement
-         typeRefs.add(new TypeReference(wrapperParameter.getXmlName(), wrapperClass));
-         if (!opMetaData.isOneWay())
-         {
-            wrapperGenerator.generate(wrapperOutputParameter);
-            wrapperClass = wrapperOutputParameter.getJavaType();
-            javaTypes.add(wrapperClass);
-            // In case there is no @XmlRootElement
-            typeRefs.add(new TypeReference(wrapperOutputParameter.getXmlName(), wrapperClass));
-         }
-      }
-
-      // Add faults
-      for (Class exClass : method.getExceptionTypes())
-         if (!RemoteException.class.isAssignableFrom(exClass))
-            addFault(opMetaData, exClass);
-
-      // process op meta data extension
-      processMetaExtensions(epMetaData, opMetaData);
-   }
-
-   private ParameterMode getParameterMode(WebParam anWebParam, Class javaType)
-   {
-      if (anWebParam != null)
-      {
-         if (anWebParam.mode() == WebParam.Mode.INOUT)
-            return ParameterMode.INOUT;
-         if (anWebParam.mode() == WebParam.Mode.OUT)
-            return ParameterMode.OUT;
-      }
-
-      return HolderUtils.isHolderType(javaType) ? ParameterMode.INOUT : ParameterMode.IN;
-   }
-
-   private ParameterMetaData createResponseWrapper(OperationMetaData operation, Method method)
-   {
-      QName operationQName = operation.getQName();
-      QName xmlName = new QName(operationQName.getNamespaceURI(), operationQName.getLocalPart() + "Response");
-      QName xmlType = xmlName;
-
-      String responseWrapperType = null;
-      if (method.isAnnotationPresent(ResponseWrapper.class))
-      {
-         ResponseWrapper anResWrapper = method.getAnnotation(ResponseWrapper.class);
-
-         String localName = anResWrapper.localName().length() > 0 ? anResWrapper.localName() : xmlName.getLocalPart();
-         String targetNamespace = anResWrapper.targetNamespace().length() > 0 ? anResWrapper.targetNamespace() : xmlName.getNamespaceURI();
-         xmlName = new QName(targetNamespace, localName);
-
-         if (anResWrapper.className().length() > 0)
-            responseWrapperType = anResWrapper.className();
-      }
-
-      if (responseWrapperType == null)
-      {
-         String packageName = JavaUtils.getPackageName(method.getDeclaringClass()) + ".jaxws";
-         responseWrapperType = packageName + "." + JavaUtils.capitalize(method.getName()) + "Response";
-      }
-
-      ParameterMetaData retMetaData = new ParameterMetaData(operation, xmlName, xmlType, responseWrapperType);
-      retMetaData.setAccessorFactoryCreator(JAXBAccessor.FACTORY_CREATOR);
-      operation.setReturnParameter(retMetaData);
-
-      return retMetaData;
-   }
-
-   private ParameterMetaData createRequestWrapper(OperationMetaData operation, Method method)
-   {
-      String requestWrapperType = null;
-      QName xmlName = operation.getQName();
-      QName xmlType = xmlName;
-      if (method.isAnnotationPresent(RequestWrapper.class))
-      {
-         RequestWrapper anReqWrapper = method.getAnnotation(RequestWrapper.class);
-
-         String localName = anReqWrapper.localName().length() > 0 ? anReqWrapper.localName() : xmlName.getLocalPart();
-         String targetNamespace = anReqWrapper.targetNamespace().length() > 0 ? anReqWrapper.targetNamespace() : xmlName.getNamespaceURI();
-         xmlName = new QName(targetNamespace, localName);
-
-         if (anReqWrapper.className().length() > 0)
-            requestWrapperType = anReqWrapper.className();
-      }
-
-      // Conformance 3.18, the default value must be the same as the method name
-      if (requestWrapperType == null)
-      {
-         String packageName = JavaUtils.getPackageName(method.getDeclaringClass()) + ".jaxws";
-         requestWrapperType = packageName + "." + JavaUtils.capitalize(method.getName());
-      }
-
-      // JAX-WS p.37 pg.1, the annotation only affects the element name, not the type name
-      ParameterMetaData wrapperParameter = new ParameterMetaData(operation, xmlName, xmlType, requestWrapperType);
-      wrapperParameter.setAccessorFactoryCreator(JAXBAccessor.FACTORY_CREATOR);
-      operation.addParameter(wrapperParameter);
-
-      return wrapperParameter;
-   }
-
-   private String convertToVariable(String localName)
-   {
-      return JAXBRIContext.mangleNameToVariableName(localName);
-   }
-
-   /**
-    * Process an optional @HandlerChain annotation
-    *
-    * Location of the handler chain file. The location supports 2 formats.
-    *
-    *    1. An absolute java.net.URL in externalForm.
-    *    (ex: http://myhandlers.foo.com/handlerfile1.xml)
-    *
-    *    2. A relative path from the source file or class file.
-    *    (ex: bar/handlerfile1.xml)
-    */
-   protected void processHandlerChain(EndpointMetaData epMetaData, Class wsClass)
-   {
-      if (wsClass.isAnnotationPresent(SOAPMessageHandlers.class))
-         throw new WSException("Cannot combine @HandlerChain with @SOAPMessageHandlers");
-
-      HandlerChain anHandlerChain = (HandlerChain)wsClass.getAnnotation(HandlerChain.class);
-
-      URL fileURL = null;
-      String filename = anHandlerChain.file();
-
-      // Try the filename as URL
-      try
-      {
-         fileURL = new URL(filename);
-      }
-      catch (MalformedURLException ex)
-      {
-         // ignore
-      }
-
-      // Try the filename as File
-      if (fileURL == null)
-      {
-         try
-         {
-            File file = new File(filename);
-            if (file.exists())
-               fileURL = file.toURL();
-         }
-         catch (MalformedURLException e)
-         {
-            // ignore
-         }
-      }
-
-      // Try the filename as Resource
-      if (fileURL == null)
-      {
-         fileURL = epMetaData.getClassLoader().getResource(filename);
-      }
-
-      // Try the filename relative to class
-      if (fileURL == null)
-      {
-         String packagePath = wsClass.getPackage().getName().replace('.', '/');
-         fileURL = epMetaData.getClassLoader().getResource(packagePath + "/" + filename);
-      }
-
-      if (fileURL == null)
-         throw new WSException("Cannot resolve handler file '" + filename + "' on " + wsClass.getName());
-
-      try
-      {
-         HandlerChainsMetaData handlerChainsMetaData = null;
-         InputStream is = fileURL.openStream();
-         try
-         {
-            Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
-            unmarshaller.setValidation(true);
-            unmarshaller.setSchemaValidation(true);
-            unmarshaller.setEntityResolver(new JBossWSEntityResolver());
-            ObjectModelFactory factory = new HandlerChainFactory();
-            handlerChainsMetaData = (HandlerChainsMetaData)unmarshaller.unmarshal(is, factory, null);
-         }
-         finally
-         {
-            is.close();
-         }
-
-         // Setup the endpoint handlers
-         for (HandlerChainMetaData handlerChainMetaData : handlerChainsMetaData.getHandlerChains())
-         {
-            for (UnifiedHandlerMetaData uhmd : handlerChainMetaData.getHandlers())
-            {
-               epMetaData.addHandler(uhmd.getHandlerMetaDataJAXWS(epMetaData, HandlerType.ENDPOINT));
-            }
-         }
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot process handler chain: " + filename, ex);
-      }
-   }
-
-   private QName getWebParamName(OperationMetaData opMetaData, int index, Class javaType, WebParam webParam)
-   {
-      String namespace = null ;
-      String name = null;
-      boolean header = false;
-
-      if (webParam != null)
-      {
-         if (webParam.targetNamespace().length() > 0)
-            namespace = webParam.targetNamespace();
-
-         if (webParam.name().length() > 0)
-            name = webParam.name();
-
-         header = webParam.header();
-      }
-
-      // Bare and headers must be qualified
-      if (namespace == null && (opMetaData.isDocumentBare() || header))
-         namespace = opMetaData.getQName().getNamespaceURI();
-
-      // RPC body parts must have no namespace
-      else if (opMetaData.isRPCLiteral() && !header)
-         namespace = null;
-
-      // Bare uses the operation name as the default, everything else is generated
-      if (name == null)
-         name = opMetaData.isDocumentBare() && !header ? opMetaData.getQName().getLocalPart() : "arg" + index;
-
-      return (namespace != null) ? new QName(namespace, name) : new QName(name);
-   }
-
-   private QName getWebResultName(OperationMetaData opMetaData, Class javaType, WebResult anWebResult)
-   {
-      String name = null;
-      String namespace = null;
-      boolean header = false;
-
-      if (anWebResult != null)
-      {
-         if (anWebResult.targetNamespace().length() > 0)
-            namespace = anWebResult.targetNamespace();
-
-         if (anWebResult.name().length() > 0)
-            name = anWebResult.name();
-
-         header = anWebResult.header();
-      }
-
-      // Bare and headers must be qualified
-      if (namespace == null && (opMetaData.isDocumentBare() || header))
-         namespace = opMetaData.getQName().getNamespaceURI();
-
-      // RPC body parts must have no namespace
-      else if (opMetaData.isRPCLiteral() && !header)
-         namespace = null;
-
-      // Bare uses the operation name as the default, everything else is generated
-      if (name == null)
-         name = opMetaData.isDocumentBare() && !header ? opMetaData.getResponseName().getLocalPart() : "return";
-
-      return (namespace != null) ? new QName(namespace, name) : new QName(name);
-   }
-
-   private void addFault(OperationMetaData omd, Class<?> exception)
-   {
-      if (omd.isOneWay())
-         throw new IllegalStateException("JSR-181 4.3.1 - A JSR-181 processor is REQUIRED to report an error if an operation marked "
-               + "@Oneway has a return value, declares any checked exceptions or has any INOUT or OUT parameters.");
-
-      WebFault annotation = exception.getAnnotation(WebFault.class);
-
-      String name;
-      String namespace;
-      String faultBeanName = null;
-
-      // Only the element name is effected by @WebFault, the type uses the same convention
-      QName xmlType = new QName(omd.getQName().getNamespaceURI(), exception.getSimpleName());
-
-      /*
-       * If @WebFault is present, and the exception contains getFaultInfo, the
-       * return value should be used. Otherwise we need to generate the bean.
-       */
-      boolean generate = true;
-      if (annotation != null)
-      {
-         name = annotation.name();
-         namespace = annotation.targetNamespace();
-         if (namespace.length() == 0)
-            namespace = omd.getQName().getNamespaceURI();
-
-         Class<?> faultBean = getFaultInfo(exception);
-         if (faultBean != null)
-         {
-            generate = false;
-            faultBeanName = faultBean.getName();
-         }
-      }
-      else
-      {
-         name = xmlType.getLocalPart();
-         namespace = xmlType.getNamespaceURI();
-      }
-
-      if (faultBeanName == null)
-         faultBeanName = JavaUtils.getPackageName(omd.getEndpointMetaData().getServiceEndpointInterface()) + ".jaxws." + exception.getSimpleName() + "Bean";
-
-      QName xmlName = new QName(namespace, name);
-
-      FaultMetaData fmd = new FaultMetaData(omd, xmlName, xmlType, exception.getName());
-      fmd.setFaultBeanName(faultBeanName);
-
-      if (generate)
-         wrapperGenerator.generate(fmd);
-
-      javaTypes.add(fmd.getFaultBean());
-      typeRefs.add(new TypeReference(fmd.getXmlName(), fmd.getFaultBean()));
-
-      omd.addFault(fmd);
-   }
-
-   private Class<?> getFaultInfo(Class<?> exception)
-   {
-      try
-      {
-         Method method = exception.getMethod("getFaultInfo");
-         Class<?> returnType = method.getReturnType();
-         if (returnType == void.class)
-            return null;
-
-         return returnType;
-      }
-      catch (SecurityException e)
-      {
-         throw new WSException("Unexpected security exception: " + e.getMessage(), e);
-      }
-      catch (NoSuchMethodException e)
-      {
-         return null;
-      }
-   }
-
-   private String[] convertTypeArguments(Class rawType, Type type)
-   {
-      if (!Collection.class.isAssignableFrom(rawType) && !Map.class.isAssignableFrom(rawType))
-         return null;
-
-      if (!(type instanceof ParameterizedType))
-         return null;
-
-      ParameterizedType paramType = (ParameterizedType)type;
-      Type[] arguments = paramType.getActualTypeArguments();
-      String[] ret = new String[arguments.length];
-      for (int i = 0; i < arguments.length; i++)
-         ret[i] = JavaUtils.erasure(arguments[i]).getName();
-
-      return ret;
-   }
-
-   /**
-    * Process operation meta data extensions.
-    */
-   private void processMetaExtensions(EndpointMetaData epMetaData, OperationMetaData opMetaData)
-   {
-      // Until there is a addressing annotion we fallback to implicit action asosciation
-      // TODO: figure out a way to assign message name instead of IN and OUT
-      String tns = epMetaData.getQName().getNamespaceURI();
-      String portTypeName = epMetaData.getQName().getLocalPart();
-
-      AddressingProperties ADDR = new AddressingPropertiesImpl();
-      AddressingOpMetaExt addrExt = new AddressingOpMetaExt(ADDR.getNamespaceURI());
-      addrExt.setInboundAction(tns + "/" + portTypeName + "/IN");
-
-      if (!opMetaData.isOneWay())
-         addrExt.setOutboundAction(tns + "/" + portTypeName + "/OUT");
-
-      opMetaData.addExtension(addrExt);
-   }
-
-   protected void processOrGenerateWSDL(Class wsClass, ServiceMetaData serviceMetaData, String wsdlLocation, EndpointMetaData epMetaData)
-   {
-      if (wsdlLocation.length() > 0)
-      {
-         serviceMetaData.setWsdlFile(wsdlLocation);
-      }
-      else
-      {
-         try
-         {
-            String serviceName = serviceMetaData.getServiceName().getLocalPart();
-
-            WSDLGenerator generator = new JAXBWSDLGenerator(jaxbCtx);
-            WSDLDefinitions wsdlDefinitions = generator.generate(serviceMetaData);
-
-            ServerConfigFactory factory = ServerConfigFactory.getInstance();
-            ServerConfig config = factory.getServerConfig();
-            File tmpdir = new File(config.getServerTempDir().getCanonicalPath() + "/jbossws");
-            tmpdir.mkdirs();
-
-            File wsdlTmpFile = File.createTempFile(serviceName, ".wsdl", tmpdir);
-            wsdlTmpFile.deleteOnExit();
-
-            Writer writer = IOUtils.getCharsetFileWriter(wsdlTmpFile, Constants.DEFAULT_XML_CHARSET);
-            wsdlDefinitions.write(writer, Constants.DEFAULT_XML_CHARSET);
-            writer.close();
-
-            serviceMetaData.setWsdlFile(wsdlTmpFile.toURL().toExternalForm());
-         }
-         catch (RuntimeException rte)
-         {
-            throw rte;
-         }
-         catch (IOException e)
-         {
-            throw new WSException("Cannot write generated wsdl", e);
-         }
-      }
-   }
-}
\ No newline at end of file

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB21.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB21.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB21.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,90 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.
-*/
-// $Id$
-package org.jboss.ws.deployment;
-
-import java.util.Iterator;
-
-import javax.jws.WebService;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.WSException;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
-
-/**
- * A server side meta data builder that is based on JSR-181 annotations
- *
- * @author Thomas.Diesler at jboss.org
- * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
- * @since 19-May-2005
- */
-public class JSR181MetaDataBuilderEJB21 extends JSR181MetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JSR181MetaDataBuilderEJB21.class);
-
-   /** Build from annotations
-    */
-   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
-   {
-      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
-      try
-      {
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setDeploymentName(udi.getCanonicalName());
-         wsMetaData.setClassLoader(classLoader);
-
-         if (udi.classLoader == null)
-            throw new WSException("Deployment class loader not initialized");
-
-         // For every bean
-         UnifiedApplicationMetaData appMetaData = (UnifiedApplicationMetaData)udi.metaData;
-         Iterator it = appMetaData.getEnterpriseBeans();
-         while (it.hasNext())
-         {
-            UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)it.next();
-
-            String ejbName = beanMetaData.getEjbName();
-            String ejbClassName = beanMetaData.getEjbClass();
-            Class beanClass = udi.classLoader.loadClass(ejbClassName);
-            if (beanClass.isAnnotationPresent(WebService.class))
-            {
-               setupEndpointFromAnnotations(wsMetaData, udi, beanClass, ejbName);
-            }
-         }
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return wsMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB3.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB3.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderEJB3.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,103 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.
- */
-// $Id$
-package org.jboss.ws.deployment;
-
-import java.util.Iterator;
-
-import javax.jws.WebService;
-
-import org.jboss.annotation.security.SecurityDomain;
-import org.jboss.logging.Logger;
-import org.jboss.ws.WSException;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
-
-/**
- * A server side meta data builder that is based on JSR-181 annotations
- *
- * @author Thomas.Diesler at jboss.org
- * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
- * @since 19-May-2005
- */
-public class JSR181MetaDataBuilderEJB3 extends JSR181MetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JSR181MetaDataBuilderEJB3.class);
-
-   protected Class annotatedClass;
-
-   /** Build from webservices.xml
-    */
-   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
-   {
-      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
-      try
-      {
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setDeploymentName(udi.getCanonicalName());
-         wsMetaData.setClassLoader(classLoader);
-
-         if (udi.classLoader == null)
-            throw new WSException("Deployment class loader not initialized");
-
-         // The container objects below provide access to all of the ejb metadata
-         UnifiedApplicationMetaData appMetaData = (UnifiedApplicationMetaData)udi.metaData;
-         Iterator<UnifiedBeanMetaData> it = appMetaData.getEnterpriseBeans();
-         while (it.hasNext())
-         {
-            UnifiedBeanMetaData beanMetaData = it.next();
-            String ejbClassName = beanMetaData.getEjbClass();
-            Class beanClass = udi.classLoader.loadClass(ejbClassName);
-            if (beanClass.isAnnotationPresent(WebService.class))
-            {
-               String ejbLink = beanMetaData.getEjbName();
-               setupEndpointFromAnnotations(wsMetaData, udi, beanClass, ejbLink);
-               
-               // setup the security domain
-               if (beanClass.isAnnotationPresent(SecurityDomain.class))
-               {
-                  SecurityDomain anSecurityDomain = (SecurityDomain)beanClass.getAnnotation(SecurityDomain.class);
-                  String lastDomain = wsMetaData.getSecurityDomain();
-                  String securityDomain = anSecurityDomain.value();
-                  if (lastDomain != null && lastDomain.equals(securityDomain) == false)
-                     throw new IllegalStateException("Multiple security domains not supported: " + securityDomain);
-                  
-                  wsMetaData.setSecurityDomain(securityDomain);
-               }
-            }
-         }
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return wsMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderJSE.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderJSE.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilderJSE.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,93 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.
- */
-// $Id$
-package org.jboss.ws.deployment;
-
-import java.util.Map;
-
-import javax.jws.WebService;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.WSException;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.UnifiedMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
-
-/**
- * A server side meta data builder that is based on JSR-181 annotations
- *
- * @author Thomas.Diesler at jboss.org
- * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
- * @since 23-Jul-2005
- */
-public class JSR181MetaDataBuilderJSE extends JSR181MetaDataBuilder
-{
-   // provide logging
-   private final Logger log = Logger.getLogger(JSR181MetaDataBuilderJSE.class);
-
-   /** Build from annotations
-    */
-   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
-   {
-      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
-      try
-      {
-         UnifiedMetaData wsMetaData = new UnifiedMetaData();
-         wsMetaData.setDeploymentName(udi.getCanonicalName());
-         wsMetaData.setClassLoader(classLoader);
-
-         if (udi.classLoader == null)
-            throw new WSException("Deployment class loader not initialized");
-
-         // For every bean
-         UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
-         Map<String, String> servletClassMap = webMetaData.getServletClassNames();
-         for (String servletName : servletClassMap.keySet())
-         {
-            String servletClassName = servletClassMap.get(servletName);
-            try
-            {
-               Class beanClass = udi.classLoader.loadClass(servletClassName);
-               if (beanClass.isAnnotationPresent(WebService.class))
-               {
-                  setupEndpointFromAnnotations(wsMetaData, udi, beanClass, servletName);
-               }
-            }
-            catch (ClassNotFoundException ex)
-            {
-               log.warn("Cannot load service endpoint class: " + servletClassName);
-            }            
-         }
-
-         log.debug("END buildMetaData: " + wsMetaData);
-         return wsMetaData;
-      }
-      catch (RuntimeException rte)
-      {
-         throw rte;
-      }
-      catch (Exception ex)
-      {
-         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
-      }
-   }
-}

Deleted: trunk/src/main/java/org/jboss/ws/deployment/MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/MetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/MetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -1,583 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.ws.deployment;
-
-// $Id: $
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.management.ObjectName;
-import javax.wsdl.Definition;
-import javax.wsdl.Import;
-import javax.wsdl.Port;
-import javax.wsdl.Service;
-import javax.wsdl.extensions.ExtensibilityElement;
-import javax.wsdl.extensions.UnknownExtensibilityElement;
-import javax.wsdl.extensions.soap.SOAPAddress;
-import javax.xml.namespace.QName;
-import javax.xml.ws.addressing.AddressingProperties;
-
-import org.jboss.logging.Logger;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.addressing.AddressingPropertiesImpl;
-import org.jboss.ws.addressing.metadata.AddressingOpMetaExt;
-import org.jboss.ws.common.CommonSOAPBinding;
-import org.jboss.ws.eventing.EventingConstants;
-import org.jboss.ws.eventing.deployment.EventingEndpoint;
-import org.jboss.ws.eventing.metadata.EventingEpMetaExt;
-import org.jboss.ws.jaxrpc.UnqualifiedFaultException;
-import org.jboss.ws.jaxrpc.Use;
-import org.jboss.ws.metadata.ClientEndpointMetaData;
-import org.jboss.ws.metadata.EndpointMetaData;
-import org.jboss.ws.metadata.FaultMetaData;
-import org.jboss.ws.metadata.OperationMetaData;
-import org.jboss.ws.metadata.ServerEndpointMetaData;
-import org.jboss.ws.metadata.TypeMappingMetaData;
-import org.jboss.ws.metadata.TypesMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedEjbPortComponentMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedMessageDrivenMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedWebSecurityMetaData;
-import org.jboss.ws.metadata.j2ee.UnifiedWebSecurityMetaData.UnifiedWebResourceCollection;
-import org.jboss.ws.metadata.wsdl.NCName;
-import org.jboss.ws.metadata.wsdl.WSDLBinding;
-import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
-import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
-import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
-import org.jboss.ws.metadata.wsdl.WSDLInterface;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceFault;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
-import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationOutfault;
-import org.jboss.ws.metadata.wsdl.WSDLProperty;
-import org.jboss.ws.metadata.wsdl.WSDLService;
-import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
-import org.jboss.ws.metadata.wsse.WSSecurityConfigurationFactory;
-import org.jboss.ws.server.ServiceEndpointManager;
-import org.jboss.ws.server.ServiceEndpointManagerFactory;
-import org.jboss.ws.utils.ObjectNameFactory;
-import org.w3c.dom.Element;
-
-/** An abstract meta data builder.
- *
- * @author Thomas.Diesler at jboss.org
- * @since 19-May-2005
- */
-public abstract class MetaDataBuilder
-{
-   // provide logging
-   private final static Logger log = Logger.getLogger(MetaDataBuilder.class);
-
-   protected ClassLoader classLoader;
-
-   public void setClassLoader(ClassLoader classLoader)
-   {
-      this.classLoader = classLoader;
-   }
-
-   protected WSSecurityConfiguration getWsSecurityConfiguration(UnifiedDeploymentInfo udi) throws IOException
-   {
-      WSSecurityConfiguration config = null;
-
-      String resource = WSSecurityConfigurationFactory.SERVER_RESOURCE_NAME;
-      if (udi.metaData instanceof UnifiedWebMetaData)
-      {
-         resource = "WEB-INF/" + resource;
-      }
-      else
-      {
-         resource = "META-INF/" + resource;
-      }
-
-      URL location = classLoader.getResource(resource);
-      if (location != null)
-      {
-         config = WSSecurityConfigurationFactory.newInstance().parse(location);
-
-         // Get and set deployment path to the keystore file
-         if (config.getKeyStoreFile() != null)
-         {
-            location = classLoader.getResource(config.getKeyStoreFile());
-            if (location != null)
-               config.setKeyStoreURL(location);
-         }
-
-         if (config.getTrustStoreFile() != null)
-         {
-            location = classLoader.getResource(config.getTrustStoreFile());
-            if (location != null)
-               config.setTrustStoreURL(location);
-         }
-      }
-
-      return config;
-   }
-
-   /** Inititialize the endpoint binding */
-   protected void initEndpointBinding(WSDLEndpoint wsdlEndpoint, ClientEndpointMetaData epMetaData)
-   {
-      WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getWsdlService().getWsdlDefinitions();
-      WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
-      WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getQName());
-      String bindingType = wsdlBinding.getType();
-      if (Constants.NS_SOAP11.equals(bindingType))
-         epMetaData.setBindingId(CommonSOAPBinding.SOAP11HTTP_BINDING);
-      else if (Constants.NS_SOAP12.equals(bindingType))
-         epMetaData.setBindingId(CommonSOAPBinding.SOAP12HTTP_BINDING);
-   }
-
-   /** Initialize the endpoint encoding style from the binding operations
-    */
-   protected void initEndpointEncodingStyle(EndpointMetaData epMetaData)
-   {
-      WSDLDefinitions wsdlDefinitions = epMetaData.getServiceMetaData().getWsdlDefinitions();
-      for (WSDLService wsdlService : wsdlDefinitions.getServices())
-      {
-         for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
-         {
-            if (epMetaData.getQName().equals(wsdlEndpoint.getQName()))
-            {
-               QName bindQName = wsdlEndpoint.getBinding();
-               NCName ncName = new NCName(bindQName.getLocalPart());
-               WSDLBinding wsdlBinding = wsdlDefinitions.getBinding(ncName);
-               if (wsdlBinding == null)
-                  throw new WSException("Cannot obtain binding: " + ncName);
-
-               for (WSDLBindingOperation wsdlBindingOperation : wsdlBinding.getOperations())
-               {
-                  String encStyle = wsdlBindingOperation.getEncodingStyle();
-                  epMetaData.setEncodingStyle(Use.valueOf(encStyle));
-               }
-            }
-         }
-      }
-   }
-
-   protected void processEndpointMetaDataExtensions(EndpointMetaData epMetaData, WSDLDefinitions wsdlDefinitions)
-   {
-      for (WSDLInterface wsdlInterface : wsdlDefinitions.getInterfaces())
-      {
-         WSDLProperty eventSourceProp = wsdlInterface.getProperty(Constants.WSDL_PROPERTY_EVENTSOURCE);
-         if (eventSourceProp != null && epMetaData instanceof ServerEndpointMetaData)
-         {
-            ServerEndpointMetaData sepMetaData = (ServerEndpointMetaData)epMetaData;
-            String eventSourceNS = wsdlInterface.getQName().getNamespaceURI() + "/" + wsdlInterface.getQName().getLocalPart();
-            Object notificationSchema = null; // todo: resolve schema from operation message
-
-            EventingEpMetaExt ext = new EventingEpMetaExt(EventingConstants.NS_EVENTING);
-            ext.setEventSourceNS(eventSourceNS);
-            ext.setNotificationSchema(notificationSchema);
-
-            sepMetaData.addExtension(ext);
-            sepMetaData.setManagedEndpointBean(EventingEndpoint.class.getName());
-         }
-      }
-   }
-
-   protected void initEndpointAddress(UnifiedDeploymentInfo udi, ServerEndpointMetaData sepMetaData, String linkName)
-   {
-      String contextRoot = sepMetaData.getContextRoot();
-      String urlPattern = sepMetaData.getURLPattern();
-      
-      if (udi.metaData instanceof UnifiedWebMetaData)
-      {
-         UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
-         String jbwebContextRoot = webMetaData.getContextRoot();
-         if (jbwebContextRoot != null)
-            contextRoot = jbwebContextRoot;
-         
-         Map<String, String> servletMappings = webMetaData.getServletMappings();
-         urlPattern = (String)servletMappings.get(linkName);
-         if (urlPattern == null)
-            throw new WSException("Cannot obtain url pattern for servlet name: " + linkName);
-      }
-      
-      if (udi.metaData instanceof UnifiedApplicationMetaData)
-      {
-         UnifiedApplicationMetaData applMetaData = (UnifiedApplicationMetaData)udi.metaData;
-         UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)applMetaData.getBeanByEjbName(linkName);
-         if (beanMetaData == null)
-            throw new WSException("Cannot obtain meta data for ejb link: " + linkName);
-
-         String wsContextRoot = applMetaData.getWebServiceContextRoot();
-         if (wsContextRoot != null)
-            contextRoot = wsContextRoot;
-         
-         UnifiedEjbPortComponentMetaData ejbpcMetaData = beanMetaData.getPortComponent();
-         if (ejbpcMetaData != null && ejbpcMetaData.getPortComponentURI() != null)
-         {
-            String pcUrlPattern = ejbpcMetaData.getPortComponentURI();
-            if (pcUrlPattern != null)
-               urlPattern = pcUrlPattern;
-         }
-      }
-
-      // If not, derive the context root from the deployment
-      if (contextRoot == null)
-      {
-         contextRoot = "/";
-         if (udi.parent != null)
-         {
-            String shortName = udi.parent.shortName;
-            shortName = shortName.substring(0, shortName.indexOf('.'));
-            contextRoot += shortName + "-";
-         }
-         String shortName = udi.shortName;
-         shortName = shortName.substring(0, shortName.indexOf('.'));
-         contextRoot += shortName;
-      }
-
-      if (contextRoot.startsWith("/") == false)
-         contextRoot = "/" + contextRoot;
-      if (urlPattern == null)
-         urlPattern = "/" + linkName;
-      if (urlPattern.startsWith("/") == false)
-         urlPattern = "/" + urlPattern;
-
-      sepMetaData.setContextRoot(contextRoot);
-      sepMetaData.setURLPattern(urlPattern);
-
-      String servicePath = contextRoot + urlPattern;
-      sepMetaData.setEndpointAddress(getServiceEndpointAddress(null, servicePath));
-   }
-
-   protected ObjectName getServiceEndpointID(UnifiedDeploymentInfo udi, ServerEndpointMetaData sepMetaData)
-   {
-      String linkName = sepMetaData.getLinkName();
-      String context = sepMetaData.getContextRoot();
-      if (context.startsWith("/"))
-         context = context.substring(1);
-
-      StringBuilder idstr = new StringBuilder(ServerEndpointMetaData.SEPID_DOMAIN + ":");
-      idstr.append(ServerEndpointMetaData.SEPID_PROPERTY_CONTEXT + "=" + context);
-      idstr.append("," + ServerEndpointMetaData.SEPID_PROPERTY_ENDPOINT + "=" + linkName);
-
-      // Add JMS destination JNDI name for MDB endpoints
-      if (udi.metaData instanceof UnifiedApplicationMetaData)
-      {
-         String ejbName = sepMetaData.getLinkName();
-         if (ejbName == null)
-            throw new WSException("Cannot obtain ejb-link from port component");
-
-         UnifiedApplicationMetaData applMetaData = (UnifiedApplicationMetaData)udi.metaData;
-         UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)applMetaData.getBeanByEjbName(ejbName);
-         if (beanMetaData == null)
-            throw new WSException("Cannot obtain ejb meta data for: " + ejbName);
-
-         if (beanMetaData instanceof UnifiedMessageDrivenMetaData)
-         {
-            UnifiedMessageDrivenMetaData mdMetaData = (UnifiedMessageDrivenMetaData)beanMetaData;
-            String jndiName = mdMetaData.getDestinationJndiName();
-            idstr.append(",jms=" + jndiName);
-         }
-      }
-
-      return ObjectNameFactory.create(idstr.toString());
-   }
-
-   protected void buildFaultMetaData(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation)
-   {
-      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
-
-      WSDLInterface wsdlInterface = wsdlOperation.getWsdlInterface();
-      for (WSDLInterfaceOperationOutfault outFault : wsdlOperation.getOutfaults())
-      {
-         QName ref = outFault.getRef();
-
-         WSDLInterfaceFault wsdlFault = wsdlInterface.getFault(new NCName(ref.getLocalPart()));
-         QName xmlName = wsdlFault.getElement();
-         QName xmlType = wsdlFault.getXmlType();
-         String javaTypeName = null;
-
-         if (xmlType == null)
-         {
-            log.warn("Cannot obtain fault type for element: " + xmlName);
-            xmlType = xmlName;
-         }
-         
-         TypeMappingMetaData tmMetaData = typesMetaData.getTypeMappingByXMLType(xmlType);
-         if (tmMetaData != null)
-            javaTypeName = tmMetaData.getJavaTypeName();
-
-         if (javaTypeName == null)
-         {
-            log.warn("Cannot obtain java type mapping for: " + xmlType);
-            javaTypeName = new UnqualifiedFaultException(xmlType).getClass().getName();
-         }
-
-         FaultMetaData faultMetaData = new FaultMetaData(opMetaData, xmlName, xmlType, javaTypeName);
-         opMetaData.addFault(faultMetaData);
-      }
-   }
-
-   /** Process operation meta data extensions. */
-   protected void processOpMetaExtensions(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation)
-   {
-
-      String tns = wsdlOperation.getQName().getNamespaceURI();
-      String portTypeName = wsdlOperation.getQName().getLocalPart();
-
-      AddressingProperties ADDR = new AddressingPropertiesImpl();
-      AddressingOpMetaExt addrExt = new AddressingOpMetaExt(ADDR.getNamespaceURI());
-
-      // inbound action
-      WSDLProperty wsaInAction = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_ACTION_IN);
-      if (wsaInAction != null)
-      {
-         addrExt.setInboundAction(wsaInAction.getValue());
-      }
-      else
-      {
-         WSDLProperty messageName = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_MESSAGE_NAME_IN);
-         addrExt.setInboundAction(tns + "/" + portTypeName + "/" + messageName);
-      }
-
-      // outbound action
-      WSDLProperty wsaOutAction = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_ACTION_OUT);
-      if (wsaOutAction != null)
-      {
-         addrExt.setOutboundAction(wsaOutAction.getValue());
-      }
-      else
-      {
-         WSDLProperty messageName = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_MESSAGE_NAME_OUT);
-         addrExt.setOutboundAction(tns + "/" + portTypeName + "/" + messageName);
-      }
-
-      opMetaData.addExtension(addrExt);
-   }
-
-   /** Get the web service address for a given path
-    */
-   public String getServiceEndpointAddress(String uriScheme, String servicePath)
-   {
-      if (servicePath == null || servicePath.length() == 0)
-         throw new WSException("Service path cannot be null");
-
-      if (servicePath.endsWith("/*"))
-         servicePath = servicePath.substring(0, servicePath.length() - 2);
-
-      if (uriScheme == null)
-         uriScheme = "http";
-
-      ServiceEndpointManagerFactory factory = ServiceEndpointManagerFactory.getInstance();
-      ServiceEndpointManager epManager = factory.getServiceEndpointManager();
-      String host = epManager.getWebServiceHost();
-      int port = epManager.getWebServicePort();
-      if ("https".equals(uriScheme))
-         port = epManager.getWebServiceSecurePort();
-
-      String urlStr = uriScheme + "://" + host + ":" + port + servicePath;
-      try
-      {
-         return new URL(urlStr).toExternalForm();
-      }
-      catch (MalformedURLException e)
-      {
-         throw new WSException("Malformed URL: " + urlStr);
-      }
-   }
-
-   protected String getTransportGuarantee(final UnifiedWebMetaData webMetaData, final String servletLink)
-   {
-      String transportGuarantee = "";
-
-      Map<String, String> servletMappings = webMetaData.getServletMappings();
-      String urlPattern = servletMappings.get(servletLink);
-
-      if (urlPattern == null)
-         throw new WSException("Cannot find <url-pattern> for servlet-name: " + servletLink);
-
-      List<UnifiedWebSecurityMetaData> securityList = webMetaData.getSecurityMetaData();
-      for (UnifiedWebSecurityMetaData currentSecurity : securityList)
-      {
-         if (currentSecurity.getTransportGuarantee() != null && currentSecurity.getTransportGuarantee().length() > 0)
-         {
-            for (UnifiedWebResourceCollection currentCollection : currentSecurity.getWebResources())
-            {
-               for (String currentUrlPattern : currentCollection.getUrlPatterns())
-               {
-                  if (urlPattern.equals(currentUrlPattern))
-                  {
-                     transportGuarantee = currentSecurity.getTransportGuarantee();
-                  }
-               }
-            }
-         }
-      }
-
-      return transportGuarantee;
-   }
-
-   /** Replace the address locations for a given port component.
-    */
-   protected void replaceAddressLocation(ServerEndpointMetaData epMetaData)
-   {
-      WSDLDefinitions wsdlDefinitions = epMetaData.getServiceMetaData().getWsdlDefinitions();
-      QName portName = epMetaData.getQName();
-
-      boolean endpointFound = false;
-      for (WSDLService wsdlService : wsdlDefinitions.getServices())
-      {
-         for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
-         {
-            QName wsdlPortName = wsdlEndpoint.getQName();
-            if (wsdlPortName.equals(portName))
-            {
-               endpointFound = true;
-
-               String orgAddress = wsdlEndpoint.getAddress();
-               String uriScheme = getUriScheme(orgAddress);
-
-               String transportGuarantee = epMetaData.getTransportGuarantee();
-               if ("CONFIDENTIAL".equals(transportGuarantee))
-                  uriScheme = "https";
-
-               String servicePath = epMetaData.getContextRoot() + epMetaData.getURLPattern();
-               String serviceEndpointURL = getServiceEndpointAddress(uriScheme, servicePath);
-
-               ServiceEndpointManagerFactory factory = ServiceEndpointManagerFactory.getInstance();
-               ServiceEndpointManager epManager = factory.getServiceEndpointManager();
-               boolean alwaysModify = epManager.isAlwaysModifySOAPAddress();
-
-               if (alwaysModify || uriScheme == null || orgAddress.indexOf("REPLACE_WITH_ACTUAL_URL") >= 0)
-               {
-                  log.debug("Replace service endpoint address '" + orgAddress + "' with '" + serviceEndpointURL + "'");
-                  wsdlEndpoint.setAddress(serviceEndpointURL);
-                  epMetaData.setEndpointAddress(serviceEndpointURL);
-
-                  // modify the wsdl-1.1 definition
-                  if (wsdlDefinitions.getWsdlOneOneDefinition() != null)
-                     replaceWSDL11SOAPAddress(wsdlDefinitions, portName, serviceEndpointURL);
-               }
-               else
-               {
-                  log.debug("Don't replace service endpoint address '" + orgAddress + "'");
-                  try
-                  {
-                     epMetaData.setEndpointAddress(new URL(orgAddress).toExternalForm());
-                  }
-                  catch (MalformedURLException e)
-                  {
-                     throw new WSException("Malformed URL: " + orgAddress);
-                  }
-               }
-            }
-         }
-      }
-
-      if (endpointFound == false)
-         throw new WSException("Cannot find port in wsdl: " + portName);
-   }
-
-   private void replaceWSDL11SOAPAddress(WSDLDefinitions wsdlDefinitions, QName portQName, String serviceEndpointURL)
-   {
-      Definition wsdlOneOneDefinition = wsdlDefinitions.getWsdlOneOneDefinition();
-      String tnsURI = wsdlOneOneDefinition.getTargetNamespace();
-
-      // search for matching portElement and replace the address URI
-      Port wsdlOneOnePort = modifySOAPAddress(tnsURI, portQName, serviceEndpointURL, wsdlOneOneDefinition.getServices());
-
-      // recursivly process imports if none can be found
-      if (wsdlOneOnePort == null && !wsdlOneOneDefinition.getImports().isEmpty())
-      {
-
-         Iterator imports = wsdlOneOneDefinition.getImports().values().iterator();
-         while (imports.hasNext())
-         {
-            List l = (List)imports.next();
-            Iterator importsByNS = l.iterator();
-            while (importsByNS.hasNext())
-            {
-               Import anImport = (Import)importsByNS.next();
-               wsdlOneOnePort = modifySOAPAddress(anImport.getNamespaceURI(), portQName, serviceEndpointURL, anImport.getDefinition().getServices());
-            }
-         }
-      }
-
-      // if it still doesn't exist something is wrong
-      if (wsdlOneOnePort == null)
-         throw new IllegalArgumentException("Cannot find port with name '" + portQName + "' in wsdl document");
-   }
-
-   private Port modifySOAPAddress(String tnsURI, QName portQName, String serviceEndpointURL, Map services)
-   {
-      QName SOAP12_ADDRESS = new QName(Constants.NS_SOAP12, "address");
-
-      Port wsdlOneOnePort = null;
-      Iterator itServices = services.values().iterator();
-      while (itServices.hasNext())
-      {
-         Service wsdlOneOneService = (Service)itServices.next();
-         Map wsdlOneOnePorts = wsdlOneOneService.getPorts();
-         Iterator itPorts = wsdlOneOnePorts.keySet().iterator();
-         while (itPorts.hasNext())
-         {
-            String portLocalName = (String)itPorts.next();
-            if (portQName.equals(new QName(tnsURI, portLocalName)))
-            {
-               wsdlOneOnePort = (Port)wsdlOneOnePorts.get(portLocalName);
-               List<ExtensibilityElement> extElements = wsdlOneOnePort.getExtensibilityElements();
-               for (ExtensibilityElement extElement : extElements)
-               {
-                  QName elementType = extElement.getElementType();
-                  if (extElement instanceof SOAPAddress)
-                  {
-                     SOAPAddress address = (SOAPAddress)extElement;
-                     address.setLocationURI(serviceEndpointURL);
-                  }
-                  else if (SOAP12_ADDRESS.equals(elementType))
-                  {
-                     Element domElement = ((UnknownExtensibilityElement)extElement).getElement();
-                     domElement.setAttribute("location", serviceEndpointURL);
-                  }
-               }
-            }
-         }
-      }
-
-      return wsdlOneOnePort;
-   }
-
-   private String getUriScheme(String addrStr)
-   {
-      try
-      {
-         URI addrURI = new URI(addrStr);
-         String scheme = addrURI.getScheme();
-         return scheme;
-      }
-      catch (URISyntaxException e)
-      {
-         return null;
-      }
-   }
-}

Modified: trunk/src/main/java/org/jboss/ws/deployment/ServiceEndpointDeployer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/ServiceEndpointDeployer.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/ServiceEndpointDeployer.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -32,18 +32,24 @@
 import org.jboss.ws.metadata.ServerEndpointMetaData;
 import org.jboss.ws.metadata.ServiceMetaData;
 import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.builder.jaxrpc.JAXRPCDeployment;
+import org.jboss.ws.metadata.builder.jaxrpc.JAXRPCServerMetaDataBuilder;
+import org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderEJB21;
+import org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderEJB3;
+import org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderJSE;
+import org.jboss.ws.metadata.builder.jaxws.JAXWSProviderMetaDataBuilder;
 import org.jboss.ws.server.ServiceEndpointInfo;
 import org.jboss.ws.server.ServiceEndpointManager;
 import org.jboss.ws.server.WSDLFilePublisher;
 
 /**
- * The POJO deployer for web service endpoints. This Deployer is already decoupled from the target 
+ * The POJO deployer for web service endpoints. This Deployer is already decoupled from the target
  * container (i.e. JBoss, Tomcat). The containers deployer architecture should be used to populate
  * the UnifiedDeploymentInfo object.
- * 
+ *
  * @deprecated
  * This functionality should be handled by the ServiceEndpointManager
- * 
+ *
  * @author Thomas.Diesler at jboss.org
  * @since 12-May-2006
  */
@@ -76,42 +82,26 @@
       try
       {
          UnifiedMetaData wsMetaData;
-         if (udi.type == UnifiedDeploymentInfo.DeploymentType.JSR109_JSE)
+         if (udi.type == UnifiedDeploymentInfo.DeploymentType.JAXRPC_JSE)
          {
-            JSR109ServerMetaDataBuilder builder = new JSR109ServerMetaDataBuilder();
-            builder.setClassLoader(udi.classLoader);
-            wsMetaData = builder.buildMetaData((JSR109Deployment)udi);
+            JAXRPCServerMetaDataBuilder builder = new JAXRPCServerMetaDataBuilder();
+            wsMetaData = builder.buildMetaData((JAXRPCDeployment)udi);
          }
-         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JSR109_EJB21)
+         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JAXRPC_EJB21)
          {
-            JSR109ServerMetaDataBuilder builder = new JSR109ServerMetaDataBuilder();
-            builder.setClassLoader(udi.classLoader);
-            wsMetaData = builder.buildMetaData((JSR109Deployment)udi);
+            JAXRPCServerMetaDataBuilder builder = new JAXRPCServerMetaDataBuilder();
+            wsMetaData = builder.buildMetaData((JAXRPCDeployment)udi);
          }
-         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JSR181_JSE)
+         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JAXWS_JSE)
          {
-            JSR181MetaDataBuilderJSE builder = new JSR181MetaDataBuilderJSE();
-            builder.setClassLoader(udi.classLoader);
+            JAXWSMetaDataBuilderJSE builder = new JAXWSMetaDataBuilderJSE();
             wsMetaData = builder.buildMetaData(udi);
          }
-         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JSR181_EJB21)
+         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JAXWS_EJB3)
          {
-            JSR181MetaDataBuilderEJB21 builder = new JSR181MetaDataBuilderEJB21();
-            builder.setClassLoader(udi.classLoader);
+            JAXWSMetaDataBuilderEJB3 builder = new JAXWSMetaDataBuilderEJB3();
             wsMetaData = builder.buildMetaData(udi);
          }
-         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JSR181_EJB3)
-         {
-            JSR181MetaDataBuilderEJB3 builder = new JSR181MetaDataBuilderEJB3();
-            builder.setClassLoader(udi.classLoader);
-            wsMetaData = builder.buildMetaData(udi);
-         }
-         else if (udi.type == UnifiedDeploymentInfo.DeploymentType.JAXWS_PROVIDER_JSE)
-         {
-            JAXWSProviderMetaDataBuilderJSE builder = new JAXWSProviderMetaDataBuilderJSE();
-            builder.setClassLoader(udi.classLoader);
-            wsMetaData = builder.buildMetaData(udi);
-         }
          else
          {
             throw new IllegalStateException("Invalid type:  " + udi.type);

Modified: trunk/src/main/java/org/jboss/ws/deployment/UnifiedDeploymentInfo.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/UnifiedDeploymentInfo.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/deployment/UnifiedDeploymentInfo.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -28,7 +28,7 @@
 import java.util.Map;
 
 /**
- * The container independent deployment info. 
+ * The container independent deployment info.
  *
  * @author Thomas.Diesler at jboss.org
  * @since 05-May-2006
@@ -37,7 +37,7 @@
 {
    public enum DeploymentType
    {
-      JSR109_Client, JSR109_JSE, JSR109_EJB21, JSR181_JSE, JSR181_EJB21, JSR181_EJB3, JAXWS_PROVIDER_JSE, JAXWS_PROVIDER_EJB21, JAXWS_PROVIDER_EJB3
+      JAXRPC_Client, JAXRPC_JSE, JAXRPC_EJB21, JAXRPC_EJB3, JAXWS_JSE, JAXWS_EJB21, JAXWS_EJB3
    };
 
    public UnifiedDeploymentInfo(DeploymentType type)
@@ -70,7 +70,7 @@
          name = parent.getCanonicalName() + "/" + name;
       return name;
    }
-   
+
    public String toString()
    {
       StringBuilder builder = new StringBuilder();

Modified: trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXRPCDeployerJSE.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXRPCDeployerJSE.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXRPCDeployerJSE.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -29,9 +29,9 @@
 import org.jboss.deployers.spi.deployer.DeploymentUnit;
 import org.jboss.metadata.WebMetaData;
 import org.jboss.virtual.VirtualFile;
-import org.jboss.ws.deployment.JSR109Deployment;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
+import org.jboss.ws.metadata.builder.jaxrpc.JAXRPCDeployment;
 
 /**
  * A deployer JAXRPC JSE Endpoints
@@ -44,7 +44,7 @@
    @Override
    protected DeploymentType getDeploymentType()
    {
-      return DeploymentType.JSR109_JSE;
+      return DeploymentType.JAXRPC_JSE;
    }
 
    @Override
@@ -58,7 +58,7 @@
    protected UnifiedDeploymentInfo createUnifiedDeploymentInfo(DeploymentUnit unit)
    {
       URL webservicesUrl = getWebServicesURL(unit);
-      UnifiedDeploymentInfo udi = new JSR109Deployment(getDeploymentType(), webservicesUrl);
+      UnifiedDeploymentInfo udi = new JAXRPCDeployment(getDeploymentType(), webservicesUrl);
       DeploymentInfoAdaptor.buildDeploymentInfo(udi, unit);
       return udi;
    }

Modified: trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerEJB3.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerEJB3.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerEJB3.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -26,12 +26,13 @@
 import java.util.Iterator;
 
 import javax.jws.WebService;
+import javax.xml.ws.WebServiceProvider;
 
 import org.jboss.deployers.spi.deployer.DeploymentUnit;
 import org.jboss.ejb3.EJBContainer;
 import org.jboss.ejb3.Ejb3Deployment;
 import org.jboss.ejb3.stateless.StatelessContainer;
-import org.jboss.ws.deployment.JSR181Deployment;
+import org.jboss.ws.deployment.JAXWSDeployment;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
 
@@ -46,13 +47,13 @@
    @Override
    protected DeploymentType getDeploymentType()
    {
-      return DeploymentType.JSR181_EJB3;
+      return DeploymentType.JAXWS_EJB3;
    }
-   
+
    @Override
    protected UnifiedDeploymentInfo createUnifiedDeploymentInfo(DeploymentUnit unit)
    {
-      UnifiedDeploymentInfo udi = new JSR181Deployment(getDeploymentType());
+      UnifiedDeploymentInfo udi = new JAXWSDeployment(getDeploymentType());
       DeploymentInfoAdaptor.buildDeploymentInfo(udi, unit);
       return udi;
    }
@@ -69,7 +70,7 @@
          while (it.hasNext())
          {
             EJBContainer container = (EJBContainer)it.next();
-            if (container instanceof StatelessContainer && container.resolveAnnotation(WebService.class) != null)
+            if (isJAXWSBean(container))
             {
                isWebServiceDeployment = true;
                break;
@@ -79,4 +80,10 @@
 
       return isWebServiceDeployment;
    }
-}
+
+   private boolean isJAXWSBean(EJBContainer container)
+   {
+      return container instanceof StatelessContainer && (container.resolveAnnotation(WebService.class) != null
+            || container.resolveAnnotation(WebServiceProvider.class) != null);
+   }
+}
\ No newline at end of file

Modified: trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerJSE.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerJSE.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/integration/jboss50/JAXWSDeployerJSE.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -32,7 +32,7 @@
 import org.jboss.deployers.spi.deployer.DeploymentUnit;
 import org.jboss.metadata.WebMetaData;
 import org.jboss.metadata.web.Servlet;
-import org.jboss.ws.deployment.JSR181Deployment;
+import org.jboss.ws.deployment.JAXWSDeployment;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
 
@@ -44,12 +44,10 @@
  */
 public class JAXWSDeployerJSE extends AbstractJSEDeployer
 {
-   private DeploymentType deploymentType;
-
    @Override
    protected DeploymentType getDeploymentType()
    {
-      return deploymentType;
+      return DeploymentType.JAXWS_JSE;
    }
 
    @Override
@@ -75,18 +73,11 @@
 
                String beanName = servlet.getServletClass();
                Class<?> servletClass = anLoader.loadClass(beanName);
-               if (servletClass.isAnnotationPresent(WebService.class))
+               if (servletClass.isAnnotationPresent(WebService.class) || servletClass.isAnnotationPresent(WebServiceProvider.class))
                {
-                  deploymentType = DeploymentType.JSR181_JSE;
                   isWebServiceDeployment = true;
                   break;
                }
-               if (servletClass.isAnnotationPresent(WebServiceProvider.class))
-               {
-                  deploymentType = DeploymentType.JAXWS_PROVIDER_JSE;
-                  isWebServiceDeployment = true;
-                  break;
-               }
             }
          }
          catch (Exception ex)
@@ -101,8 +92,8 @@
    @Override
    protected UnifiedDeploymentInfo createUnifiedDeploymentInfo(DeploymentUnit unit)
    {
-      UnifiedDeploymentInfo udi = new JSR181Deployment(getDeploymentType());
+      UnifiedDeploymentInfo udi = new JAXWSDeployment(getDeploymentType());
       DeploymentInfoAdaptor.buildDeploymentInfo(udi, unit);
       return udi;
    }
-}
+}
\ No newline at end of file

Modified: trunk/src/main/java/org/jboss/ws/integration/jboss50/ServiceRefHandler.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/integration/jboss50/ServiceRefHandler.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/integration/jboss50/ServiceRefHandler.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -38,9 +38,9 @@
 import org.jboss.naming.Util;
 import org.jboss.webservice.metadata.serviceref.ServiceRefMetaData;
 import org.jboss.ws.WSException;
-import org.jboss.ws.deployment.JSR109ClientDeployment;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo;
 import org.jboss.ws.jaxrpc.ServiceReferenceable;
+import org.jboss.ws.metadata.builder.jaxrpc.JAXRPCClientDeployment;
 import org.jboss.ws.metadata.j2ee.UnifiedServiceRefMetaData;
 import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
 import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMappingFactory;
@@ -88,7 +88,7 @@
             wsServiceRef.setWsdlDefinition(wsdlDefinition);
 
             // build the container independent deployment info
-            UnifiedDeploymentInfo udi = new JSR109ClientDeployment(UnifiedDeploymentInfo.DeploymentType.JSR109_Client);
+            UnifiedDeploymentInfo udi = new JAXRPCClientDeployment(UnifiedDeploymentInfo.DeploymentType.JAXRPC_Client);
             DeploymentInfoAdaptor.buildDeploymentInfo(udi, (DeploymentUnit)deployment);
 
             ServiceReferenceable ref = new ServiceReferenceable(wsServiceRef, udi);

Modified: trunk/src/main/java/org/jboss/ws/integration/tomcat/TomcatServiceEndpointServlet.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/integration/tomcat/TomcatServiceEndpointServlet.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/integration/tomcat/TomcatServiceEndpointServlet.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -37,12 +37,12 @@
 import org.jboss.kernel.spi.registry.KernelRegistryEntry;
 import org.jboss.logging.Logger;
 import org.jboss.ws.WSException;
-import org.jboss.ws.deployment.JSR109Deployment;
-import org.jboss.ws.deployment.JSR181Deployment;
+import org.jboss.ws.deployment.JAXWSDeployment;
 import org.jboss.ws.deployment.ServiceEndpointDeployer;
 import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.metadata.builder.jaxrpc.JAXRPCDeployment;
+import org.jboss.ws.server.AbstractServiceEndpointServlet;
 import org.jboss.ws.server.KernelLocator;
-import org.jboss.ws.server.AbstractServiceEndpointServlet;
 
 /**
  * A servlet that is installed for every web service endpoint.
@@ -62,7 +62,7 @@
       {
          CrossContextLoader jbwsLoader = CrossContextLoader.newInstance(config.getServletContext());
          Thread.currentThread().setContextClassLoader(jbwsLoader);
-         
+
          super.init(config);
          deployServiceEndpoints(getServletContext());
       }
@@ -87,7 +87,7 @@
          {
             CrossContextLoader jbwsLoader = CrossContextLoader.newInstance(getServletContext());
             Thread.currentThread().setContextClassLoader(jbwsLoader);
-         }         
+         }
          super.service(req, res);
       }
       finally
@@ -96,7 +96,7 @@
       }
    }
 
-   /** 
+   /**
     * Bootstrap the Microkernel and initialize the
     * ServiceEndpointManager
     */
@@ -158,11 +158,11 @@
       URL webservices109URL = ctxLoader.findResource("WEB-INF/webservices.xml");
       if (webservices109URL != null)
       {
-         udi = new JSR109Deployment(UnifiedDeploymentInfo.DeploymentType.JSR109_JSE, webservices109URL);
+         udi = new JAXRPCDeployment(UnifiedDeploymentInfo.DeploymentType.JAXRPC_JSE, webservices109URL);
       }
       else
       {
-         udi = new JSR181Deployment(UnifiedDeploymentInfo.DeploymentType.JSR181_JSE);
+         udi = new JAXWSDeployment(UnifiedDeploymentInfo.DeploymentType.JAXWS_JSE);
       }
 
       DeploymentInfoAdaptor.buildDeploymentInfo(udi, ctxLoader, servletContext);

Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/ServiceImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/ServiceImpl.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/ServiceImpl.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -39,11 +39,11 @@
 import javax.xml.rpc.handler.HandlerChain;
 import javax.xml.rpc.handler.HandlerRegistry;
 
-import org.jboss.ws.deployment.JSR109ClientMetaDataBuilder;
 import org.jboss.ws.metadata.EndpointMetaData;
 import org.jboss.ws.metadata.OperationMetaData;
 import org.jboss.ws.metadata.ServiceMetaData;
 import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.builder.jaxrpc.JAXRPCClientMetaDataBuilder;
 import org.jboss.ws.metadata.j2ee.UnifiedServiceRefMetaData;
 import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
 import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
@@ -56,7 +56,7 @@
  * remote operation on the target service endpoint.
  * <li>Instance of a generated stub class
  * </ul>
- * 
+ *
  * @author Thomas.Diesler at jboss.org
  * @since 10-Oct-2004
  */
@@ -87,12 +87,11 @@
    ServiceImpl(QName serviceName, URL wsdlURL, URL mappingURL, URL securityURL)
    {
       this.wsdlLocation = wsdlURL;
-      JSR109ClientMetaDataBuilder builder = new JSR109ClientMetaDataBuilder();
+      JAXRPCClientMetaDataBuilder builder = new JAXRPCClientMetaDataBuilder();
 
       ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader();
-      builder.setClassLoader(ctxClassLoader);
 
-      serviceMetaData = builder.buildMetaData(serviceName, wsdlURL, mappingURL, securityURL, null);
+      serviceMetaData = builder.buildMetaData(serviceName, wsdlURL, mappingURL, securityURL, null, ctxClassLoader);
       handlerRegistry = new HandlerRegistryImpl();
    }
 
@@ -102,15 +101,14 @@
    ServiceImpl(QName serviceName, URL wsdlURL, JavaWsdlMapping mappingURL, WSSecurityConfiguration securityConfig, UnifiedServiceRefMetaData serviceRefMetaData)
    {
       this.wsdlLocation = wsdlURL;
-      JSR109ClientMetaDataBuilder builder = new JSR109ClientMetaDataBuilder();
+      JAXRPCClientMetaDataBuilder builder = new JAXRPCClientMetaDataBuilder();
 
       ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader();
-      builder.setClassLoader(ctxClassLoader);
 
-      serviceMetaData = builder.buildMetaData(serviceName, wsdlURL, mappingURL, securityConfig, serviceRefMetaData);
+      serviceMetaData = builder.buildMetaData(serviceName, wsdlURL, mappingURL, securityConfig, serviceRefMetaData, ctxClassLoader);
       handlerRegistry = new HandlerRegistryImpl();
    }
-   
+
    public ServiceMetaData getServiceMetaData()
    {
       return serviceMetaData;
@@ -118,7 +116,7 @@
 
    /**
     * Gets the location of the WSDL document for this Service.
-    * 
+    *
     * @return URL for the location of the WSDL document for this service
     */
    public URL getWSDLDocumentLocation()
@@ -128,7 +126,7 @@
 
    /**
     * Gets the name of this service.
-    * 
+    *
     * @return Qualified name of this service
     */
    public QName getServiceName()
@@ -138,7 +136,7 @@
 
    /**
     * Creates a Call instance.
-    * 
+    *
     * @param portName
     *            Qualified name for the target service endpoint
     * @return Call instance
@@ -154,7 +152,7 @@
 
    /**
     * Creates a Call instance.
-    * 
+    *
     * @param portName
     *            Qualified name for the target service endpoint
     * @param operationName
@@ -174,7 +172,7 @@
 
    /**
     * Creates a Call instance.
-    * 
+    *
     * @param portName
     *            Qualified name for the target service endpoint
     * @param opName
@@ -195,7 +193,7 @@
     * Creates a Call object not associated with specific operation or target
     * service endpoint. This Call object needs to be configured using the
     * setter methods on the Call interface.
-    * 
+    *
     * @return Call object
     * @throws javax.xml.rpc.ServiceException
     *             If any error in the creation of the Call object
@@ -213,7 +211,7 @@
     * interface. <p/> Each invocation of the getCalls method returns a new
     * array of preconfigured Call objects <p/> This method requires the Service
     * implementation class to have access to the WSDL related metadata.
-    * 
+    *
     * @param portName
     *            Qualified name for the target service endpoint
     * @return Call[] Array of pre-configured Call objects
@@ -273,7 +271,7 @@
    /**
     * Returns an Iterator for the list of QNames of service endpoints grouped
     * by this service
-    * 
+    *
     * @return Returns java.util.Iterator with elements of type
     *         javax.xml.namespace.QName
     * @throws javax.xml.rpc.ServiceException

Modified: trunk/src/main/java/org/jboss/ws/jaxws/spi/ServiceDelegateImpl.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxws/spi/ServiceDelegateImpl.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/jaxws/spi/ServiceDelegateImpl.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -45,8 +45,6 @@
 import javax.xml.ws.spi.ServiceDelegate;
 
 import org.jboss.ws.Constants;
-import org.jboss.ws.deployment.JAXWSClientMetaDataBuilder;
-import org.jboss.ws.deployment.JSR181ClientMetaDataBuilder;
 import org.jboss.ws.jaxrpc.MetaDataSynchronization;
 import org.jboss.ws.jaxws.client.ClientImpl;
 import org.jboss.ws.jaxws.client.DispatchImpl;
@@ -57,6 +55,8 @@
 import org.jboss.ws.metadata.ServiceMetaData;
 import org.jboss.ws.metadata.EndpointMetaData.Type;
 import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
+import org.jboss.ws.metadata.builder.jaxws.JAXWSClientEndpointMetaDataBuilder;
+import org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder;
 
 /**
  * Service delegates are used internally by Service objects to allow pluggability of JAX-WS implementations.
@@ -71,7 +71,7 @@
 {
    // The executor service
    private static ExecutorService defaultExecutor = Executors.newCachedThreadPool();
-   
+
    // The service meta data that is associated with this JAXWS Service
    private ServiceMetaData serviceMetaData;
    // The ports known by this service
@@ -89,10 +89,8 @@
       JAXWSClientMetaDataBuilder builder = new JAXWSClientMetaDataBuilder();
 
       ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader();
-      builder.setClassLoader(ctxClassLoader);
+      serviceMetaData = builder.buildMetaData(serviceName, wsdlURL, ctxClassLoader);
 
-      serviceMetaData = builder.buildMetaData(serviceName, wsdlURL);
-
       for (EndpointMetaData epMetaData : serviceMetaData.getEndpoints())
       {
          QName portName = epMetaData.getQName();
@@ -159,7 +157,7 @@
          // Adjust the endpoint meta data according to the annotations
          if (annotatedPorts.contains(portName) == false)
          {
-            JSR181ClientMetaDataBuilder metaDataBuilder = new JSR181ClientMetaDataBuilder();
+            JAXWSClientEndpointMetaDataBuilder metaDataBuilder = new JAXWSClientEndpointMetaDataBuilder();
             metaDataBuilder.rebuildEndpointMetaData(epMetaData, seiClass);
          }
       }
@@ -267,7 +265,7 @@
    {
       if ((executor instanceof ExecutorService) == false)
          throw new IllegalArgumentException("Supported executors must implement " + ExecutorService.class.getName());
-      
+
       this.executor = (ExecutorService)executor;
    }
 

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/JAXWSMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/JAXWSMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/JAXWSMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.ws.metadata.builder;
+
+/**
+ * Abstract class that represents a JAX-WS metadata builder.
+ *
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @version $Revision$
+ */
+public class JAXWSMetaDataBuilder extends MetaDataBuilder
+{
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/JAXWSMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Copied: trunk/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java (from rev 1460, trunk/src/main/java/org/jboss/ws/deployment/MetaDataBuilder.java)
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/MetaDataBuilder.java	2006-11-17 16:50:33 UTC (rev 1460)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,438 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder;
+
+// $Id$
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.management.ObjectName;
+import javax.wsdl.Definition;
+import javax.wsdl.Import;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.UnknownExtensibilityElement;
+import javax.wsdl.extensions.soap.SOAPAddress;
+import javax.xml.namespace.QName;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.common.CommonSOAPBinding;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.jaxrpc.Use;
+import org.jboss.ws.metadata.ClientEndpointMetaData;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedEjbPortComponentMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedMessageDrivenMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
+import org.jboss.ws.metadata.wsdl.NCName;
+import org.jboss.ws.metadata.wsdl.WSDLBinding;
+import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLInterface;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
+import org.jboss.ws.metadata.wsse.WSSecurityConfigurationFactory;
+import org.jboss.ws.server.ServiceEndpointManager;
+import org.jboss.ws.server.ServiceEndpointManagerFactory;
+import org.jboss.ws.utils.ObjectNameFactory;
+import org.w3c.dom.Element;
+
+/** An abstract meta data builder.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 19-May-2005
+ */
+public abstract class MetaDataBuilder
+{
+   // provide logging
+   private final static Logger log = Logger.getLogger(MetaDataBuilder.class);
+
+   public static WSSecurityConfiguration getWsSecurityConfiguration(UnifiedDeploymentInfo udi) throws IOException
+   {
+      WSSecurityConfiguration config = null;
+
+      String resource = WSSecurityConfigurationFactory.SERVER_RESOURCE_NAME;
+      if (udi.metaData instanceof UnifiedWebMetaData)
+      {
+         resource = "WEB-INF/" + resource;
+      }
+      else
+      {
+         resource = "META-INF/" + resource;
+      }
+
+      URL location = udi.classLoader.getResource(resource);
+      if (location != null)
+      {
+         config = WSSecurityConfigurationFactory.newInstance().parse(location);
+
+         // Get and set deployment path to the keystore file
+         if (config.getKeyStoreFile() != null)
+         {
+            location = udi.classLoader.getResource(config.getKeyStoreFile());
+            if (location != null)
+               config.setKeyStoreURL(location);
+         }
+
+         if (config.getTrustStoreFile() != null)
+         {
+            location = udi.classLoader.getResource(config.getTrustStoreFile());
+            if (location != null)
+               config.setTrustStoreURL(location);
+         }
+      }
+
+      return config;
+   }
+
+   /** Inititialize the endpoint binding */
+   protected void initEndpointBinding(WSDLEndpoint wsdlEndpoint, ClientEndpointMetaData epMetaData)
+   {
+      WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getWsdlService().getWsdlDefinitions();
+      WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
+      WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getQName());
+      String bindingType = wsdlBinding.getType();
+      if (Constants.NS_SOAP11.equals(bindingType))
+         epMetaData.setBindingId(CommonSOAPBinding.SOAP11HTTP_BINDING);
+      else if (Constants.NS_SOAP12.equals(bindingType))
+         epMetaData.setBindingId(CommonSOAPBinding.SOAP12HTTP_BINDING);
+   }
+
+   /** Initialize the endpoint encoding style from the binding operations
+    */
+   protected void initEndpointEncodingStyle(EndpointMetaData epMetaData)
+   {
+      WSDLDefinitions wsdlDefinitions = epMetaData.getServiceMetaData().getWsdlDefinitions();
+      for (WSDLService wsdlService : wsdlDefinitions.getServices())
+      {
+         for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
+         {
+            if (epMetaData.getQName().equals(wsdlEndpoint.getQName()))
+            {
+               QName bindQName = wsdlEndpoint.getBinding();
+               NCName ncName = new NCName(bindQName.getLocalPart());
+               WSDLBinding wsdlBinding = wsdlDefinitions.getBinding(ncName);
+               if (wsdlBinding == null)
+                  throw new WSException("Cannot obtain binding: " + ncName);
+
+               for (WSDLBindingOperation wsdlBindingOperation : wsdlBinding.getOperations())
+               {
+                  String encStyle = wsdlBindingOperation.getEncodingStyle();
+                  epMetaData.setEncodingStyle(Use.valueOf(encStyle));
+               }
+            }
+         }
+      }
+   }
+
+
+   public static void initEndpointAddress(UnifiedDeploymentInfo udi, ServerEndpointMetaData sepMetaData, String linkName)
+   {
+      String contextRoot = sepMetaData.getContextRoot();
+      String urlPattern = sepMetaData.getURLPattern();
+
+      if (udi.metaData instanceof UnifiedWebMetaData)
+      {
+         UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
+         String jbwebContextRoot = webMetaData.getContextRoot();
+         if (jbwebContextRoot != null)
+            contextRoot = jbwebContextRoot;
+
+         Map<String, String> servletMappings = webMetaData.getServletMappings();
+         urlPattern = (String)servletMappings.get(linkName);
+         if (urlPattern == null)
+            throw new WSException("Cannot obtain url pattern for servlet name: " + linkName);
+      }
+
+      if (udi.metaData instanceof UnifiedApplicationMetaData)
+      {
+         UnifiedApplicationMetaData applMetaData = (UnifiedApplicationMetaData)udi.metaData;
+         UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)applMetaData.getBeanByEjbName(linkName);
+         if (beanMetaData == null)
+            throw new WSException("Cannot obtain meta data for ejb link: " + linkName);
+
+         String wsContextRoot = applMetaData.getWebServiceContextRoot();
+         if (wsContextRoot != null)
+            contextRoot = wsContextRoot;
+
+         UnifiedEjbPortComponentMetaData ejbpcMetaData = beanMetaData.getPortComponent();
+         if (ejbpcMetaData != null && ejbpcMetaData.getPortComponentURI() != null)
+         {
+            String pcUrlPattern = ejbpcMetaData.getPortComponentURI();
+            if (pcUrlPattern != null)
+               urlPattern = pcUrlPattern;
+         }
+      }
+
+      // If not, derive the context root from the deployment
+      if (contextRoot == null)
+      {
+         contextRoot = "/";
+         if (udi.parent != null)
+         {
+            String shortName = udi.parent.shortName;
+            shortName = shortName.substring(0, shortName.indexOf('.'));
+            contextRoot += shortName + "-";
+         }
+         String shortName = udi.shortName;
+         shortName = shortName.substring(0, shortName.indexOf('.'));
+         contextRoot += shortName;
+      }
+
+      if (contextRoot.startsWith("/") == false)
+         contextRoot = "/" + contextRoot;
+      if (urlPattern == null)
+         urlPattern = "/" + linkName;
+      if (urlPattern.startsWith("/") == false)
+         urlPattern = "/" + urlPattern;
+
+      sepMetaData.setContextRoot(contextRoot);
+      sepMetaData.setURLPattern(urlPattern);
+
+      String servicePath = contextRoot + urlPattern;
+      sepMetaData.setEndpointAddress(getServiceEndpointAddress(null, servicePath));
+   }
+
+   public static ObjectName getServiceEndpointID(UnifiedDeploymentInfo udi, ServerEndpointMetaData sepMetaData)
+   {
+      String linkName = sepMetaData.getLinkName();
+      String context = sepMetaData.getContextRoot();
+      if (context.startsWith("/"))
+         context = context.substring(1);
+
+      StringBuilder idstr = new StringBuilder(ServerEndpointMetaData.SEPID_DOMAIN + ":");
+      idstr.append(ServerEndpointMetaData.SEPID_PROPERTY_CONTEXT + "=" + context);
+      idstr.append("," + ServerEndpointMetaData.SEPID_PROPERTY_ENDPOINT + "=" + linkName);
+
+      // Add JMS destination JNDI name for MDB endpoints
+      if (udi.metaData instanceof UnifiedApplicationMetaData)
+      {
+         String ejbName = sepMetaData.getLinkName();
+         if (ejbName == null)
+            throw new WSException("Cannot obtain ejb-link from port component");
+
+         UnifiedApplicationMetaData applMetaData = (UnifiedApplicationMetaData)udi.metaData;
+         UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)applMetaData.getBeanByEjbName(ejbName);
+         if (beanMetaData == null)
+            throw new WSException("Cannot obtain ejb meta data for: " + ejbName);
+
+         if (beanMetaData instanceof UnifiedMessageDrivenMetaData)
+         {
+            UnifiedMessageDrivenMetaData mdMetaData = (UnifiedMessageDrivenMetaData)beanMetaData;
+            String jndiName = mdMetaData.getDestinationJndiName();
+            idstr.append(",jms=" + jndiName);
+         }
+      }
+
+      return ObjectNameFactory.create(idstr.toString());
+   }
+
+
+   /** Get the web service address for a given path
+    */
+   public static String getServiceEndpointAddress(String uriScheme, String servicePath)
+   {
+      if (servicePath == null || servicePath.length() == 0)
+         throw new WSException("Service path cannot be null");
+
+      if (servicePath.endsWith("/*"))
+         servicePath = servicePath.substring(0, servicePath.length() - 2);
+
+      if (uriScheme == null)
+         uriScheme = "http";
+
+      ServiceEndpointManagerFactory factory = ServiceEndpointManagerFactory.getInstance();
+      ServiceEndpointManager epManager = factory.getServiceEndpointManager();
+      String host = epManager.getWebServiceHost();
+      int port = epManager.getWebServicePort();
+      if ("https".equals(uriScheme))
+         port = epManager.getWebServiceSecurePort();
+
+      String urlStr = uriScheme + "://" + host + ":" + port + servicePath;
+      try
+      {
+         return new URL(urlStr).toExternalForm();
+      }
+      catch (MalformedURLException e)
+      {
+         throw new WSException("Malformed URL: " + urlStr);
+      }
+   }
+
+   /** Replace the address locations for a given port component.
+    */
+   public static void replaceAddressLocation(ServerEndpointMetaData epMetaData)
+   {
+      WSDLDefinitions wsdlDefinitions = epMetaData.getServiceMetaData().getWsdlDefinitions();
+      QName portName = epMetaData.getQName();
+
+      boolean endpointFound = false;
+      for (WSDLService wsdlService : wsdlDefinitions.getServices())
+      {
+         for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
+         {
+            QName wsdlPortName = wsdlEndpoint.getQName();
+            if (wsdlPortName.equals(portName))
+            {
+               endpointFound = true;
+
+               String orgAddress = wsdlEndpoint.getAddress();
+               String uriScheme = getUriScheme(orgAddress);
+
+               String transportGuarantee = epMetaData.getTransportGuarantee();
+               if ("CONFIDENTIAL".equals(transportGuarantee))
+                  uriScheme = "https";
+
+               String servicePath = epMetaData.getContextRoot() + epMetaData.getURLPattern();
+               String serviceEndpointURL = getServiceEndpointAddress(uriScheme, servicePath);
+
+               ServiceEndpointManagerFactory factory = ServiceEndpointManagerFactory.getInstance();
+               ServiceEndpointManager epManager = factory.getServiceEndpointManager();
+               boolean alwaysModify = epManager.isAlwaysModifySOAPAddress();
+
+               if (alwaysModify || uriScheme == null || orgAddress.indexOf("REPLACE_WITH_ACTUAL_URL") >= 0)
+               {
+                  log.debug("Replace service endpoint address '" + orgAddress + "' with '" + serviceEndpointURL + "'");
+                  wsdlEndpoint.setAddress(serviceEndpointURL);
+                  epMetaData.setEndpointAddress(serviceEndpointURL);
+
+                  // modify the wsdl-1.1 definition
+                  if (wsdlDefinitions.getWsdlOneOneDefinition() != null)
+                     replaceWSDL11SOAPAddress(wsdlDefinitions, portName, serviceEndpointURL);
+               }
+               else
+               {
+                  log.debug("Don't replace service endpoint address '" + orgAddress + "'");
+                  try
+                  {
+                     epMetaData.setEndpointAddress(new URL(orgAddress).toExternalForm());
+                  }
+                  catch (MalformedURLException e)
+                  {
+                     throw new WSException("Malformed URL: " + orgAddress);
+                  }
+               }
+            }
+         }
+      }
+
+      if (endpointFound == false)
+         throw new WSException("Cannot find port in wsdl: " + portName);
+   }
+
+   private static void replaceWSDL11SOAPAddress(WSDLDefinitions wsdlDefinitions, QName portQName, String serviceEndpointURL)
+   {
+      Definition wsdlOneOneDefinition = wsdlDefinitions.getWsdlOneOneDefinition();
+      String tnsURI = wsdlOneOneDefinition.getTargetNamespace();
+
+      // search for matching portElement and replace the address URI
+      Port wsdlOneOnePort = modifySOAPAddress(tnsURI, portQName, serviceEndpointURL, wsdlOneOneDefinition.getServices());
+
+      // recursivly process imports if none can be found
+      if (wsdlOneOnePort == null && !wsdlOneOneDefinition.getImports().isEmpty())
+      {
+
+         Iterator imports = wsdlOneOneDefinition.getImports().values().iterator();
+         while (imports.hasNext())
+         {
+            List l = (List)imports.next();
+            Iterator importsByNS = l.iterator();
+            while (importsByNS.hasNext())
+            {
+               Import anImport = (Import)importsByNS.next();
+               wsdlOneOnePort = modifySOAPAddress(anImport.getNamespaceURI(), portQName, serviceEndpointURL, anImport.getDefinition().getServices());
+            }
+         }
+      }
+
+      // if it still doesn't exist something is wrong
+      if (wsdlOneOnePort == null)
+         throw new IllegalArgumentException("Cannot find port with name '" + portQName + "' in wsdl document");
+   }
+
+   private static Port modifySOAPAddress(String tnsURI, QName portQName, String serviceEndpointURL, Map services)
+   {
+      QName SOAP12_ADDRESS = new QName(Constants.NS_SOAP12, "address");
+
+      Port wsdlOneOnePort = null;
+      Iterator itServices = services.values().iterator();
+      while (itServices.hasNext())
+      {
+         Service wsdlOneOneService = (Service)itServices.next();
+         Map wsdlOneOnePorts = wsdlOneOneService.getPorts();
+         Iterator itPorts = wsdlOneOnePorts.keySet().iterator();
+         while (itPorts.hasNext())
+         {
+            String portLocalName = (String)itPorts.next();
+            if (portQName.equals(new QName(tnsURI, portLocalName)))
+            {
+               wsdlOneOnePort = (Port)wsdlOneOnePorts.get(portLocalName);
+               List extElements = wsdlOneOnePort.getExtensibilityElements();
+               for (Object extElement : extElements)
+               {
+                  QName elementType = ((ExtensibilityElement)extElement).getElementType();
+                  if (extElement instanceof SOAPAddress)
+                  {
+                     SOAPAddress address = (SOAPAddress)extElement;
+                     address.setLocationURI(serviceEndpointURL);
+                  }
+                  else if (SOAP12_ADDRESS.equals(elementType))
+                  {
+                     Element domElement = ((UnknownExtensibilityElement)extElement).getElement();
+                     domElement.setAttribute("location", serviceEndpointURL);
+                  }
+               }
+            }
+         }
+      }
+
+      return wsdlOneOnePort;
+   }
+
+   private static String getUriScheme(String addrStr)
+   {
+      try
+      {
+         URI addrURI = new URI(addrStr);
+         String scheme = addrURI.getScheme();
+         return scheme;
+      }
+      catch (URISyntaxException e)
+      {
+         return null;
+      }
+   }
+}

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientDeployment.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientDeployment.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientDeployment.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxrpc;
+
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
+
+
+// $Id$
+
+/**
+ * The container independent deployment info. 
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 05-May-2006
+ */
+public class JAXRPCClientDeployment extends UnifiedDeploymentInfo
+{
+
+   public JAXRPCClientDeployment(DeploymentType type)
+   {
+      super(type);
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientDeployment.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,260 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxrpc;
+
+//$Id$
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.metadata.ClientEndpointMetaData;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.ServiceMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.EndpointMetaData.Type;
+import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
+import org.jboss.ws.metadata.config.jaxrpc.WSClientConfigJAXRPC;
+import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedServiceRefMetaData;
+import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMappingFactory;
+import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
+import org.jboss.ws.metadata.wsdl.NCName;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
+import org.jboss.ws.metadata.wsse.WSSecurityConfigurationFactory;
+
+/**
+ * A client side meta data builder.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 19-May-2005
+ */
+public class JAXRPCClientMetaDataBuilder extends JAXRPCMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXRPCClientMetaDataBuilder.class);
+
+   /** Build from WSDL and jaxrpc-mapping.xml
+    */
+   public ServiceMetaData buildMetaData(QName serviceQName, URL wsdlURL, URL mappingURL, URL securityURL,
+         UnifiedServiceRefMetaData serviceRefMetaData, ClassLoader loader)
+   {
+      try
+      {
+         JavaWsdlMapping javaWsdlMapping = null;
+         if (mappingURL != null)
+         {
+            JavaWsdlMappingFactory mappingFactory = JavaWsdlMappingFactory.newInstance();
+            javaWsdlMapping = mappingFactory.parse(mappingURL);
+         }
+
+         WSSecurityConfiguration securityConfig = null;
+         if (securityURL != null)
+         {
+            securityConfig = WSSecurityConfigurationFactory.newInstance().parse(securityURL);
+         }
+
+         return buildMetaData(serviceQName, wsdlURL, javaWsdlMapping, securityConfig, serviceRefMetaData, loader);
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+
+   /** Build from WSDL and jaxrpc-mapping.xml
+    */
+   public ServiceMetaData buildMetaData(QName serviceQName, URL wsdlURL, JavaWsdlMapping javaWsdlMapping, WSSecurityConfiguration securityConfig,
+         UnifiedServiceRefMetaData serviceRefMetaData, ClassLoader loader)
+   {
+      log.debug("START buildMetaData: [service=" + serviceQName + "]");
+      try
+      {
+         UnifiedMetaData wsMetaData = new UnifiedMetaData();
+         wsMetaData.setClassLoader(loader);
+
+         ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, serviceQName);
+         wsMetaData.addService(serviceMetaData);
+
+         serviceMetaData.setWsdlFile(wsdlURL.toExternalForm());
+         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+
+         URL mappingURL = null;
+         if (javaWsdlMapping != null)
+         {
+            mappingURL = new URL(Constants.NS_JBOSSWS_URI + "/dummy-mapping-url");
+            wsMetaData.addMappingDefinition(mappingURL.toExternalForm(), javaWsdlMapping);
+            serviceMetaData.setJaxrpcMappingFile(mappingURL.toExternalForm());
+         }
+
+         if (securityConfig != null)
+         {
+            serviceMetaData.setSecurityConfiguration(securityConfig);
+            setupSecurity(securityConfig, loader);
+         }
+
+         buildMetaDataInternal(serviceMetaData, wsdlDefinitions, javaWsdlMapping, serviceRefMetaData);
+
+         // eagerly initialize
+         wsMetaData.eagerInitialize();
+
+         log.debug("END buildMetaData: " + wsMetaData);
+         return serviceMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+
+   private void buildMetaDataInternal(ServiceMetaData serviceMetaData, WSDLDefinitions wsdlDefinitions, JavaWsdlMapping javaWsdlMapping,
+         UnifiedServiceRefMetaData serviceRefMetaData) throws IOException
+   {
+      QName serviceQName = serviceMetaData.getServiceName();
+
+      // Get the WSDL service
+      WSDLService wsdlService = null;
+      if (serviceQName == null)
+      {
+         if (wsdlDefinitions.getServices().length != 1)
+            throw new IllegalArgumentException("Expected a single service element");
+
+         wsdlService = wsdlDefinitions.getServices()[0];
+         serviceMetaData.setServiceName(wsdlService.getQName());
+      }
+      else
+      {
+         wsdlService = wsdlDefinitions.getService(new NCName(serviceQName.getLocalPart()));
+      }
+      if (wsdlService == null)
+         throw new IllegalArgumentException("Cannot obtain wsdl service: " + serviceQName);
+
+      // Build type mapping meta data
+      setupTypesMetaData(serviceMetaData);
+
+      // Build endpoint meta data
+      for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
+      {
+         QName portName = wsdlEndpoint.getQName();
+         QName interfaceQName = wsdlEndpoint.getInterface().getQName();
+         ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, interfaceQName, Type.JAXRPC);
+         epMetaData.setEndpointAddress(wsdlEndpoint.getAddress());
+         serviceMetaData.addEndpoint(epMetaData);
+
+         // config-name, config-file
+         if (serviceRefMetaData != null)
+         {
+            String configName = serviceRefMetaData.getConfigName();
+            if (configName != null)
+               epMetaData.setConfigName(configName);
+
+            String configFile = serviceRefMetaData.getConfigFile();
+            if (configFile != null)
+               epMetaData.setConfigFile(configFile);
+         }
+
+         // Init the endpoint binding
+         initEndpointBinding(wsdlEndpoint, epMetaData);
+
+         // Init the service encoding style
+         initEndpointEncodingStyle(epMetaData);
+
+         ServiceEndpointInterfaceMapping seiMapping = null;
+         if (javaWsdlMapping != null)
+         {
+            QName portType = wsdlEndpoint.getInterface().getQName();
+            seiMapping = javaWsdlMapping.getServiceEndpointInterfaceMappingByPortType(portType);
+            if (seiMapping != null)
+            {
+               epMetaData.setServiceEndpointInterfaceName(seiMapping.getServiceEndpointInterface());
+            }
+            else
+            {
+               log.warn("Cannot obtain the SEI mapping for: " + portType);
+            }
+         }
+
+         processEndpointMetaDataExtensions(epMetaData, wsdlDefinitions);
+         setupOperationsFromWSDL(epMetaData, wsdlEndpoint, seiMapping);
+         setupHandlers(serviceRefMetaData, portName, epMetaData);
+      }
+   }
+
+   private void setupHandlers(UnifiedServiceRefMetaData serviceRefMetaData, QName portName, EndpointMetaData epMetaData)
+   {
+      // Add pre handlers
+      WSClientConfigJAXRPC jaxrpcConfig = (WSClientConfigJAXRPC)epMetaData.getEndpointConfig();
+      epMetaData.addHandlers(jaxrpcConfig.getHandlers(epMetaData, HandlerType.PRE));
+
+      // Setup the endpoint handlers
+      if (serviceRefMetaData != null)
+      {
+         for (UnifiedHandlerMetaData uhmd : serviceRefMetaData.getHandlers())
+         {
+            Set<String> portNames = uhmd.getPortNames();
+            if (portNames.size() == 0 || portNames.contains(portName.getLocalPart()))
+            {
+               epMetaData.addHandler(uhmd.getHandlerMetaDataJAXRPC(epMetaData, HandlerType.ENDPOINT));
+            }
+         }
+      }
+
+      // Add post handlers
+      epMetaData.addHandlers(jaxrpcConfig.getHandlers(epMetaData, HandlerType.POST));
+   }
+
+   private void setupSecurity(WSSecurityConfiguration securityConfig, ClassLoader loader)
+   {
+      if (securityConfig.getKeyStoreFile() != null)
+      {
+         URL location = loader.getResource(securityConfig.getKeyStoreFile());
+         if (location != null)
+            securityConfig.setKeyStoreURL(location);
+      }
+
+      if (securityConfig.getTrustStoreFile() != null)
+      {
+         URL location = loader.getResource(securityConfig.getTrustStoreFile());
+         if (location != null)
+            securityConfig.setTrustStoreURL(location);
+      }
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCClientMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCDeployment.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCDeployment.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCDeployment.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxrpc;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
+import org.jboss.ws.metadata.jsr109.WebservicesFactory;
+import org.jboss.ws.metadata.jsr109.WebservicesMetaData;
+import org.jboss.xb.binding.ObjectModelFactory;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+
+// $Id$
+
+/**
+ * The container independent deployment info. 
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 05-May-2006
+ */
+public class JAXRPCDeployment extends UnifiedDeploymentInfo
+{
+   private WebservicesMetaData jsr109MetaData;
+
+   public JAXRPCDeployment(DeploymentType type, URL webservicesURL)
+   {
+      super(type);
+
+      try
+      {
+         // Unmarshall webservices.xml
+         InputStream is = webservicesURL.openStream();
+         try
+         {
+            Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
+            ObjectModelFactory factory = new WebservicesFactory(webservicesURL);
+            jsr109MetaData = (WebservicesMetaData)unmarshaller.unmarshal(is, factory, null);
+         }
+         finally
+         {
+            is.close();
+         }
+      }
+      catch (Exception ex)
+      {
+         throw new RuntimeException(ex);
+      }
+   }
+
+   public WebservicesMetaData getWebservicesMetaData()
+   {
+      return jsr109MetaData;
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCDeployment.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,970 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxrpc;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.rpc.encoding.TypeMappingRegistry;
+import javax.xml.ws.addressing.AddressingConstants;
+import javax.xml.ws.addressing.AddressingProperties;
+
+import org.apache.xerces.xs.XSTypeDefinition;
+import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.addressing.AddressingConstantsImpl;
+import org.jboss.ws.addressing.AddressingPropertiesImpl;
+import org.jboss.ws.addressing.metadata.AddressingOpMetaExt;
+import org.jboss.ws.eventing.EventingConstants;
+import org.jboss.ws.eventing.deployment.EventingEndpoint;
+import org.jboss.ws.eventing.metadata.EventingEpMetaExt;
+import org.jboss.ws.jaxrpc.LiteralTypeMapping;
+import org.jboss.ws.jaxrpc.Style;
+import org.jboss.ws.jaxrpc.TypeMappingImpl;
+import org.jboss.ws.jaxrpc.TypeMappingRegistryImpl;
+import org.jboss.ws.jaxrpc.UnqualifiedFaultException;
+import org.jboss.ws.jaxrpc.Use;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.FaultMetaData;
+import org.jboss.ws.metadata.OperationMetaData;
+import org.jboss.ws.metadata.ParameterMetaData;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.ServiceMetaData;
+import org.jboss.ws.metadata.TypeMappingMetaData;
+import org.jboss.ws.metadata.TypesMetaData;
+import org.jboss.ws.metadata.WrappedParameter;
+import org.jboss.ws.metadata.builder.MetaDataBuilder;
+import org.jboss.ws.metadata.jaxrpcmapping.ExceptionMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.JavaXmlTypeMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.MethodParamPartsMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointMethodMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.VariableMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.WsdlMessageMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.WsdlReturnValueMapping;
+import org.jboss.ws.metadata.wsdl.NCName;
+import org.jboss.ws.metadata.wsdl.WSDLBinding;
+import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
+import org.jboss.ws.metadata.wsdl.WSDLBindingOperationInput;
+import org.jboss.ws.metadata.wsdl.WSDLBindingOperationOutput;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLInterface;
+import org.jboss.ws.metadata.wsdl.WSDLInterfaceFault;
+import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
+import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationInput;
+import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationOutfault;
+import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperationOutput;
+import org.jboss.ws.metadata.wsdl.WSDLMIMEPart;
+import org.jboss.ws.metadata.wsdl.WSDLProperty;
+import org.jboss.ws.metadata.wsdl.WSDLRPCPart;
+import org.jboss.ws.metadata.wsdl.WSDLRPCSignatureItem;
+import org.jboss.ws.metadata.wsdl.WSDLSOAPHeader;
+import org.jboss.ws.metadata.wsdl.WSDLTypes;
+import org.jboss.ws.metadata.wsdl.WSDLUtils;
+import org.jboss.ws.metadata.wsdl.WSDLRPCSignatureItem.Direction;
+import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
+import org.jboss.ws.utils.JavaUtils;
+import org.jboss.ws.xop.XOPScanner;
+
+/**
+ * A meta data builder that is based on webservices.xml.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @authoer <a href="mailto:jason.greene at jboss.org">Jason T. Greene</a>
+ * @since 19-Oct-2005
+ */
+public abstract class JAXRPCMetaDataBuilder extends MetaDataBuilder
+{
+   // provide logging
+   final Logger log = Logger.getLogger(JAXRPCMetaDataBuilder.class);
+
+   protected QName lookupSchemaType(WSDLInterfaceOperation operation, QName element)
+   {
+      WSDLDefinitions wsdlDefinitions = operation.getWsdlInterface().getWsdlDefinitions();
+      WSDLTypes wsdlTypes = wsdlDefinitions.getWsdlTypes();
+      return wsdlTypes.getXMLType(element);
+   }
+
+   protected void setupTypesMetaData(ServiceMetaData serviceMetaData)
+   {
+      WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+      JavaWsdlMapping javaWsdlMapping = serviceMetaData.getJavaWsdlMapping();
+      TypesMetaData typesMetaData = serviceMetaData.getTypesMetaData();
+
+      // Copy the schema locations to the types meta data
+      if (wsdlDefinitions != null)
+      {
+         WSDLTypes wsdlTypes = wsdlDefinitions.getWsdlTypes();
+         typesMetaData.setSchemaModel(WSDLUtils.getSchemaModel(wsdlTypes));
+      }
+
+      // Copy the type mappings to the types meta data
+      if (javaWsdlMapping != null)
+      {
+         for (JavaXmlTypeMapping xmlTypeMapping : javaWsdlMapping.getJavaXmlTypeMappings())
+         {
+            String javaTypeName = xmlTypeMapping.getJavaType();
+            String qnameScope = xmlTypeMapping.getQnameScope();
+
+            QName xmlType = xmlTypeMapping.getRootTypeQName();
+            QName anonymousXMLType = xmlTypeMapping.getAnonymousTypeQName();
+            if (xmlType == null && anonymousXMLType != null)
+               xmlType = anonymousXMLType;
+
+            String nsURI = xmlType.getNamespaceURI();
+            if (Constants.NS_SCHEMA_XSD.equals(nsURI) == false && Constants.URI_SOAP11_ENC.equals(nsURI) == false)
+            {
+               TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
+               tmMetaData.setQNameScope(qnameScope);
+               typesMetaData.addTypeMapping(tmMetaData);
+            }
+         }
+
+         for (ExceptionMapping exceptionMapping : javaWsdlMapping.getExceptionMappings())
+         {
+            QName xmlType = exceptionMapping.getWsdlMessage();
+            String javaTypeName = exceptionMapping.getExceptionType();
+            TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
+            typesMetaData.addTypeMapping(tmMetaData);
+         }
+      }
+   }
+
+   protected void setupOperationsFromWSDL(EndpointMetaData epMetaData, WSDLEndpoint wsdlEndpoint, ServiceEndpointInterfaceMapping seiMapping)
+   {
+      WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getInterface().getWsdlDefinitions();
+
+      // For every WSDL interface operation build the OperationMetaData
+      WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
+      for (WSDLInterfaceOperation wsdlOperation : wsdlInterface.getOperations())
+      {
+         String opName = wsdlOperation.getName().toString();
+         QName opQName = wsdlOperation.getQName();
+
+         // Set java method name
+         String javaName = opName.substring(0, 1).toLowerCase() + opName.substring(1);
+         ServiceEndpointMethodMapping seiMethodMapping = null;
+         if (seiMapping != null)
+         {
+            epMetaData.setServiceEndpointInterfaceName(seiMapping.getServiceEndpointInterface());
+
+            seiMethodMapping = seiMapping.getServiceEndpointMethodMappingByWsdlOperation(opName);
+            if (seiMethodMapping == null)
+               throw new WSException("Cannot obtain method mapping for: " + opName);
+
+            javaName = seiMethodMapping.getJavaMethodName();
+         }
+
+         OperationMetaData opMetaData = new OperationMetaData(epMetaData, opQName, javaName);
+         epMetaData.addOperation(opMetaData);
+
+         // Set the operation style
+         String style = wsdlOperation.getStyle();
+         epMetaData.setStyle((Constants.URI_STYLE_IRI.equals(style) ? Style.DOCUMENT : Style.RPC));
+
+         // Set the operation MEP
+         if (Constants.WSDL20_PATTERN_IN_ONLY.equals(wsdlOperation.getPattern()))
+            opMetaData.setOneWayOperation(true);
+
+         // Set the operation SOAPAction
+         WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getQName());
+         WSDLBindingOperation wsdlBindingOperation = wsdlBinding.getOperationByRef(opQName);
+         if (wsdlBindingOperation != null)
+            opMetaData.setSOAPAction(wsdlBindingOperation.getSOAPAction());
+
+         // Get the type mapping for the encoding style
+         String encStyle = epMetaData.getEncodingStyle().toURI();
+         TypeMappingRegistry tmRegistry = new TypeMappingRegistryImpl();
+         TypeMappingImpl typeMapping = (TypeMappingImpl)tmRegistry.getTypeMapping(encStyle);
+
+         // Build the parameter meta data
+         if (opMetaData.getStyle() == Style.RPC)
+         {
+            buildParameterMetaDataRpc(opMetaData, wsdlOperation, seiMethodMapping, typeMapping);
+         }
+         else
+         {
+            buildParameterMetaDataDoc(opMetaData, wsdlOperation, seiMethodMapping, typeMapping);
+         }
+
+         // Build operation faults
+         buildFaultMetaData(opMetaData, wsdlOperation);
+
+         // process further operation extensions
+         processOpMetaExtensions(opMetaData, wsdlOperation);
+      }
+   }
+
+   private ParameterMetaData buildInputParameter(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, String partName, QName xmlName, QName xmlType, int pos)
+   {
+      WSDLRPCSignatureItem item = wsdlOperation.getRpcSignatureitem(partName);
+      if (item != null)
+         pos = item.getPosition();
+
+      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
+      if (seiMethodMapping != null)
+      {
+         MethodParamPartsMapping paramMapping = seiMethodMapping.getMethodParamPartsMappingByPartName(partName);
+         if (paramMapping == null)
+            throw new WSException("Cannot obtain method parameter mapping for message part '" + partName + "' in wsdl operation: "
+                  + seiMethodMapping.getWsdlOperation());
+
+         javaTypeName = paramMapping.getParamType();
+         pos = paramMapping.getParamPosition();
+      }
+
+      JavaWsdlMapping javaWsdlMapping = opMetaData.getEndpointMetaData().getServiceMetaData().getJavaWsdlMapping();
+      if (javaTypeName == null && javaWsdlMapping != null)
+      {
+         String packageName = javaWsdlMapping.getPackageNameForNamespaceURI(xmlType.getNamespaceURI());
+         if (packageName != null)
+         {
+            javaTypeName = packageName + "." + xmlType.getLocalPart();
+            log.warn("Guess java type from package mapping: [xmlType=" + xmlType + ",javaType=" + javaTypeName + "]");
+         }
+      }
+
+      if (javaTypeName == null)
+         throw new WSException("Cannot obtain java type mapping for: " + xmlType);
+
+      ParameterMetaData inMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
+      inMetaData.setPartName(partName);
+      inMetaData.setIndex(pos);
+      opMetaData.addParameter(inMetaData);
+
+      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
+      // In arrays of user types, wscompile does not generate a mapping in jaxrpc-mapping.xml
+      if (typesMetaData.getTypeMappingByXMLType(xmlType) == null)
+      {
+         String nsURI = xmlType.getNamespaceURI();
+         if (Constants.NS_SCHEMA_XSD.equals(nsURI) == false && Constants.URI_SOAP11_ENC.equals(nsURI) == false)
+         {
+            TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
+            typesMetaData.addTypeMapping(tmMetaData);
+         }
+      }
+
+      return inMetaData;
+   }
+
+   private ParameterMetaData buildOutputParameter(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, int pos, String partName, QName xmlName, QName xmlType, TypeMappingImpl typeMapping)
+   {
+      // Default is first listed output
+      boolean hasReturnMapping = opMetaData.getReturnParameter() == null;
+
+      WSDLRPCSignatureItem item = wsdlOperation.getRpcSignatureitem(partName);
+      if (item != null)
+      {
+         hasReturnMapping = item.getDirection() == Direction.RETURN;
+         pos = item.getPosition();
+      }
+
+      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
+      if (seiMethodMapping != null)
+      {
+         MethodParamPartsMapping paramMapping = seiMethodMapping.getMethodParamPartsMappingByPartName(partName);
+         if (paramMapping != null)
+         {
+            javaTypeName = paramMapping.getParamType();
+            pos = paramMapping.getParamPosition();
+            hasReturnMapping = false;
+         }
+         else
+         {
+            WsdlReturnValueMapping returnMapping = seiMethodMapping.getWsdlReturnValueMapping();
+            String mappingPart = returnMapping.getWsdlMessagePartName();
+            if (returnMapping != null && mappingPart != null && partName.equals(mappingPart));
+            {
+               javaTypeName = returnMapping.getMethodReturnValue();
+               hasReturnMapping = true;
+            }
+         }
+      }
+
+      JavaWsdlMapping javaWsdlMapping = opMetaData.getEndpointMetaData().getServiceMetaData().getJavaWsdlMapping();
+      if (javaTypeName == null && javaWsdlMapping != null)
+      {
+         String packageName = javaWsdlMapping.getPackageNameForNamespaceURI(xmlType.getNamespaceURI());
+         if (packageName != null)
+         {
+            javaTypeName = packageName + "." + xmlType.getLocalPart();
+            log.warn("Guess java type from package mapping: [xmlType=" + xmlType + ",javaType=" + javaTypeName + "]");
+         }
+      }
+
+      if (javaTypeName == null)
+         throw new WSException("Cannot obtain java type mapping for: " + xmlType);
+
+      ParameterMetaData outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
+      outMetaData.setPartName(partName);
+
+      if (hasReturnMapping)
+      {
+         opMetaData.setReturnParameter(outMetaData);
+      }
+      else
+      {
+         outMetaData.setIndex(pos);
+         outMetaData.setMode(ParameterMode.OUT);
+         opMetaData.addParameter(outMetaData);
+      }
+
+      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
+      // In arrays of user types, wscompile does not generate a mapping in jaxrpc-mapping.xml
+      if (typesMetaData.getTypeMappingByXMLType(xmlType) == null)
+      {
+         String nsURI = xmlType.getNamespaceURI();
+         if (Constants.NS_SCHEMA_XSD.equals(nsURI) == false && Constants.URI_SOAP11_ENC.equals(nsURI) == false)
+         {
+            TypeMappingMetaData tmMetaData = new TypeMappingMetaData(typesMetaData, xmlType, javaTypeName);
+            typesMetaData.addTypeMapping(tmMetaData);
+         }
+      }
+
+      return outMetaData;
+   }
+
+   private int processBindingParameters(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, WSDLBindingOperation bindingOperation, int wsdlPosition)
+   {
+      WSDLBindingOperationInput bindingInput = bindingOperation.getInputs()[0];
+      for (WSDLSOAPHeader header : bindingInput.getSoapHeaders())
+      {
+         QName xmlName = header.getElement();
+         QName xmlType = lookupSchemaType(wsdlOperation, xmlName);
+         String partName = header.getPartName();
+
+         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++);
+         pmd.setInHeader(true);
+      }
+
+      for (WSDLMIMEPart mimePart : bindingInput.getMimeParts())
+      {
+         String partName = mimePart.getPartName();
+         QName xmlName = new QName(partName);
+         QName xmlType = mimePart.getXmlType();
+
+         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++);
+         pmd.setSwA(true);
+         pmd.setMimeTypes(mimePart.getMimeTypes());
+      }
+
+      return wsdlPosition;
+   }
+
+   private int processBindingOutputParameters(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, WSDLBindingOperation bindingOperation, int wsdlPosition)
+   {
+      WSDLBindingOperationOutput bindingOutput = bindingOperation.getOutputs()[0];
+      for (WSDLSOAPHeader header : bindingOutput.getSoapHeaders())
+      {
+         String partName = header.getPartName();
+         QName xmlName = header.getElement();
+
+         ParameterMetaData outMetaData = opMetaData.getParameter(xmlName);
+         if (outMetaData != null)
+         {
+            outMetaData.setMode(ParameterMode.INOUT);
+         }
+         else
+         {
+            QName xmlType = lookupSchemaType(wsdlOperation, xmlName);
+
+            ParameterMetaData pmd = buildOutputParameter(opMetaData, wsdlOperation, seiMethodMapping, wsdlPosition, partName, xmlName, xmlType, typeMapping);
+            pmd.setInHeader(true);
+
+            if (opMetaData.getReturnParameter() != pmd)
+               wsdlPosition++;
+         }
+      }
+
+      for (WSDLMIMEPart mimePart : bindingOutput.getMimeParts())
+      {
+         String partName = mimePart.getPartName();
+         QName xmlName = new QName(partName);
+
+         ParameterMetaData outMetaData = opMetaData.getParameter(xmlName);
+         if (outMetaData != null)
+         {
+            outMetaData.setMode(ParameterMode.INOUT);
+         }
+         else
+         {
+            QName xmlType = mimePart.getXmlType();
+
+            ParameterMetaData pmd = buildOutputParameter(opMetaData, wsdlOperation, seiMethodMapping, wsdlPosition, partName, xmlName, xmlType, typeMapping);
+            pmd.setSwA(true);
+            pmd.setMimeTypes(mimePart.getMimeTypes());
+
+            if (opMetaData.getReturnParameter() != pmd)
+               wsdlPosition++;
+         }
+      }
+
+      return wsdlPosition;
+   }
+
+   /* SOAP-ENC:Array
+    *
+    * FIXME: This hack should be removed as soon as we can reliably get the
+    * soapenc:arrayType from wsdl + schema.
+    */
+   private void setupSOAPArrayParameter(ParameterMetaData paramMetaData)
+   {
+      Use use = paramMetaData.getOperationMetaData().getUse();
+      String xmlTypeLocalPart = paramMetaData.getXmlType().getLocalPart();
+      if (use == Use.ENCODED && xmlTypeLocalPart.indexOf("ArrayOf") >= 0)
+      {
+         paramMetaData.setSOAPArrayParam(true);
+         try
+         {
+            String javaTypeName = paramMetaData.getJavaTypeName();
+            // This approach determins the array component type from the javaTypeName.
+            // It will not work for user defined types, nor will the array dimension be
+            // initialized properly. Ideally the array parameter meta data should be initialized
+            // from the XSModel or wherever it is defined in WSDL.
+            Class javaType = JavaUtils.loadJavaType(javaTypeName);
+            Class compJavaType = javaType.getComponentType();
+
+            if (xmlTypeLocalPart.indexOf("ArrayOfArrayOf") >= 0)
+               compJavaType = compJavaType.getComponentType();
+
+            QName compXMLType = new LiteralTypeMapping().getXMLType(compJavaType);
+            paramMetaData.setSOAPArrayCompType(compXMLType);
+         }
+         catch (ClassNotFoundException e)
+         {
+            // ignore that user defined types cannot be loaded yet
+         }
+      }
+   }
+
+   private void setupXOPAttachmentParameter(WSDLInterfaceOperation operation, ParameterMetaData paramMetaData)
+   {
+      QName xmlType = paramMetaData.getXmlType();
+
+      // An XOP parameter is detected if it is a complex type that derives from xsd:base64Binary
+      WSDLTypes wsdlTypes = operation.getWsdlInterface().getWsdlDefinitions().getWsdlTypes();
+      JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlTypes);
+      String localPart = xmlType.getLocalPart() != null ? xmlType.getLocalPart() : "";
+      String ns = xmlType.getNamespaceURI() != null ? xmlType.getNamespaceURI() : "";
+      XSTypeDefinition xsType = schemaModel.getTypeDefinition(localPart, ns);
+      XOPScanner scanner = new XOPScanner();
+      if(scanner.findXOPTypeDef(xsType)!=null | (localPart.equals("base64Binary")&&ns.equals(Constants.NS_SCHEMA_XSD)))
+      {
+         // FIXME: read the xmime:contentType from the element declaration
+         // See SchemaUtils#findXOPTypeDef(XSTypeDefinition typeDef) for details
+
+         /*
+         FIXME: the classloader is not set yet
+         paramMetaData.setXopContentType(
+             MimeUtils.resolveMimeType(paramMetaData.getJavaType())
+         );
+         */
+
+         paramMetaData.setXOP(true);
+
+      }
+   }
+
+   /*
+    * Perhaps the JAX-RPC mapping model should be hash based. For now we optimize just this case.
+    */
+   private Map<String, String> createVariableMappingMap(VariableMapping[] mappings)
+   {
+      HashMap<String, String> map = new HashMap<String, String>();
+      if (mappings != null)
+         for (VariableMapping mapping : mappings)
+            map.put(mapping.getXmlElementName(), mapping.getJavaVariableName());
+
+      return map;
+   }
+
+   private void buildParameterMetaDataRpc(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping,
+         TypeMappingImpl typeMapping)
+   {
+      log.trace("buildParameterMetaDataRpc: " + opMetaData.getQName());
+
+      WSDLBindingOperation bindingOperation = wsdlOperation.getBindingOperation();
+      if (bindingOperation == null)
+         throw new WSException("Could not locate binding operation for:" + opMetaData.getQName());
+
+      // RPC has one input
+      WSDLInterfaceOperationInput input = wsdlOperation.getInputs()[0];
+      int wsdlPosition = 0;
+      for (WSDLRPCPart part : input.getChildParts())
+      {
+         QName xmlType = part.getType();
+         String partName = part.getName();
+         QName xmlName = new QName(partName);
+
+         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++);
+
+         setupXOPAttachmentParameter(wsdlOperation, pmd);
+         setupSOAPArrayParameter(pmd);
+      }
+
+      wsdlPosition = processBindingParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
+
+      WSDLInterfaceOperationOutput[] outputs = wsdlOperation.getOutputs();
+      if (outputs.length > 0)
+      {
+         WSDLInterfaceOperationOutput output = outputs[0];
+         for (WSDLRPCPart part : output.getChildParts())
+         {
+            String partName = part.getName();
+
+            ParameterMetaData outMetaData = opMetaData.getParameter(new QName(partName));
+            if (outMetaData != null)
+            {
+               outMetaData.setMode(ParameterMode.INOUT);
+            }
+            else
+            {
+               QName xmlName = new QName(partName);
+               QName xmlType = part.getType();
+
+               ParameterMetaData pmd = buildOutputParameter(opMetaData, wsdlOperation, seiMethodMapping, wsdlPosition, partName, xmlName, xmlType, typeMapping);
+               if (opMetaData.getReturnParameter() != pmd)
+                  wsdlPosition++;
+
+               setupXOPAttachmentParameter(wsdlOperation, pmd);
+               setupSOAPArrayParameter(pmd);
+            }
+         }
+
+         processBindingOutputParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
+      }
+      else if (wsdlOperation.getPattern() != Constants.WSDL20_PATTERN_IN_ONLY)
+      {
+         throw new WSException("RPC style was missing an output, and was not an IN-ONLY MEP.");
+      }
+   }
+
+   private int processDocElement(OperationMetaData operation, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter> wrappedParameters, List<WrappedParameter> wrappedResponseParameters)
+   {
+      WSDLInterfaceOperationInput input = wsdlOperation.getInputs()[0];
+      int wsdlPosition;
+
+      QName xmlName = input.getElement();
+      QName xmlType = input.getXMLType();
+      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
+
+      TypesMetaData typesMetaData = operation.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
+      TypeMappingMetaData typeMetaData = typesMetaData.getTypeMappingByXMLType(xmlType);
+      if (typeMetaData != null)
+         javaTypeName = typeMetaData.getJavaTypeName();
+
+      if (javaTypeName == null)
+         throw new WSException("Cannot obtain java type mapping for: " + xmlType);
+
+      // Check if we need to wrap the parameters
+      boolean isWrapped = isWrapped(seiMethodMapping, javaTypeName);
+      operation.getEndpointMetaData().setParameterStyle(isWrapped ? ParameterStyle.WRAPPED : ParameterStyle.BARE);
+
+      ParameterMetaData inMetaData = new ParameterMetaData(operation, xmlName, xmlType, javaTypeName);
+      operation.addParameter(inMetaData);
+
+
+      // Set the variable names
+      if (inMetaData.getOperationMetaData().isDocumentWrapped())
+      {
+         if (seiMethodMapping == null)
+            throw new IllegalArgumentException("Cannot wrap parameters without SEI method mapping");
+
+         ServiceEndpointInterfaceMapping seiMapping = seiMethodMapping.getServiceEndpointInterfaceMapping();
+         JavaXmlTypeMapping javaXmlTypeMapping = seiMapping.getJavaWsdlMapping().getTypeMappingForQName(xmlType);
+         if (javaXmlTypeMapping == null)
+            throw new WSException("Cannot obtain java/xml type mapping for: " + xmlType);
+
+
+         Map<String, String> variableMap = createVariableMappingMap(javaXmlTypeMapping.getVariableMappings());
+         for (MethodParamPartsMapping partMapping : seiMethodMapping.getMethodParamPartsMappings())
+         {
+            WsdlMessageMapping wsdlMessageMapping = partMapping.getWsdlMessageMapping();
+            if (wsdlMessageMapping == null)
+               throw new IllegalArgumentException("wsdl-message-message mapping required for document/literal wrapped");
+
+            String elementName = wsdlMessageMapping.getWsdlMessagePartName();
+            String variable = variableMap.get(wsdlMessageMapping.getWsdlMessagePartName());
+            if (variable == null)
+               throw new IllegalArgumentException("Could not determine variable name for element: " + elementName);
+
+            WrappedParameter wrapped = new WrappedParameter(new QName(elementName), partMapping.getParamType(), variable,
+                  partMapping.getParamPosition());
+
+
+            String parameterMode = wsdlMessageMapping.getParameterMode();
+            if (parameterMode == null || parameterMode.length() < 2)
+               throw new IllegalArgumentException("Invalid parameter mode for element: " + elementName);
+
+            if (! "OUT".equals(parameterMode))
+               wrappedParameters.add(wrapped);
+            if (! "IN".equals(parameterMode))
+               wrappedResponseParameters.add(wrapped);
+         }
+         inMetaData.setWrappedParameters(wrappedParameters);
+         wsdlPosition = wrappedParameters.size();
+      }
+      else
+      {
+         if (seiMethodMapping != null)
+         {
+            MethodParamPartsMapping part = seiMethodMapping.getMethodParamPartsMappingByPartName(input.getPartName());
+            if (part != null)
+            {
+               inMetaData.setJavaTypeName(part.getParamType());
+               inMetaData.setIndex(part.getParamPosition());
+            }
+         }
+
+         setupXOPAttachmentParameter(wsdlOperation, inMetaData);
+         wsdlPosition = 1;
+      }
+
+      return wsdlPosition;
+   }
+
+   private boolean isWrapped(ServiceEndpointMethodMapping seiMethodMapping, String javaTypeName)
+   {
+      boolean isWrapParameters = (seiMethodMapping != null ? seiMethodMapping.isWrappedElement() : false);
+      log.trace("isWrapParameters based on wrapped-element: " + isWrapParameters);
+      if (isWrapParameters == false && seiMethodMapping != null)
+      {
+
+         MethodParamPartsMapping[] partsMappings = seiMethodMapping.getMethodParamPartsMappings();
+         if (partsMappings.length > 0)
+         {
+            boolean matchingPartFound = false;
+            for (MethodParamPartsMapping partsMapping : partsMappings)
+            {
+               String paramTypeName = partsMapping.getParamType();
+               if (paramTypeName.equals(javaTypeName))
+               {
+                  matchingPartFound = true;
+                  break;
+               }
+               else
+               {
+                  // Check assignability,
+                  // JavaUtils.isAssignableFrom("org.w3c.dom.Element",
+                  // "javax.xml.soap.SOAPElement")
+                  try
+                  {
+                     Class paramType = JavaUtils.loadJavaType(paramTypeName);
+                     Class javaType = JavaUtils.loadJavaType(javaTypeName);
+
+                     // If it is assignable the explict mapping takes presedence
+                     // and we don't wrap
+                     if (JavaUtils.isAssignableFrom(javaType, paramType))
+                     {
+                        // javaTypeName = paramTypeName;
+                        matchingPartFound = true;
+                        break;
+                     }
+                  }
+                  catch (ClassNotFoundException e)
+                  {
+                     // Ignore. For simple types this should work, others should
+                     // be lexically equal
+                     // if it is not wrapped.
+                  }
+               }
+            }
+            // Do we really want to continue to handle invalid mappings?
+            isWrapParameters = (matchingPartFound == false);
+            log.trace("isWrapParameters based on matching parts: " + isWrapParameters);
+         }
+      }
+      return isWrapParameters;
+   }
+
+   private int processOutputDocElement(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation,
+         ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter> wrappedResponseParameters,
+         int wsdlPosition)
+   {
+      WSDLInterfaceOperationOutput opOutput = wsdlOperation.getOutputs()[0];
+      QName xmlName = opOutput.getElement();
+      QName xmlType = opOutput.getXMLType();
+
+      String javaTypeName = typeMapping.getJavaTypeName(xmlType);
+
+      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
+      if (typesMetaData.getTypeMappingByXMLType(xmlType) != null)
+         javaTypeName = typesMetaData.getTypeMappingByXMLType(xmlType).getJavaTypeName();
+
+      if (javaTypeName == null)
+         throw new WSException("Cannot obtain java/xml type mapping for: " + xmlType);
+
+      ParameterMetaData outMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, javaTypeName);
+
+      boolean hasReturnMapping = true;
+      if (opMetaData.isDocumentWrapped())
+      {
+         if (seiMethodMapping == null)
+            throw new IllegalArgumentException("Cannot wrap parameters without SEI method mapping");
+
+         WsdlReturnValueMapping returnValueMapping = seiMethodMapping.getWsdlReturnValueMapping();
+         if (returnValueMapping != null)
+         {
+            ServiceEndpointInterfaceMapping seiMapping = seiMethodMapping.getServiceEndpointInterfaceMapping();
+            JavaWsdlMapping javaWsdlMapping = seiMapping.getJavaWsdlMapping();
+            JavaXmlTypeMapping javaXmlTypeMapping = javaWsdlMapping.getTypeMappingForQName(xmlType);
+            if (javaXmlTypeMapping == null)
+               throw new WSException("Cannot obtain java/xml type mapping for: " + xmlType);
+
+            Map<String, String> map = createVariableMappingMap(javaXmlTypeMapping.getVariableMappings());
+            String elementName = returnValueMapping.getWsdlMessagePartName();
+            String variable = map.get(elementName);
+            if (variable == null)
+               throw new IllegalArgumentException("Could not determine variable name for element: " + elementName);
+
+            String wrappedType = returnValueMapping.getMethodReturnValue();
+            QName element = new QName(elementName);
+            WrappedParameter wrappedParameter = new WrappedParameter(element, wrappedType, variable, WrappedParameter.RETURN);
+            wrappedResponseParameters.add(0, wrappedParameter);
+         }
+
+         outMetaData.setWrappedParameters(wrappedResponseParameters);
+      }
+      else
+      {
+         if (seiMethodMapping != null)
+         {
+            MethodParamPartsMapping part = seiMethodMapping.getMethodParamPartsMappingByPartName(opOutput.getPartName());
+            String mode = null;
+            if (part != null)
+            {
+               WsdlMessageMapping wsdlMessageMapping = part.getWsdlMessageMapping();
+               mode = wsdlMessageMapping.getParameterMode();
+            }
+            if ("INOUT".equals(mode))
+            {
+               ParameterMetaData inMetaData = opMetaData.getParameter(xmlName);
+               if (inMetaData != null)
+               {
+                  inMetaData.setMode(ParameterMode.INOUT);
+                  return wsdlPosition;
+               }
+
+               throw new WSException("Could not update IN parameter to be INOUT, as indicated in the mapping: " + opOutput.getPartName());
+            }
+            // It's potentialy possible that an input parameter could exist with the same part name
+            else if ("OUT".equals(mode))
+            {
+               hasReturnMapping = false;
+               javaTypeName = part.getParamType();
+               outMetaData.setIndex(part.getParamPosition());
+               outMetaData.setJavaTypeName(javaTypeName);
+            }
+            else
+            {
+               WsdlReturnValueMapping returnValueMapping = seiMethodMapping.getWsdlReturnValueMapping();
+               if (returnValueMapping != null)
+               {
+                  javaTypeName = returnValueMapping.getMethodReturnValue();
+                  outMetaData.setJavaTypeName(javaTypeName);
+               }
+            }
+         }
+
+         setupXOPAttachmentParameter(wsdlOperation, outMetaData);
+      }
+
+      if (hasReturnMapping)
+      {
+         opMetaData.setReturnParameter(outMetaData);
+      }
+      else
+      {
+         opMetaData.addParameter(outMetaData);
+         outMetaData.setMode(ParameterMode.OUT);
+         wsdlPosition++;
+      }
+
+      return wsdlPosition;
+   }
+
+   private void buildParameterMetaDataDoc(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping,
+         TypeMappingImpl typeMapping)
+   {
+      log.trace("buildParameterMetaDataDoc: " + opMetaData.getQName());
+
+      WSDLBindingOperation bindingOperation = wsdlOperation.getBindingOperation();
+      if (bindingOperation == null)
+         throw new WSException("Could not locate binding operation for:" + bindingOperation);
+
+      List<WrappedParameter> wrappedParameters = new ArrayList<WrappedParameter>();
+      List<WrappedParameter> wrappedResponseParameters = new ArrayList<WrappedParameter>();
+
+      int wsdlPosition = 0;
+      // WS-I BP 1.0 allows document/literal bare to have zero message parts
+      if (wsdlOperation.getInputs().length > 0)
+      {
+         wsdlPosition = processDocElement(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, wrappedParameters, wrappedResponseParameters);
+         wsdlPosition = processBindingParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
+      }
+      else
+      {
+         // Set the default to bare in case there isn't an input object, revisit this
+         opMetaData.getEndpointMetaData().setParameterStyle(ParameterStyle.BARE);
+      }
+
+      if (wsdlOperation.getOutputs().length > 0)
+      {
+         wsdlPosition = processOutputDocElement(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, wrappedResponseParameters, wsdlPosition);
+         wsdlPosition = processBindingOutputParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
+      }
+   }
+
+   /**
+    * Build default action according to the pattern described in
+    * http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/
+    * Section 3.3.2 'Default Action Pattern'<br>
+    * [target namespace]/[port type name]/[input|output name]
+    *
+    * @param wsdlOperation
+    * @return action value
+    */
+   private String buildWsaActionValue(WSDLInterfaceOperation wsdlOperation)
+   {
+      WSDLProperty wsaAction = wsdlOperation.getProperty(Constants.WSDL_ATTRIBUTE_WSA_ACTION.toString());
+      String actionValue = null;
+
+      if (null == wsaAction)
+      {
+
+         String tns = wsdlOperation.getQName().getNamespaceURI();
+         String portTypeName = wsdlOperation.getQName().getLocalPart();
+         WSDLProperty messageName = wsdlOperation.getProperty("http://www.jboss.org/jbossws/messagename/in");
+
+         actionValue = new String(tns + "/" + portTypeName + "/" + messageName.getValue());
+      }
+      else
+      {
+         actionValue = wsaAction.getValue();
+      }
+
+      return actionValue;
+   }
+
+   protected void buildFaultMetaData(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation)
+   {
+      TypesMetaData typesMetaData = opMetaData.getEndpointMetaData().getServiceMetaData().getTypesMetaData();
+
+      WSDLInterface wsdlInterface = wsdlOperation.getWsdlInterface();
+      for (WSDLInterfaceOperationOutfault outFault : wsdlOperation.getOutfaults())
+      {
+         QName ref = outFault.getRef();
+
+         WSDLInterfaceFault wsdlFault = wsdlInterface.getFault(new NCName(ref.getLocalPart()));
+         QName xmlName = wsdlFault.getElement();
+         QName xmlType = wsdlFault.getXmlType();
+         String javaTypeName = null;
+
+         if (xmlType == null)
+         {
+            log.warn("Cannot obtain fault type for element: " + xmlName);
+            xmlType = xmlName;
+         }
+
+         TypeMappingMetaData tmMetaData = typesMetaData.getTypeMappingByXMLType(xmlType);
+         if (tmMetaData != null)
+            javaTypeName = tmMetaData.getJavaTypeName();
+
+         if (javaTypeName == null)
+         {
+            log.warn("Cannot obtain java type mapping for: " + xmlType);
+            javaTypeName = new UnqualifiedFaultException(xmlType).getClass().getName();
+         }
+
+         FaultMetaData faultMetaData = new FaultMetaData(opMetaData, xmlName, xmlType, javaTypeName);
+         opMetaData.addFault(faultMetaData);
+      }
+   }
+
+   protected void processEndpointMetaDataExtensions(EndpointMetaData epMetaData, WSDLDefinitions wsdlDefinitions)
+   {
+      for (WSDLInterface wsdlInterface : wsdlDefinitions.getInterfaces())
+      {
+         WSDLProperty eventSourceProp = wsdlInterface.getProperty(Constants.WSDL_PROPERTY_EVENTSOURCE);
+         if (eventSourceProp != null && epMetaData instanceof ServerEndpointMetaData)
+         {
+            ServerEndpointMetaData sepMetaData = (ServerEndpointMetaData)epMetaData;
+            String eventSourceNS = wsdlInterface.getQName().getNamespaceURI() + "/" + wsdlInterface.getQName().getLocalPart();
+            Object notificationSchema = null; // todo: resolve schema from operation message
+
+            EventingEpMetaExt ext = new EventingEpMetaExt(EventingConstants.NS_EVENTING);
+            ext.setEventSourceNS(eventSourceNS);
+            ext.setNotificationSchema(notificationSchema);
+
+            sepMetaData.addExtension(ext);
+            sepMetaData.setManagedEndpointBean(EventingEndpoint.class.getName());
+         }
+      }
+   }
+
+   /** Process operation meta data extensions. */
+   protected void processOpMetaExtensions(OperationMetaData opMetaData, WSDLInterfaceOperation wsdlOperation)
+   {
+
+      String tns = wsdlOperation.getQName().getNamespaceURI();
+      String portTypeName = wsdlOperation.getQName().getLocalPart();
+
+      AddressingProperties ADDR = new AddressingPropertiesImpl();
+      AddressingOpMetaExt addrExt = new AddressingOpMetaExt(ADDR.getNamespaceURI());
+
+      // inbound action
+      WSDLProperty wsaInAction = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_ACTION_IN);
+      if (wsaInAction != null)
+      {
+         addrExt.setInboundAction(wsaInAction.getValue());
+      }
+      else
+      {
+         WSDLProperty messageName = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_MESSAGE_NAME_IN);
+         addrExt.setInboundAction(tns + "/" + portTypeName + "/" + messageName);
+      }
+
+      // outbound action
+      WSDLProperty wsaOutAction = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_ACTION_OUT);
+      if (wsaOutAction != null)
+      {
+         addrExt.setOutboundAction(wsaOutAction.getValue());
+      }
+      else
+      {
+         WSDLProperty messageName = wsdlOperation.getProperty(Constants.WSDL_PROPERTY_MESSAGE_NAME_OUT);
+         addrExt.setOutboundAction(tns + "/" + portTypeName + "/" + messageName);
+      }
+
+      opMetaData.addExtension(addrExt);
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCServerMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCServerMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCServerMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,311 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.
+ */
+// $Id$
+package org.jboss.ws.metadata.builder.jaxrpc;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.ObjectName;
+import javax.xml.namespace.QName;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.WSException;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.ServiceMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.EndpointMetaData.Type;
+import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
+import org.jboss.ws.metadata.config.jaxrpc.WSEndpointConfigJAXRPC;
+import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedEjbPortComponentMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedWebSecurityMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedWebSecurityMetaData.UnifiedWebResourceCollection;
+import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
+import org.jboss.ws.metadata.jaxrpcmapping.ServiceEndpointInterfaceMapping;
+import org.jboss.ws.metadata.jsr109.PortComponentMetaData;
+import org.jboss.ws.metadata.jsr109.WebserviceDescriptionMetaData;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
+
+/**
+ * A server side meta data builder that is based on webservices.xml.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 19-May-2005
+ */
+public class JAXRPCServerMetaDataBuilder extends JAXRPCMetaDataBuilder
+{
+   // provide logging
+   final Logger log = Logger.getLogger(JAXRPCServerMetaDataBuilder.class);
+
+   /**
+    * Build from webservices.xml
+    */
+   public UnifiedMetaData buildMetaData(JAXRPCDeployment udi)
+   {
+      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
+      try
+      {
+         // For every webservice-description build the ServiceMetaData
+         UnifiedMetaData wsMetaData = new UnifiedMetaData();
+         wsMetaData.setDeploymentName(udi.getCanonicalName());
+         wsMetaData.setClassLoader(udi.classLoader);
+
+         WebserviceDescriptionMetaData[] wsDescriptionArr = udi.getWebservicesMetaData().getWebserviceDescriptions();
+         for (WebserviceDescriptionMetaData wsdMetaData : wsDescriptionArr)
+         {
+            ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, null);
+            serviceMetaData.setWebserviceDescriptionName(wsdMetaData.getWebserviceDescriptionName());
+            wsMetaData.addService(serviceMetaData);
+
+            // Unmarshall the WSDL
+            serviceMetaData.setWsdlFile(wsdMetaData.getWsdlFile());
+            WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+
+            // Unmarshall the jaxrpc-mapping.xml
+            serviceMetaData.setJaxrpcMappingFile(wsdMetaData.getJaxrpcMappingFile());
+            JavaWsdlMapping javaWsdlMapping = serviceMetaData.getJavaWsdlMapping();
+            if (javaWsdlMapping == null)
+               throw new WSException("jaxrpc-mapping-file not configured from webservices.xml");
+
+            // Build type mapping meta data
+            setupTypesMetaData(serviceMetaData);
+
+            // Assign the WS-Security configuration,
+            WSSecurityConfiguration securityConfiguration = getWsSecurityConfiguration(udi);
+            serviceMetaData.setSecurityConfiguration(securityConfiguration);
+
+            // For every port-component build the EndpointMetaData
+            PortComponentMetaData[] pcMetaDataArr = wsdMetaData.getPortComponents();
+            for (PortComponentMetaData pcMetaData : pcMetaDataArr)
+            {
+               QName portName = pcMetaData.getWsdlPort();
+
+               // JBWS-722
+               // <wsdl-port> in webservices.xml should be qualified
+               if (portName.getNamespaceURI().length() == 0)
+               {
+                  String nsURI = wsdlDefinitions.getTargetNamespace();
+                  portName = new QName(nsURI, portName.getLocalPart());
+                  log.warn("Adding wsdl targetNamespace to: " + portName);
+                  pcMetaData.setWsdlPort(portName);
+               }
+
+               WSDLEndpoint wsdlEndpoint = getWsdlEndpoint(wsdlDefinitions, portName);
+               if (wsdlEndpoint == null)
+                  throw new WSException("Cannot find port in wsdl: " + portName);
+
+               // set service name
+               serviceMetaData.setServiceName(wsdlEndpoint.getWsdlService().getQName());
+               QName interfaceQName = wsdlEndpoint.getInterface().getQName();
+
+               ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName, interfaceQName, Type.JAXRPC);
+               sepMetaData.setPortComponentName(pcMetaData.getPortComponentName());
+               String linkName = pcMetaData.getEjbLink() != null ? pcMetaData.getEjbLink() : pcMetaData.getServletLink();
+               sepMetaData.setLinkName(linkName);
+               serviceMetaData.addEndpoint(sepMetaData);
+
+               initEndpointEncodingStyle(sepMetaData);
+
+               initEndpointAddress(udi, sepMetaData, linkName);
+
+               if (udi.metaData instanceof UnifiedApplicationMetaData)
+               {
+                  UnifiedApplicationMetaData apMetaData = (UnifiedApplicationMetaData)udi.metaData;
+                  wsMetaData.setSecurityDomain(apMetaData.getSecurityDomain());
+
+                  // Copy the wsdl publish location from jboss.xml
+                  String wsdName = serviceMetaData.getWebserviceDescriptionName();
+                  String wsdlPublishLocation = apMetaData.getWsdlPublishLocationByName(wsdName);
+                  serviceMetaData.setWsdlPublishLocation(wsdlPublishLocation);
+
+                  // Copy <port-component> meta data
+                  UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)apMetaData.getBeanByEjbName(linkName);
+                  if (beanMetaData == null)
+                     throw new WSException("Cannot obtain UnifiedBeanMetaData for: " + linkName);
+
+                  String configName = apMetaData.getConfigName();
+                  if (configName != null)
+                     sepMetaData.setConfigName(configName);
+
+                  String configFile = apMetaData.getConfigFile();
+                  if (configFile != null)
+                     sepMetaData.setConfigFile(configFile);
+
+                  UnifiedEjbPortComponentMetaData bpcMetaData = beanMetaData.getPortComponent();
+                  if (bpcMetaData != null)
+                  {
+                     if (bpcMetaData.getAuthMethod() != null)
+                     {
+                        String authMethod = bpcMetaData.getAuthMethod();
+                        sepMetaData.setAuthMethod(authMethod);
+                     }
+                     if (bpcMetaData.getTransportGuarantee() != null)
+                     {
+                        String transportGuarantee = bpcMetaData.getTransportGuarantee();
+                        sepMetaData.setTransportGuarantee(transportGuarantee);
+                     }
+
+                     sepMetaData.setURLPattern(bpcMetaData.getURLPattern());
+                  }
+               }
+               else if (udi.metaData instanceof UnifiedWebMetaData)
+               {
+                  UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
+                  wsMetaData.setSecurityDomain(webMetaData.getSecurityDomain());
+
+                  String targetBean = webMetaData.getServletClassNames().get(linkName);
+                  sepMetaData.setServiceEndpointImplName(targetBean);
+
+                  // Copy the wsdl publish location from jboss-web.xml
+                  String wsdName = serviceMetaData.getWebserviceDescriptionName();
+                  String wsdlPublishLocation = webMetaData.getWsdlPublishLocationByName(wsdName);
+                  serviceMetaData.setWsdlPublishLocation(wsdlPublishLocation);
+
+                  String configName = webMetaData.getConfigName();
+                  if (configName != null)
+                     sepMetaData.setConfigName(configName);
+
+                  String configFile = webMetaData.getConfigFile();
+                  if (configFile != null)
+                     sepMetaData.setConfigFile(configFile);
+
+                  initTransportGuaranteeJSE(udi, sepMetaData, linkName);
+               }
+
+               // init service endpoint id
+               ObjectName sepID = getServiceEndpointID(udi, sepMetaData);
+               sepMetaData.setServiceEndpointID(sepID);
+
+               replaceAddressLocation(sepMetaData);
+
+               String seiName = pcMetaData.getServiceEndpointInterface();
+               sepMetaData.setServiceEndpointInterfaceName(seiName);
+
+               ServiceEndpointInterfaceMapping seiMapping = javaWsdlMapping.getServiceEndpointInterfaceMapping(seiName);
+               if (seiMapping == null)
+                  log.warn("Cannot obtain SEI mapping for: " + seiName);
+
+               // process endpoint meta extension
+               processEndpointMetaDataExtensions(sepMetaData, wsdlDefinitions);
+
+               // Setup the endpoint operations
+               setupOperationsFromWSDL(sepMetaData, wsdlEndpoint, seiMapping);
+
+               // Add pre handlers
+               WSEndpointConfigJAXRPC jaxrpcConfig = (WSEndpointConfigJAXRPC)sepMetaData.getEndpointConfig();
+               sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.PRE));
+
+               // Setup the endpoint handlers
+               for (UnifiedHandlerMetaData uhmd : pcMetaData.getHandlers())
+               {
+                  Set<String> portNames = uhmd.getPortNames();
+                  if (portNames.size() == 0 || portNames.contains(portName.getLocalPart()))
+                  {
+                     sepMetaData.addHandler(uhmd.getHandlerMetaDataJAXRPC(sepMetaData, HandlerType.ENDPOINT));
+                  }
+               }
+
+               // Add post handlers
+               sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.POST));
+            }
+         }
+
+         log.debug("END buildMetaData: " + wsMetaData);
+         return wsMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+
+   private WSDLEndpoint getWsdlEndpoint(WSDLDefinitions wsdlDefinitions, QName portName)
+   {
+      WSDLEndpoint wsdlEndpoint = null;
+      for (WSDLService wsdlService : wsdlDefinitions.getServices())
+      {
+         WSDLEndpoint auxEndpoint = wsdlService.getEndpoint(portName);
+         if (auxEndpoint != null)
+         {
+            wsdlEndpoint = auxEndpoint;
+            break;
+         }
+      }
+      return wsdlEndpoint;
+   }
+
+   /**
+    * Read the transport guarantee from web.xml
+    */
+   protected void initTransportGuaranteeJSE(UnifiedDeploymentInfo udi, EndpointMetaData epMetaData, String servletLink) throws IOException
+   {
+      UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
+      epMetaData.setTransportGuarantee(getTransportGuarantee(webMetaData, servletLink));
+   }
+
+
+   protected String getTransportGuarantee(final UnifiedWebMetaData webMetaData, final String servletLink)
+   {
+      String transportGuarantee = "";
+
+      Map<String, String> servletMappings = webMetaData.getServletMappings();
+      String urlPattern = servletMappings.get(servletLink);
+
+      if (urlPattern == null)
+         throw new WSException("Cannot find <url-pattern> for servlet-name: " + servletLink);
+
+      List<UnifiedWebSecurityMetaData> securityList = webMetaData.getSecurityMetaData();
+      for (UnifiedWebSecurityMetaData currentSecurity : securityList)
+      {
+         if (currentSecurity.getTransportGuarantee() != null && currentSecurity.getTransportGuarantee().length() > 0)
+         {
+            for (UnifiedWebResourceCollection currentCollection : currentSecurity.getWebResources())
+            {
+               for (String currentUrlPattern : currentCollection.getUrlPatterns())
+               {
+                  if (urlPattern.equals(currentUrlPattern))
+                  {
+                     transportGuarantee = currentSecurity.getTransportGuarantee();
+                  }
+               }
+            }
+         }
+      }
+
+      return transportGuarantee;
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCServerMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientEndpointMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientEndpointMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientEndpointMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,89 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.
+*/
+// $Id$
+package org.jboss.ws.metadata.builder.jaxws;
+
+import javax.jws.HandlerChain;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.ws.BindingType;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
+import org.jboss.ws.metadata.config.jaxws.WSClientConfigJAXWS;
+
+/**
+ * A client side meta data builder that is based on JSR-181 annotations
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 9-Aug-2006
+ */
+public class JAXWSClientEndpointMetaDataBuilder extends JAXWSWebServiceMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSClientEndpointMetaDataBuilder.class);
+
+   public void rebuildEndpointMetaData(EndpointMetaData epMetaData, Class<?> wsClass)
+   {
+      log.debug("START: rebuildMetaData");
+
+      // Clear the java types, etc.
+      resetMetaDataBuilder(epMetaData.getClassLoader());
+
+      // Nuke parameterStyle
+      epMetaData.setParameterStyle(null);
+
+      // Process an optional @BindingType annotation
+      if (wsClass.isAnnotationPresent(BindingType.class))
+         processBindingType(epMetaData, wsClass);
+
+      // Process @SOAPBinding
+      if (wsClass.isAnnotationPresent(SOAPBinding.class))
+         processSOAPBinding(epMetaData, wsClass);
+
+      // Clear handlers
+      epMetaData.clearHandlers();
+
+      // Add pre handlers
+      WSClientConfigJAXWS jaxwsConfig = (WSClientConfigJAXWS)epMetaData.getEndpointConfig();
+      epMetaData.addHandlers(jaxwsConfig.getHandlers(epMetaData, HandlerType.PRE));
+
+      // Process an optional @HandlerChain annotation
+      if (wsClass.isAnnotationPresent(HandlerChain.class))
+         processHandlerChain(epMetaData, wsClass);
+
+      // Add post handlers
+      epMetaData.addHandlers(jaxwsConfig.getHandlers(epMetaData, HandlerType.POST));
+
+      // Process @WebMethod
+      processWebMethods(epMetaData, wsClass, true);
+
+      // Initialize types
+      createJAXBContext(epMetaData);
+      populateXmlTypes(epMetaData);
+
+      // Eager initialization
+      epMetaData.eagerInitialize();
+
+      log.debug("END: rebuildMetaData\n" + epMetaData.getServiceMetaData());
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientEndpointMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,174 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxws;
+
+//$Id$
+
+import java.io.IOException;
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.jaxrpc.Style;
+import org.jboss.ws.metadata.ClientEndpointMetaData;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.OperationMetaData;
+import org.jboss.ws.metadata.ServiceMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.EndpointMetaData.Type;
+import org.jboss.ws.metadata.builder.JAXWSMetaDataBuilder;
+import org.jboss.ws.metadata.wsdl.NCName;
+import org.jboss.ws.metadata.wsdl.WSDLBinding;
+import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
+import org.jboss.ws.metadata.wsdl.WSDLInterface;
+import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
+import org.jboss.ws.metadata.wsdl.WSDLService;
+import org.jboss.ws.metadata.wsdl.WSDLUtils;
+import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
+
+/**
+ * A client side meta data builder.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 19-May-2005
+ */
+public class JAXWSClientMetaDataBuilder extends JAXWSMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSClientMetaDataBuilder.class);
+
+   /** Build from WSDL and jaxrpc-mapping.xml
+    */
+   public ServiceMetaData buildMetaData(QName serviceName, URL wsdlURL, ClassLoader loader)
+   {
+      if (wsdlURL == null)
+         throw new IllegalArgumentException("Invalid wsdlURL: " + wsdlURL);
+
+      log.debug("START buildMetaData: [service=" + serviceName + "]");
+      try
+      {
+         UnifiedMetaData wsMetaData = new UnifiedMetaData();
+
+         ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, serviceName);
+         wsMetaData.addService(serviceMetaData);
+
+         serviceMetaData.setWsdlFile(wsdlURL.toExternalForm());
+         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+
+         buildMetaDataInternal(serviceMetaData, wsdlDefinitions);
+
+         // Read the WSDL and initialize the schema model
+         // This should only be needed for debuging purposes of the UMDM
+         JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlDefinitions.getWsdlTypes());
+         serviceMetaData.getTypesMetaData().setSchemaModel(schemaModel);
+
+         log.debug("END buildMetaData: " + wsMetaData);
+         return serviceMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+
+   private void buildMetaDataInternal(ServiceMetaData serviceMetaData, WSDLDefinitions wsdlDefinitions) throws IOException
+   {
+      QName serviceName = serviceMetaData.getServiceName();
+
+      // Get the WSDL service
+      WSDLService wsdlService = null;
+      if (serviceName == null)
+      {
+         if (wsdlDefinitions.getServices().length != 1)
+            throw new IllegalArgumentException("Expected a single service element");
+
+         wsdlService = wsdlDefinitions.getServices()[0];
+         serviceMetaData.setServiceName(wsdlService.getQName());
+      }
+      else
+      {
+         wsdlService = wsdlDefinitions.getService(new NCName(serviceName.getLocalPart()));
+      }
+      if (wsdlService == null)
+         throw new IllegalArgumentException("Cannot obtain wsdl service: " + serviceName);
+
+      // Build endpoint meta data
+      for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
+      {
+         QName portName = wsdlEndpoint.getQName();
+         QName interfaceQName = wsdlEndpoint.getInterface().getQName();
+         ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, interfaceQName, Type.JAXWS);
+         epMetaData.setEndpointAddress(wsdlEndpoint.getAddress());
+         serviceMetaData.addEndpoint(epMetaData);
+
+         // Init the endpoint binding
+         initEndpointBinding(wsdlEndpoint, epMetaData);
+
+         // Init the service encoding style
+         initEndpointEncodingStyle(epMetaData);
+
+         setupOperationsFromWSDL(epMetaData, wsdlEndpoint);
+      }
+   }
+
+   protected void setupOperationsFromWSDL(EndpointMetaData epMetaData, WSDLEndpoint wsdlEndpoint)
+   {
+      WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getInterface().getWsdlDefinitions();
+
+      // For every WSDL interface operation build the OperationMetaData
+      WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
+      for (WSDLInterfaceOperation wsdlOperation : wsdlInterface.getOperations())
+      {
+         String opName = wsdlOperation.getName().toString();
+         QName opQName = wsdlOperation.getQName();
+
+         // Set java method name
+         String javaName = opName.substring(0, 1).toLowerCase() + opName.substring(1);
+
+         OperationMetaData opMetaData = new OperationMetaData(epMetaData, opQName, javaName);
+         epMetaData.addOperation(opMetaData);
+
+         // Set the operation style
+         String style = wsdlOperation.getStyle();
+         epMetaData.setStyle((Constants.URI_STYLE_IRI.equals(style) ? Style.DOCUMENT : Style.RPC));
+
+         // Set the operation MEP
+         if (Constants.WSDL20_PATTERN_IN_ONLY.equals(wsdlOperation.getPattern()))
+            opMetaData.setOneWayOperation(true);
+
+         // Set the operation SOAPAction
+         WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getQName());
+         WSDLBindingOperation wsdlBindingOperation = wsdlBinding.getOperationByRef(opQName);
+         if (wsdlBindingOperation != null)
+            opMetaData.setSOAPAction(wsdlBindingOperation.getSOAPAction());
+      }
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSClientMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSEndpointMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSEndpointMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSEndpointMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,134 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxws;
+
+import javax.xml.ws.BindingType;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.annotation.PortComponent;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+
+/**
+ * Builds ServiceEndpointMetaData for a JAX-WS endpoint.
+ *
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @version $Revision$
+ */
+public abstract class JAXWSEndpointMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSEndpointMetaDataBuilder.class);
+
+   public abstract ServerEndpointMetaData buildEndpoint(UnifiedMetaData wsMetaData, UnifiedDeploymentInfo udi, Class<?> sepClass, String linkName);
+
+   protected void processBindingType(EndpointMetaData epMetaData, Class<?> wsClass)
+   {
+      BindingType anBindingType = (BindingType)wsClass.getAnnotation(BindingType.class);
+      String uri = anBindingType.value();
+      if (uri.length() > 0)
+      {
+         epMetaData.setBindingId(uri);
+      }
+   }
+
+   protected void processPortComponent(UnifiedDeploymentInfo udi, Class<?> wsClass, String linkName, ServerEndpointMetaData sepMetaData)
+   {
+      PortComponent anPortComponent = (PortComponent)wsClass.getAnnotation(PortComponent.class);
+      if (anPortComponent != null)
+      {
+         // setup config name
+         if (anPortComponent.configName().length() > 0)
+         {
+            String configName = anPortComponent.configName();
+            sepMetaData.setConfigName(configName);
+         }
+
+         // setup config file
+         if (anPortComponent.configFile().length() > 0)
+         {
+            String configFile = anPortComponent.configFile();
+            sepMetaData.setConfigFile(configFile);
+         }
+
+         boolean isJSEEndpoint = udi.type == DeploymentType.JAXWS_JSE;
+
+         // context-root
+         if (anPortComponent.contextRoot().length() > 0)
+         {
+            if (isJSEEndpoint)
+               log.warn("@PortComponent.contextRoot is only valid on EJB endpoints");
+
+            if (isJSEEndpoint == false)
+            {
+               String contextRoot = anPortComponent.contextRoot();
+               if (contextRoot.startsWith("/") == false)
+                  contextRoot = "/" + contextRoot;
+
+               sepMetaData.setContextRoot(contextRoot);
+            }
+         }
+
+         // url-pattern
+         if (anPortComponent.urlPattern().length() > 0)
+         {
+            if (isJSEEndpoint)
+               log.warn("@PortComponent.urlPattern is only valid on EJB endpoints");
+
+            if (isJSEEndpoint == false)
+            {
+               String urlPattern = anPortComponent.urlPattern();
+               sepMetaData.setURLPattern(urlPattern);
+            }
+         }
+
+         // auth-method
+         if (anPortComponent.authMethod().length() > 0)
+         {
+            if (isJSEEndpoint)
+               log.warn("@PortComponent.authMethod is only valid on EJB endpoints");
+
+            if (isJSEEndpoint == false)
+            {
+               String authMethod = anPortComponent.authMethod();
+               sepMetaData.setAuthMethod(authMethod);
+            }
+         }
+
+         // transport-guarantee
+         if (anPortComponent.transportGuarantee().length() > 0)
+         {
+            if (isJSEEndpoint)
+               log.warn("@PortComponent.transportGuarantee is only valid on EJB endpoints");
+
+            if (isJSEEndpoint == false)
+            {
+               String transportGuarantee = anPortComponent.transportGuarantee();
+               sepMetaData.setTransportGuarantee(transportGuarantee);
+            }
+         }
+      }
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSEndpointMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB21.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB21.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB21.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,89 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.
+*/
+// $Id$
+package org.jboss.ws.metadata.builder.jaxws;
+
+import java.util.Iterator;
+
+import javax.jws.WebService;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.WSException;
+import org.jboss.ws.deployment.JAXWSDeployment;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
+
+/**
+ * A server side meta data builder that is based on JSR-181 annotations
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @since 19-May-2005
+ */
+public class JAXWSMetaDataBuilderEJB21 extends JAXWSServerMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSMetaDataBuilderEJB21.class);
+
+   /** Build from annotations
+    */
+   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
+   {
+      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
+      try
+      {
+         UnifiedMetaData wsMetaData = new UnifiedMetaData();
+         wsMetaData.setDeploymentName(udi.getCanonicalName());
+         wsMetaData.setClassLoader(udi.classLoader);
+
+         if (udi.classLoader == null)
+            throw new WSException("Deployment class loader not initialized");
+
+         // For every bean
+         UnifiedApplicationMetaData appMetaData = (UnifiedApplicationMetaData)udi.metaData;
+         Iterator it = appMetaData.getEnterpriseBeans();
+         while (it.hasNext())
+         {
+            UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData)it.next();
+
+            String ejbName = beanMetaData.getEjbName();
+            String ejbClassName = beanMetaData.getEjbClass();
+            Class beanClass = udi.classLoader.loadClass(ejbClassName);
+            setupEndpoint(wsMetaData, udi, beanClass, ejbName);
+         }
+
+         log.debug("END buildMetaData: " + wsMetaData);
+         return wsMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB21.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB3.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB3.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB3.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,105 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.
+ */
+// $Id$
+package org.jboss.ws.metadata.builder.jaxws;
+
+import java.util.Iterator;
+
+import javax.jws.WebService;
+
+import org.jboss.annotation.security.SecurityDomain;
+import org.jboss.logging.Logger;
+import org.jboss.ws.WSException;
+import org.jboss.ws.deployment.JAXWSDeployment;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData;
+
+/**
+ * A server side meta data builder that is based on JSR-181 annotations
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @since 19-May-2005
+ */
+public class JAXWSMetaDataBuilderEJB3 extends JAXWSServerMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSMetaDataBuilderEJB3.class);
+
+   protected Class annotatedClass;
+
+   /** Build from webservices.xml
+    */
+   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
+   {
+      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
+      try
+      {
+         UnifiedMetaData wsMetaData = new UnifiedMetaData();
+         wsMetaData.setDeploymentName(udi.getCanonicalName());
+         wsMetaData.setClassLoader(udi.classLoader);
+
+         if (udi.classLoader == null)
+            throw new WSException("Deployment class loader not initialized");
+
+         // The container objects below provide access to all of the ejb metadata
+         UnifiedApplicationMetaData appMetaData = (UnifiedApplicationMetaData)udi.metaData;
+         Iterator<UnifiedBeanMetaData> it = appMetaData.getEnterpriseBeans();
+         while (it.hasNext())
+         {
+            UnifiedBeanMetaData beanMetaData = it.next();
+            String ejbClassName = beanMetaData.getEjbClass();
+            Class<?> beanClass = udi.classLoader.loadClass(ejbClassName);
+            if (beanClass.isAnnotationPresent(WebService.class))
+            {
+               String ejbLink = beanMetaData.getEjbName();
+               setupEndpoint(wsMetaData, udi, beanClass, ejbLink);
+
+               // setup the security domain
+               if (beanClass.isAnnotationPresent(SecurityDomain.class))
+               {
+                  SecurityDomain anSecurityDomain = (SecurityDomain)beanClass.getAnnotation(SecurityDomain.class);
+                  String lastDomain = wsMetaData.getSecurityDomain();
+                  String securityDomain = anSecurityDomain.value();
+                  if (lastDomain != null && lastDomain.equals(securityDomain) == false)
+                     throw new IllegalStateException("Multiple security domains not supported: " + securityDomain);
+
+                  wsMetaData.setSecurityDomain(securityDomain);
+               }
+            }
+         }
+
+         log.debug("END buildMetaData: " + wsMetaData);
+         return wsMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderEJB3.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderJSE.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderJSE.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderJSE.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.
+ */
+// $Id$
+package org.jboss.ws.metadata.builder.jaxws;
+
+import java.util.Map;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.WSException;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.j2ee.UnifiedWebMetaData;
+
+/**
+ * A server side meta data builder that is based on JSR-181 annotations
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @since 23-Jul-2005
+ */
+public class JAXWSMetaDataBuilderJSE extends JAXWSServerMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSMetaDataBuilderJSE.class);
+
+   /** Build from annotations
+    */
+   public UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi)
+   {
+      log.debug("START buildMetaData: [name=" + udi.getCanonicalName() + "]");
+      try
+      {
+         UnifiedMetaData wsMetaData = new UnifiedMetaData();
+         wsMetaData.setDeploymentName(udi.getCanonicalName());
+         wsMetaData.setClassLoader(udi.classLoader);
+
+         if (udi.classLoader == null)
+            throw new WSException("Deployment class loader not initialized");
+
+         // For every bean
+         UnifiedWebMetaData webMetaData = (UnifiedWebMetaData)udi.metaData;
+         Map<String, String> servletClassMap = webMetaData.getServletClassNames();
+         for (String servletName : servletClassMap.keySet())
+         {
+            String servletClassName = servletClassMap.get(servletName);
+            try
+            {
+               Class beanClass = udi.classLoader.loadClass(servletClassName);
+               setupEndpoint(wsMetaData, udi, beanClass, servletName);
+            }
+            catch (ClassNotFoundException ex)
+            {
+               log.warn("Cannot load service endpoint class: " + servletClassName);
+            }
+         }
+
+         log.debug("END buildMetaData: " + wsMetaData);
+         return wsMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSMetaDataBuilderJSE.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSProviderMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSProviderMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSProviderMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,169 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.
+ */
+// $Id$
+package org.jboss.ws.metadata.builder.jaxws;
+
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.management.ObjectName;
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.transform.Source;
+import javax.xml.ws.Provider;
+import javax.xml.ws.ServiceMode;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceProvider;
+import javax.xml.ws.Service.Mode;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.jaxrpc.Style;
+import org.jboss.ws.metadata.OperationMetaData;
+import org.jboss.ws.metadata.ParameterMetaData;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.ServiceMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.EndpointMetaData.Type;
+import org.jboss.ws.metadata.builder.MetaDataBuilder;
+import org.jboss.ws.metadata.wsdl.WSDLUtils;
+import org.jboss.ws.utils.JavaUtils;
+
+/**
+ * A server side meta data builder that is based on JSR-181 annotations
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @since 23-Jul-2005
+ */
+public class JAXWSProviderMetaDataBuilder extends JAXWSEndpointMetaDataBuilder
+{
+   // provide logging
+   private final Logger log = Logger.getLogger(JAXWSProviderMetaDataBuilder.class);
+
+   /** Build from annotations
+    */
+
+   @Override
+   public ServerEndpointMetaData buildEndpoint(UnifiedMetaData wsMetaData, UnifiedDeploymentInfo udi, Class<?> sepClass, String linkName)
+   {
+      // 5.3 Conformance (Provider implementation): A Provider based service endpoint implementation MUST
+      // implement a typed Provider interface.
+      if (JavaUtils.isAssignableFrom(Provider.class, sepClass) == false)
+         throw new WebServiceException("Endpoint implementation does not implement javax.xml.ws.Provider: " + sepClass.getName());
+
+      // 5.4 Conformance (WebServiceProvider annotation): A Provider based service endpoint implementation
+      // MUST carry a WebServiceProvider annotation
+      WebServiceProvider anWebServiceProvider = (WebServiceProvider)sepClass.getAnnotation(WebServiceProvider.class);
+      if (anWebServiceProvider == null)
+         throw new WebServiceException("Cannot obtain @WebServiceProvider annotation from: " + sepClass.getName());
+
+      // 7.3 Conformance (WebServiceProvider and WebService): A class annotated with the WebServiceProvider
+      // annotation MUST NOT carry a WebService annotation
+      if (sepClass.isAnnotationPresent(WebService.class))
+         throw new WebServiceException("Provider cannot carry @WebService annotation: " + sepClass.getName());
+
+      WSDLUtils wsdlUtils = WSDLUtils.getInstance();
+
+      String name = wsdlUtils.getJustClassName(sepClass);
+
+      String serviceName = anWebServiceProvider.serviceName();
+      if (serviceName.length() == 0)
+         serviceName = name + "Service";
+
+      String targetNS = anWebServiceProvider.targetNamespace();
+      if (targetNS.length() == 0)
+         targetNS = wsdlUtils.getTypeNamespace(sepClass);
+
+      String portName = anWebServiceProvider.portName();
+      if (portName.length() == 0)
+         portName = name + "Port";
+
+      ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, new QName(targetNS, serviceName));
+      wsMetaData.addService(serviceMetaData);
+
+      // Setup the ServerEndpointMetaData
+      QName portQName = new QName(targetNS, portName);
+      QName portTypeQName = new QName(targetNS, name);
+      ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portQName, portTypeQName, Type.JAXWS);
+      sepMetaData.setLinkName(linkName);
+
+      sepMetaData.setStyle(Style.DOCUMENT);
+      sepMetaData.setParameterStyle(ParameterStyle.BARE);
+
+      sepMetaData.setServiceEndpointImplName(sepClass.getName());
+      sepMetaData.setServiceEndpointInterfaceName(sepClass.getName());
+
+      ServiceMode anServiceMode = sepClass.getAnnotation(ServiceMode.class);
+      if (anServiceMode != null)
+         sepMetaData.setServiceMode(anServiceMode.value());
+      else sepMetaData.setServiceMode(Mode.PAYLOAD);
+
+      serviceMetaData.addEndpoint(sepMetaData);
+
+      // Process invoke method
+      processInvokeMethod(sepMetaData);
+
+      // Process WSDL
+      String wsdlLocation = anWebServiceProvider.wsdlLocation();
+      if (wsdlLocation != null)
+         serviceMetaData.setWsdlFile(wsdlLocation);
+
+      // Set the endpoint address
+      processPortComponent(udi, sepClass, linkName, sepMetaData);
+
+      // Init the endpoint address
+      MetaDataBuilder.initEndpointAddress(udi, sepMetaData, linkName);
+
+      // A provider may not have a WSDL file
+      if (sepMetaData.getServiceMetaData().getWsdlFile() != null)
+         MetaDataBuilder.replaceAddressLocation(sepMetaData);
+
+      // init service endpoint id
+      ObjectName sepID = MetaDataBuilder.getServiceEndpointID(udi, sepMetaData);
+      sepMetaData.setServiceEndpointID(sepID);
+
+      return sepMetaData;
+   }
+
+   private void processInvokeMethod(ServerEndpointMetaData epMetaData)
+   {
+      String javaName = "invoke";
+      String targetNS = epMetaData.getQName().getNamespaceURI();
+      OperationMetaData opMetaData = new OperationMetaData(epMetaData, new QName(targetNS, javaName), javaName);
+      epMetaData.addOperation(opMetaData);
+
+      Mode serviceMode = epMetaData.getServiceMode();
+      Class paramType = (serviceMode == Mode.MESSAGE ? SOAPMessage.class : Source.class);
+
+      // Setup invoke param
+      QName xmlName = new QName("invokeParam");
+      QName xmlType = Constants.TYPE_LITERAL_ANYTYPE;
+      ParameterMetaData pmd = new ParameterMetaData(opMetaData, xmlName, xmlType, paramType.getName());
+      opMetaData.addParameter(pmd);
+
+      // Setup invoke return
+      xmlName = new QName("invokeReturn");
+      ParameterMetaData retMetaData = new ParameterMetaData(opMetaData, xmlName, xmlType, paramType.getName());
+      opMetaData.setReturnParameter(retMetaData);
+   }
+}
\ No newline at end of file


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSProviderMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSServerMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSServerMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSServerMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxws;
+
+// $Id$
+
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceProvider;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.deployment.JAXWSDeployment;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.builder.JAXWSMetaDataBuilder;
+
+/** An abstract annotation meta data builder.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @since 27-Jun-2006
+ */
+public abstract class JAXWSServerMetaDataBuilder extends JAXWSMetaDataBuilder
+{
+   public abstract UnifiedMetaData buildMetaData(UnifiedDeploymentInfo udi);
+
+   protected JAXWSEndpointMetaDataBuilder getEndpointBuilder(Class<?> bean)
+   {
+      if (bean.isAnnotationPresent(WebServiceProvider.class))
+         return new JAXWSProviderMetaDataBuilder();
+
+      if (bean.isAnnotationPresent(WebService.class))
+         return new JAXWSWebServiceMetaDataBuilder();
+
+      return null;
+   }
+
+   protected void setupEndpoint(UnifiedMetaData umd, UnifiedDeploymentInfo udi, Class<?> beanClass, String beanName)
+      throws SecurityException, ClassNotFoundException, NoSuchMethodException
+   {
+      JAXWSEndpointMetaDataBuilder builder = getEndpointBuilder(beanClass);
+      if (builder != null)
+         builder.buildEndpoint(umd, udi, beanClass, beanName);
+   }
+}


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSServerMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -0,0 +1,1011 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ws.metadata.builder.jaxws;
+
+// $Id$
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.jws.HandlerChain;
+import javax.jws.Oneway;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.jws.soap.SOAPMessageHandlers;
+import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.management.ObjectName;
+import javax.xml.bind.JAXBException;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.ws.BindingType;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+import javax.xml.ws.WebFault;
+import javax.xml.ws.addressing.AddressingProperties;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
+import org.jboss.ws.addressing.AddressingPropertiesImpl;
+import org.jboss.ws.addressing.metadata.AddressingOpMetaExt;
+import org.jboss.ws.annotation.PortComponent;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo;
+import org.jboss.ws.deployment.UnifiedDeploymentInfo.DeploymentType;
+import org.jboss.ws.jaxrpc.Style;
+import org.jboss.ws.jaxrpc.Use;
+import org.jboss.ws.jaxws.DynamicWrapperGenerator;
+import org.jboss.ws.jaxws.WrapperGenerator;
+import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.FaultMetaData;
+import org.jboss.ws.metadata.OperationMetaData;
+import org.jboss.ws.metadata.ParameterMetaData;
+import org.jboss.ws.metadata.ServerEndpointMetaData;
+import org.jboss.ws.metadata.ServiceMetaData;
+import org.jboss.ws.metadata.TypeMappingMetaData;
+import org.jboss.ws.metadata.TypesMetaData;
+import org.jboss.ws.metadata.UnifiedMetaData;
+import org.jboss.ws.metadata.WrappedParameter;
+import org.jboss.ws.metadata.HandlerMetaData.HandlerType;
+import org.jboss.ws.metadata.acessor.JAXBAccessor;
+import org.jboss.ws.metadata.builder.MetaDataBuilder;
+import org.jboss.ws.metadata.config.jaxws.WSEndpointConfigJAXWS;
+import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData;
+import org.jboss.ws.metadata.jsr181.HandlerChainFactory;
+import org.jboss.ws.metadata.jsr181.HandlerChainMetaData;
+import org.jboss.ws.metadata.jsr181.HandlerChainsMetaData;
+import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
+import org.jboss.ws.metadata.wsdl.WSDLUtils;
+import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
+import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
+import org.jboss.ws.server.ServerConfig;
+import org.jboss.ws.server.ServerConfigFactory;
+import org.jboss.ws.tools.jaxws.JAXBWSDLGenerator;
+import org.jboss.ws.tools.jaxws.WSDLGenerator;
+import org.jboss.ws.utils.HolderUtils;
+import org.jboss.ws.utils.IOUtils;
+import org.jboss.ws.utils.JBossWSEntityResolver;
+import org.jboss.ws.utils.JavaUtils;
+import org.jboss.xb.binding.ObjectModelFactory;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+
+import com.sun.xml.bind.api.JAXBRIContext;
+import com.sun.xml.bind.api.TypeReference;
+
+/** An abstract annotation meta data builder.
+ *
+ * @author Thomas.Diesler at jboss.org
+ * @author <a href="mailto:jason.greene at jboss.com">Jason T. Greene</a>
+ * @since 15-Oct-2005
+ */
+public class JAXWSWebServiceMetaDataBuilder extends JAXWSEndpointMetaDataBuilder
+{
+   // provide logging
+   private static final Logger log = Logger.getLogger(JAXWSWebServiceMetaDataBuilder.class);
+
+   private WrapperGenerator wrapperGenerator;
+   private List<Class> javaTypes = new ArrayList<Class>();
+   private List<TypeReference> typeRefs = new ArrayList<TypeReference>();
+   private JAXBRIContext jaxbCtx;
+
+   public JAXWSWebServiceMetaDataBuilder()
+   {
+   }
+
+   public ServerEndpointMetaData buildEndpoint(UnifiedMetaData wsMetaData, UnifiedDeploymentInfo udi, Class<?> sepClass, String linkName)
+   {
+      WebService anWebService = sepClass.getAnnotation(WebService.class);
+      if (anWebService == null)
+         throw new WSException("Cannot obtain @WebService annotation from: " + sepClass.getName());
+
+      try
+      {
+         Class<?> seiClass = null;
+         String seiName = null;
+
+         if (anWebService.endpointInterface().length() > 0)
+         {
+            seiName = anWebService.endpointInterface();
+            seiClass = udi.classLoader.loadClass(seiName);
+            anWebService = seiClass.getAnnotation(WebService.class);
+
+            if (anWebService == null)
+               throw new WSException("Interface does not have a @WebService annotation: " + seiName);
+         }
+         else
+         {
+
+            WebService seiAnnotation = null;
+
+            for(Class<?> potentialSEI : sepClass.getInterfaces())
+            {
+               if(potentialSEI.isAnnotationPresent(WebService.class))
+               {
+                  seiClass = potentialSEI;
+                  seiName = seiClass.getName();
+                  seiAnnotation = sepClass.getAnnotation(WebService.class);
+                  break;
+               }
+            }
+
+            if(seiAnnotation!=null)
+               anWebService = seiAnnotation;
+         }
+
+         // Clear the java types, etc.
+         resetMetaDataBuilder(udi.classLoader);
+
+         Class<?> wsClass = (seiClass != null ? seiClass : sepClass);
+
+         WSDLUtils wsdlUtils = WSDLUtils.getInstance();
+
+         String name = anWebService.name();
+         if (name.length() == 0)
+            name = wsdlUtils.getJustClassName(wsClass);
+
+         String serviceName = anWebService.serviceName();
+         if (serviceName.length() == 0)
+            serviceName = name + "Service";
+
+         String targetNS = anWebService.targetNamespace();
+         if (targetNS.length() == 0)
+            targetNS = wsdlUtils.getTypeNamespace(wsClass);
+
+         String portName = anWebService.portName();
+         if (portName.length() == 0)
+            portName = name + "Port";
+
+         ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, new QName(targetNS, serviceName));
+         wsMetaData.addService(serviceMetaData);
+
+         // Setup the ServerEndpointMetaData
+         QName portQName = new QName(targetNS, portName);
+         QName portTypeQName = new QName(targetNS, name);
+         ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portQName, portTypeQName, EndpointMetaData.Type.JAXWS);
+         sepMetaData.setLinkName(linkName);
+
+         // Assign the WS-Security configuration,
+         WSSecurityConfiguration securityConfiguration = MetaDataBuilder.getWsSecurityConfiguration(udi);
+         serviceMetaData.setSecurityConfiguration(securityConfiguration);
+
+         sepMetaData.setServiceEndpointImplName(sepClass.getName());
+         sepMetaData.setServiceEndpointInterfaceName(wsClass.getName());
+
+         serviceMetaData.addEndpoint(sepMetaData);
+
+         // Process an optional @SOAPBinding annotation
+         if (wsClass.isAnnotationPresent(SOAPBinding.class))
+            processSOAPBinding(sepMetaData, wsClass);
+
+         // Process an optional @BindingType annotation
+         if (wsClass.isAnnotationPresent(BindingType.class))
+            processBindingType(sepMetaData, wsClass);
+
+         boolean includeAllMethods = (wsClass == seiClass);
+         processWebMethods(sepMetaData, wsClass, includeAllMethods);
+
+         // Initialize types
+         createJAXBContext(sepMetaData);
+         populateXmlTypes(sepMetaData);
+
+         // Process or generate WSDL
+         String wsdlLocation = anWebService.wsdlLocation();
+         processOrGenerateWSDL(wsClass, serviceMetaData, wsdlLocation, sepMetaData);
+
+         // Read the generated WSDL and initialize the schema model
+         // FIXME - This should be removed
+         WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
+         JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlDefinitions.getWsdlTypes());
+         serviceMetaData.getTypesMetaData().setSchemaModel(schemaModel);
+
+         // Set the endpoint address
+         processPortComponent(udi, wsClass, linkName, sepMetaData);
+
+         // Init the endpoint address
+         MetaDataBuilder.initEndpointAddress(udi, sepMetaData, linkName);
+
+         // replace the SOAP address
+         MetaDataBuilder.replaceAddressLocation(sepMetaData);
+
+         // Process an optional @SOAPMessageHandlers annotation
+         if (sepClass.isAnnotationPresent(SOAPMessageHandlers.class) || wsClass.isAnnotationPresent(SOAPMessageHandlers.class))
+            log.warn("@SOAPMessageHandlers is deprecated as of JSR-181 2.0 with no replacement.");
+
+         // Add pre handlers
+         WSEndpointConfigJAXWS jaxrpcConfig = (WSEndpointConfigJAXWS)sepMetaData.getEndpointConfig();
+         sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.PRE));
+
+         // Process an optional @HandlerChain annotation
+         if (sepClass.isAnnotationPresent(HandlerChain.class))
+            processHandlerChain(sepMetaData, sepClass);
+         else if (wsClass.isAnnotationPresent(HandlerChain.class))
+            processHandlerChain(sepMetaData, wsClass);
+
+         // Add post handlers
+         sepMetaData.addHandlers(jaxrpcConfig.getHandlers(sepMetaData, HandlerType.POST));
+
+         // init service endpoint id
+         ObjectName sepID = MetaDataBuilder.getServiceEndpointID(udi, sepMetaData);
+         sepMetaData.setServiceEndpointID(sepID);
+
+         return sepMetaData;
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
+      }
+   }
+
+   protected void resetMetaDataBuilder(ClassLoader loader)
+   {
+      wrapperGenerator = new DynamicWrapperGenerator(loader);
+      javaTypes.clear();
+      typeRefs.clear();
+      jaxbCtx = null;
+   }
+
+   protected void createJAXBContext(EndpointMetaData epMetaData)
+   {
+	   try
+	   {
+		   String targetNS = epMetaData.getInterfaceQName().getNamespaceURI();
+		   log.debug("JAXBContext [types=" + javaTypes + ",tns=" + targetNS + "]");
+		   jaxbCtx = JAXBRIContext.newInstance(javaTypes.toArray(new Class[0]), typeRefs, targetNS, false);
+	   }
+	   catch (JAXBException ex)
+	   {
+         throw new IllegalStateException("Cannot build JAXB context", ex);
+	   }
+   }
+
+   protected void populateXmlTypes(EndpointMetaData epMetaData)
+   {
+      for (OperationMetaData operation : epMetaData.getOperations())
+      {
+         // parameters
+         for (ParameterMetaData paramMetaData : operation.getParameters())
+         {
+            populateXmlType(paramMetaData);
+         }
+
+         // return value
+         ParameterMetaData returnParameter = operation.getReturnParameter();
+         if (returnParameter != null)
+            populateXmlType(returnParameter);
+
+         // faults
+         for (FaultMetaData faultMetaData : operation.getFaults())
+         {
+            populateXmlType(faultMetaData);
+         }
+      }
+   }
+
+   private void populateXmlType(ParameterMetaData paramMetaData)
+   {
+      EndpointMetaData epMetaData = paramMetaData.getOperationMetaData().getEndpointMetaData();
+      TypesMetaData types = epMetaData.getServiceMetaData().getTypesMetaData();
+
+      QName xmlName = paramMetaData.getXmlName();
+      QName xmlType = paramMetaData.getXmlType();
+      Class javaType = paramMetaData.getJavaType();
+      String javaName = paramMetaData.getJavaTypeName();
+
+      if (xmlType == null)
+      {
+         try
+         {
+            xmlType = jaxbCtx.getTypeName(new TypeReference(xmlName, javaType));
+         }
+         catch (IllegalArgumentException e)
+         {
+            throw new IllegalStateException("Cannot obtain xml type for: [xmlName=" + xmlName + ",javaName=" + javaName + "]");
+         }
+
+         /* Anonymous type.
+          *
+          * Currently the design of our stack is based on the
+          * notion of their always being a unique type. In order to lookup the
+          * appropriate (de)serializer you must have a type. So we use a fake
+          * name. This is an illegal NCName, so it shouldn't collide.
+          */
+         if (xmlType == null)
+            xmlType = new QName(xmlName.getNamespaceURI(), ">" + xmlName.getLocalPart());
+
+         paramMetaData.setXmlType(xmlType);
+      }
+
+	  types.addTypeMapping(new TypeMappingMetaData(types, xmlType, javaName));
+   }
+
+   private void populateXmlType(FaultMetaData faultMetaData)
+   {
+      EndpointMetaData epMetaData = faultMetaData.getOperationMetaData().getEndpointMetaData();
+      TypesMetaData types = epMetaData.getServiceMetaData().getTypesMetaData();
+
+      QName xmlType = faultMetaData.getXmlType();
+      String faultBeanName = faultMetaData.getFaultBeanName();
+
+      types.addTypeMapping(new TypeMappingMetaData(types, xmlType, faultBeanName));
+   }
+
+   protected void processSOAPBinding(EndpointMetaData epMetaData, Class<?> wsClass)
+   {
+      SOAPBinding anSoapBinding = (SOAPBinding)wsClass.getAnnotation(SOAPBinding.class);
+
+      SOAPBinding.Style attrStyle = anSoapBinding.style();
+      Style style = (attrStyle == SOAPBinding.Style.RPC ? Style.RPC : Style.DOCUMENT);
+      epMetaData.setStyle(style);
+
+      SOAPBinding.Use attrUse = anSoapBinding.use();
+      if (attrUse == SOAPBinding.Use.ENCODED)
+         throw new WSException("SOAP encoding is not supported for JSR-181 deployments");
+
+      epMetaData.setEncodingStyle(Use.LITERAL);
+
+      ParameterStyle paramStyle = anSoapBinding.parameterStyle();
+      epMetaData.setParameterStyle(paramStyle);
+   }
+
+   private WebParam getWebParamAnnotation(Method method, int pos)
+   {
+      for (Annotation annotation : method.getParameterAnnotations()[pos])
+         if (annotation instanceof WebParam)
+            return (WebParam)annotation;
+
+      return null;
+   }
+
+   protected void processWebMethods(EndpointMetaData epMetaData, Class wsClass, boolean includeAllMethods)
+   {
+      epMetaData.clearOperations();
+
+      // Process an @WebMethod annotations
+      int webMethodCount = 0;
+      for (Method method : wsClass.getMethods())
+      {
+         if (includeAllMethods || method.isAnnotationPresent(WebMethod.class))
+         {
+            processWebMethod(epMetaData, method);
+            webMethodCount++;
+         }
+      }
+
+      // @WebService should expose all inherited methods if @WebMethod is never specified
+      // http://jira.jboss.org/jira/browse/JBWS-754
+      if (webMethodCount == 0)
+      {
+         Class superClass = wsClass.getSuperclass();
+
+         while (superClass != null)
+         {
+            boolean isJDKClass = superClass.getPackage().getName().startsWith("java");
+
+            if(!isJDKClass)
+            {
+               for (Method method : superClass.getMethods())
+               {
+                  processWebMethod(epMetaData, method);
+                  webMethodCount++;
+               }
+
+               superClass = superClass.getSuperclass();
+
+            }
+         }
+      }
+
+      if (webMethodCount == 0)
+         throw new WSException("At least one @WebMethod annotation is required");
+   }
+
+   private void processWebMethod(EndpointMetaData epMetaData, Method method)
+   {
+      String javaName = method.getName();
+
+      // skip asnyc methods, they dont need meta data representation
+      if(method.getName().endsWith(Constants.ASYNC_METHOD_SUFFIX))
+         return;
+
+      ServiceMetaData serviceMetaData = epMetaData.getServiceMetaData();
+      TypesMetaData typesMetaData = serviceMetaData.getTypesMetaData();
+      String targetNS = epMetaData.getQName().getNamespaceURI();
+
+      // reflection defaults
+      String soapAction = "";
+      String operationName = method.getName();
+
+      // annotation values that override defaults
+      if (method.isAnnotationPresent(WebMethod.class))
+      {
+         WebMethod anWebMethod = method.getAnnotation(WebMethod.class);
+         soapAction = anWebMethod.action();
+         if (anWebMethod.operationName().length() > 0)
+         {
+            operationName = anWebMethod.operationName();
+         }
+      }
+
+      OperationMetaData opMetaData = new OperationMetaData(epMetaData, new QName(targetNS, operationName), javaName);
+      opMetaData.setOneWayOperation(method.isAnnotationPresent(Oneway.class));
+      opMetaData.setSOAPAction(soapAction);
+      epMetaData.addOperation(opMetaData);
+
+      // Build parameter meta data
+      Class[] parameterTypes = method.getParameterTypes();
+      Type[] genericTypes = method.getGenericParameterTypes();
+      Annotation[][] parameterAnnotations = method.getParameterAnnotations();
+      ParameterMetaData wrapperParameter = null, wrapperOutputParameter = null;
+      List<WrappedParameter> wrappedParameters = null, wrappedOutputParameters = null;
+
+      // Force paramter style to wrapped
+      if (method.isAnnotationPresent(RequestWrapper.class) || method.isAnnotationPresent(ResponseWrapper.class))
+      {
+         epMetaData.setParameterStyle(ParameterStyle.WRAPPED);
+      }
+
+      if (opMetaData.isDocumentWrapped())
+      {
+         wrapperParameter = createRequestWrapper(opMetaData, method);
+         wrappedParameters = new ArrayList<WrappedParameter>(parameterTypes.length);
+         wrapperParameter.setWrappedParameters(wrappedParameters);
+
+         if (!opMetaData.isOneWay())
+         {
+            wrapperOutputParameter = createResponseWrapper(opMetaData, method);
+            wrappedOutputParameters = new ArrayList<WrappedParameter>(parameterTypes.length + 1);
+            wrapperOutputParameter.setWrappedParameters(wrappedOutputParameters);
+         }
+      }
+
+      for (int i = 0; i < parameterTypes.length; i++)
+      {
+         Class javaType = parameterTypes[i];
+         Type genericType = genericTypes[i];
+         String javaTypeName = javaType.getName();
+         WebParam anWebParam = getWebParamAnnotation(method, i);
+         boolean isHeader = anWebParam != null && anWebParam.header();
+         boolean isWrapped = opMetaData.isDocumentWrapped() && !isHeader;
+         ParameterMode mode = getParameterMode(anWebParam, javaType);
+
+         // Assert one-way
+         if (opMetaData.isOneWay() && mode != ParameterMode.IN)
+            throw new IllegalArgumentException("A one-way operation can not have output parameters [" + "method = " + method.getName() + ", parameter = " + i + "]");
+
+         if (HolderUtils.isHolderType(javaType))
+         {
+            genericType = HolderUtils.getGenericValueType(genericType);
+            javaType = JavaUtils.erasure(genericType);
+            javaTypeName = javaType.getName();
+         }
+
+         if (isWrapped)
+         {
+            QName wrappedElementName = getWebParamName(opMetaData, i, javaType, anWebParam);
+            String variable = convertToVariable(wrappedElementName.getLocalPart());
+
+            WrappedParameter wrappedParameter = new WrappedParameter(wrappedElementName, javaTypeName, variable, i);
+            wrappedParameter.setTypeArguments(convertTypeArguments(javaType, genericType));
+
+            if (mode != ParameterMode.OUT)
+               wrappedParameters.add(wrappedParameter);
+            if (mode != ParameterMode.IN)
+            {
+               wrappedOutputParameters.add(wrappedParameter);
+               wrappedParameter.setHolder(true);
+            }
+         }
+         else
+         {
+            QName xmlName = getWebParamName(opMetaData, i, javaType, anWebParam);
+
+            ParameterMetaData paramMetaData = new ParameterMetaData(opMetaData, xmlName, javaTypeName);
+            paramMetaData.setInHeader(isHeader);
+            paramMetaData.setIndex(i);
+            paramMetaData.setMode(mode);
+
+            opMetaData.addParameter(paramMetaData);
+            javaTypes.add(javaType);
+            typeRefs.add(new TypeReference(xmlName, genericType, parameterAnnotations[i]));
+         }
+      }
+
+      // Build result meta data
+      Class returnType = method.getReturnType();
+      Type genericReturnType = method.getGenericReturnType();
+      String returnTypeName = returnType.getName();
+      if ((returnType == void.class) == false)
+      {
+         if (opMetaData.isOneWay())
+            throw new IllegalArgumentException("[JSR-181 2.5.1] The method '" + method.getName() + "' can not have a return value if it is marked OneWay");
+
+         WebResult anWebResult = method.getAnnotation(WebResult.class);
+         boolean isHeader = anWebResult != null && anWebResult.header();
+         boolean isWrapped = opMetaData.isDocumentWrapped() && !isHeader;
+         QName xmlName = getWebResultName(opMetaData, returnType, anWebResult);
+
+         if (isWrapped)
+         {
+            WrappedParameter wrapped = new WrappedParameter(xmlName, returnTypeName, convertToVariable(xmlName.getLocalPart()), -1);
+            wrapped.setTypeArguments(convertTypeArguments(returnType, genericReturnType));
+
+            // insert at the beginning just for prettiness
+            wrappedOutputParameters.add(0, wrapped);
+         }
+         else
+         {
+            ParameterMetaData retMetaData = new ParameterMetaData(opMetaData, xmlName, returnTypeName);
+            retMetaData.setInHeader(isHeader);
+            opMetaData.setReturnParameter(retMetaData);
+
+            javaTypes.add(returnType);
+            typeRefs.add(new TypeReference(xmlName, genericReturnType, method.getAnnotations()));
+         }
+      }
+
+      // Generate wrapper beans
+      if (opMetaData.isDocumentWrapped())
+      {
+         wrapperGenerator.generate(wrapperParameter);
+         Class wrapperClass = wrapperParameter.getJavaType();
+         javaTypes.add(wrapperClass);
+         // In case there is no @XmlRootElement
+         typeRefs.add(new TypeReference(wrapperParameter.getXmlName(), wrapperClass));
+         if (!opMetaData.isOneWay())
+         {
+            wrapperGenerator.generate(wrapperOutputParameter);
+            wrapperClass = wrapperOutputParameter.getJavaType();
+            javaTypes.add(wrapperClass);
+            // In case there is no @XmlRootElement
+            typeRefs.add(new TypeReference(wrapperOutputParameter.getXmlName(), wrapperClass));
+         }
+      }
+
+      // Add faults
+      for (Class exClass : method.getExceptionTypes())
+         if (!RemoteException.class.isAssignableFrom(exClass))
+            addFault(opMetaData, exClass);
+
+      // process op meta data extension
+      processMetaExtensions(epMetaData, opMetaData);
+   }
+
+   private ParameterMode getParameterMode(WebParam anWebParam, Class javaType)
+   {
+      if (anWebParam != null)
+      {
+         if (anWebParam.mode() == WebParam.Mode.INOUT)
+            return ParameterMode.INOUT;
+         if (anWebParam.mode() == WebParam.Mode.OUT)
+            return ParameterMode.OUT;
+      }
+
+      return HolderUtils.isHolderType(javaType) ? ParameterMode.INOUT : ParameterMode.IN;
+   }
+
+   private ParameterMetaData createResponseWrapper(OperationMetaData operation, Method method)
+   {
+      QName operationQName = operation.getQName();
+      QName xmlName = new QName(operationQName.getNamespaceURI(), operationQName.getLocalPart() + "Response");
+      QName xmlType = xmlName;
+
+      String responseWrapperType = null;
+      if (method.isAnnotationPresent(ResponseWrapper.class))
+      {
+         ResponseWrapper anResWrapper = method.getAnnotation(ResponseWrapper.class);
+
+         String localName = anResWrapper.localName().length() > 0 ? anResWrapper.localName() : xmlName.getLocalPart();
+         String targetNamespace = anResWrapper.targetNamespace().length() > 0 ? anResWrapper.targetNamespace() : xmlName.getNamespaceURI();
+         xmlName = new QName(targetNamespace, localName);
+
+         if (anResWrapper.className().length() > 0)
+            responseWrapperType = anResWrapper.className();
+      }
+
+      if (responseWrapperType == null)
+      {
+         String packageName = JavaUtils.getPackageName(method.getDeclaringClass()) + ".jaxws";
+         responseWrapperType = packageName + "." + JavaUtils.capitalize(method.getName()) + "Response";
+      }
+
+      ParameterMetaData retMetaData = new ParameterMetaData(operation, xmlName, xmlType, responseWrapperType);
+      retMetaData.setAccessorFactoryCreator(JAXBAccessor.FACTORY_CREATOR);
+      operation.setReturnParameter(retMetaData);
+
+      return retMetaData;
+   }
+
+   private ParameterMetaData createRequestWrapper(OperationMetaData operation, Method method)
+   {
+      String requestWrapperType = null;
+      QName xmlName = operation.getQName();
+      QName xmlType = xmlName;
+      if (method.isAnnotationPresent(RequestWrapper.class))
+      {
+         RequestWrapper anReqWrapper = method.getAnnotation(RequestWrapper.class);
+
+         String localName = anReqWrapper.localName().length() > 0 ? anReqWrapper.localName() : xmlName.getLocalPart();
+         String targetNamespace = anReqWrapper.targetNamespace().length() > 0 ? anReqWrapper.targetNamespace() : xmlName.getNamespaceURI();
+         xmlName = new QName(targetNamespace, localName);
+
+         if (anReqWrapper.className().length() > 0)
+            requestWrapperType = anReqWrapper.className();
+      }
+
+      // Conformance 3.18, the default value must be the same as the method name
+      if (requestWrapperType == null)
+      {
+         String packageName = JavaUtils.getPackageName(method.getDeclaringClass()) + ".jaxws";
+         requestWrapperType = packageName + "." + JavaUtils.capitalize(method.getName());
+      }
+
+      // JAX-WS p.37 pg.1, the annotation only affects the element name, not the type name
+      ParameterMetaData wrapperParameter = new ParameterMetaData(operation, xmlName, xmlType, requestWrapperType);
+      wrapperParameter.setAccessorFactoryCreator(JAXBAccessor.FACTORY_CREATOR);
+      operation.addParameter(wrapperParameter);
+
+      return wrapperParameter;
+   }
+
+   private String convertToVariable(String localName)
+   {
+      return JAXBRIContext.mangleNameToVariableName(localName);
+   }
+
+   /**
+    * Process an optional @HandlerChain annotation
+    *
+    * Location of the handler chain file. The location supports 2 formats.
+    *
+    *    1. An absolute java.net.URL in externalForm.
+    *    (ex: http://myhandlers.foo.com/handlerfile1.xml)
+    *
+    *    2. A relative path from the source file or class file.
+    *    (ex: bar/handlerfile1.xml)
+    */
+   protected void processHandlerChain(EndpointMetaData epMetaData, Class<?> wsClass)
+   {
+      if (wsClass.isAnnotationPresent(SOAPMessageHandlers.class))
+         throw new WSException("Cannot combine @HandlerChain with @SOAPMessageHandlers");
+
+      HandlerChain anHandlerChain = (HandlerChain)wsClass.getAnnotation(HandlerChain.class);
+
+      URL fileURL = null;
+      String filename = anHandlerChain.file();
+
+      // Try the filename as URL
+      try
+      {
+         fileURL = new URL(filename);
+      }
+      catch (MalformedURLException ex)
+      {
+         // ignore
+      }
+
+      // Try the filename as File
+      if (fileURL == null)
+      {
+         try
+         {
+            File file = new File(filename);
+            if (file.exists())
+               fileURL = file.toURL();
+         }
+         catch (MalformedURLException e)
+         {
+            // ignore
+         }
+      }
+
+      // Try the filename as Resource
+      if (fileURL == null)
+      {
+         fileURL = epMetaData.getClassLoader().getResource(filename);
+      }
+
+      // Try the filename relative to class
+      if (fileURL == null)
+      {
+         String packagePath = wsClass.getPackage().getName().replace('.', '/');
+         fileURL = epMetaData.getClassLoader().getResource(packagePath + "/" + filename);
+      }
+
+      if (fileURL == null)
+         throw new WSException("Cannot resolve handler file '" + filename + "' on " + wsClass.getName());
+
+      try
+      {
+         HandlerChainsMetaData handlerChainsMetaData = null;
+         InputStream is = fileURL.openStream();
+         try
+         {
+            Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
+            unmarshaller.setValidation(true);
+            unmarshaller.setSchemaValidation(true);
+            unmarshaller.setEntityResolver(new JBossWSEntityResolver());
+            ObjectModelFactory factory = new HandlerChainFactory();
+            handlerChainsMetaData = (HandlerChainsMetaData)unmarshaller.unmarshal(is, factory, null);
+         }
+         finally
+         {
+            is.close();
+         }
+
+         // Setup the endpoint handlers
+         for (HandlerChainMetaData handlerChainMetaData : handlerChainsMetaData.getHandlerChains())
+         {
+            for (UnifiedHandlerMetaData uhmd : handlerChainMetaData.getHandlers())
+            {
+               epMetaData.addHandler(uhmd.getHandlerMetaDataJAXWS(epMetaData, HandlerType.ENDPOINT));
+            }
+         }
+      }
+      catch (RuntimeException rte)
+      {
+         throw rte;
+      }
+      catch (Exception ex)
+      {
+         throw new WSException("Cannot process handler chain: " + filename, ex);
+      }
+   }
+
+   private QName getWebParamName(OperationMetaData opMetaData, int index, Class javaType, WebParam webParam)
+   {
+      String namespace = null ;
+      String name = null;
+      boolean header = false;
+
+      if (webParam != null)
+      {
+         if (webParam.targetNamespace().length() > 0)
+            namespace = webParam.targetNamespace();
+
+         if (webParam.name().length() > 0)
+            name = webParam.name();
+
+         header = webParam.header();
+      }
+
+      // Bare and headers must be qualified
+      if (namespace == null && (opMetaData.isDocumentBare() || header))
+         namespace = opMetaData.getQName().getNamespaceURI();
+
+      // RPC body parts must have no namespace
+      else if (opMetaData.isRPCLiteral() && !header)
+         namespace = null;
+
+      // Bare uses the operation name as the default, everything else is generated
+      if (name == null)
+         name = opMetaData.isDocumentBare() && !header ? opMetaData.getQName().getLocalPart() : "arg" + index;
+
+      return (namespace != null) ? new QName(namespace, name) : new QName(name);
+   }
+
+   private QName getWebResultName(OperationMetaData opMetaData, Class javaType, WebResult anWebResult)
+   {
+      String name = null;
+      String namespace = null;
+      boolean header = false;
+
+      if (anWebResult != null)
+      {
+         if (anWebResult.targetNamespace().length() > 0)
+            namespace = anWebResult.targetNamespace();
+
+         if (anWebResult.name().length() > 0)
+            name = anWebResult.name();
+
+         header = anWebResult.header();
+      }
+
+      // Bare and headers must be qualified
+      if (namespace == null && (opMetaData.isDocumentBare() || header))
+         namespace = opMetaData.getQName().getNamespaceURI();
+
+      // RPC body parts must have no namespace
+      else if (opMetaData.isRPCLiteral() && !header)
+         namespace = null;
+
+      // Bare uses the operation name as the default, everything else is generated
+      if (name == null)
+         name = opMetaData.isDocumentBare() && !header ? opMetaData.getResponseName().getLocalPart() : "return";
+
+      return (namespace != null) ? new QName(namespace, name) : new QName(name);
+   }
+
+   private void addFault(OperationMetaData omd, Class<?> exception)
+   {
+      if (omd.isOneWay())
+         throw new IllegalStateException("JSR-181 4.3.1 - A JSR-181 processor is REQUIRED to report an error if an operation marked "
+               + "@Oneway has a return value, declares any checked exceptions or has any INOUT or OUT parameters.");
+
+      WebFault annotation = exception.getAnnotation(WebFault.class);
+
+      String name;
+      String namespace;
+      String faultBeanName = null;
+
+      // Only the element name is effected by @WebFault, the type uses the same convention
+      QName xmlType = new QName(omd.getQName().getNamespaceURI(), exception.getSimpleName());
+
+      /*
+       * If @WebFault is present, and the exception contains getFaultInfo, the
+       * return value should be used. Otherwise we need to generate the bean.
+       */
+      boolean generate = true;
+      if (annotation != null)
+      {
+         name = annotation.name();
+         namespace = annotation.targetNamespace();
+         if (namespace.length() == 0)
+            namespace = omd.getQName().getNamespaceURI();
+
+         Class<?> faultBean = getFaultInfo(exception);
+         if (faultBean != null)
+         {
+            generate = false;
+            faultBeanName = faultBean.getName();
+         }
+      }
+      else
+      {
+         name = xmlType.getLocalPart();
+         namespace = xmlType.getNamespaceURI();
+      }
+
+      if (faultBeanName == null)
+         faultBeanName = JavaUtils.getPackageName(omd.getEndpointMetaData().getServiceEndpointInterface()) + ".jaxws." + exception.getSimpleName() + "Bean";
+
+      QName xmlName = new QName(namespace, name);
+
+      FaultMetaData fmd = new FaultMetaData(omd, xmlName, xmlType, exception.getName());
+      fmd.setFaultBeanName(faultBeanName);
+
+      if (generate)
+         wrapperGenerator.generate(fmd);
+
+      javaTypes.add(fmd.getFaultBean());
+      typeRefs.add(new TypeReference(fmd.getXmlName(), fmd.getFaultBean()));
+
+      omd.addFault(fmd);
+   }
+
+   private Class<?> getFaultInfo(Class<?> exception)
+   {
+      try
+      {
+         Method method = exception.getMethod("getFaultInfo");
+         Class<?> returnType = method.getReturnType();
+         if (returnType == void.class)
+            return null;
+
+         return returnType;
+      }
+      catch (SecurityException e)
+      {
+         throw new WSException("Unexpected security exception: " + e.getMessage(), e);
+      }
+      catch (NoSuchMethodException e)
+      {
+         return null;
+      }
+   }
+
+   private String[] convertTypeArguments(Class rawType, Type type)
+   {
+      if (!Collection.class.isAssignableFrom(rawType) && !Map.class.isAssignableFrom(rawType))
+         return null;
+
+      if (!(type instanceof ParameterizedType))
+         return null;
+
+      ParameterizedType paramType = (ParameterizedType)type;
+      Type[] arguments = paramType.getActualTypeArguments();
+      String[] ret = new String[arguments.length];
+      for (int i = 0; i < arguments.length; i++)
+         ret[i] = JavaUtils.erasure(arguments[i]).getName();
+
+      return ret;
+   }
+
+   /**
+    * Process operation meta data extensions.
+    */
+   private void processMetaExtensions(EndpointMetaData epMetaData, OperationMetaData opMetaData)
+   {
+      // Until there is a addressing annotion we fallback to implicit action asosciation
+      // TODO: figure out a way to assign message name instead of IN and OUT
+      String tns = epMetaData.getQName().getNamespaceURI();
+      String portTypeName = epMetaData.getQName().getLocalPart();
+
+      AddressingProperties ADDR = new AddressingPropertiesImpl();
+      AddressingOpMetaExt addrExt = new AddressingOpMetaExt(ADDR.getNamespaceURI());
+      addrExt.setInboundAction(tns + "/" + portTypeName + "/IN");
+
+      if (!opMetaData.isOneWay())
+         addrExt.setOutboundAction(tns + "/" + portTypeName + "/OUT");
+
+      opMetaData.addExtension(addrExt);
+   }
+
+   protected void processOrGenerateWSDL(Class wsClass, ServiceMetaData serviceMetaData, String wsdlLocation, EndpointMetaData epMetaData)
+   {
+      if (wsdlLocation.length() > 0)
+      {
+         serviceMetaData.setWsdlFile(wsdlLocation);
+      }
+      else
+      {
+         try
+         {
+            String serviceName = serviceMetaData.getServiceName().getLocalPart();
+
+            WSDLGenerator generator = new JAXBWSDLGenerator(jaxbCtx);
+            WSDLDefinitions wsdlDefinitions = generator.generate(serviceMetaData);
+
+            ServerConfigFactory factory = ServerConfigFactory.getInstance();
+            ServerConfig config = factory.getServerConfig();
+            File tmpdir = new File(config.getServerTempDir().getCanonicalPath() + "/jbossws");
+            tmpdir.mkdirs();
+
+            File wsdlTmpFile = File.createTempFile(serviceName, ".wsdl", tmpdir);
+            wsdlTmpFile.deleteOnExit();
+
+            Writer writer = IOUtils.getCharsetFileWriter(wsdlTmpFile, Constants.DEFAULT_XML_CHARSET);
+            wsdlDefinitions.write(writer, Constants.DEFAULT_XML_CHARSET);
+            writer.close();
+
+            serviceMetaData.setWsdlFile(wsdlTmpFile.toURL().toExternalForm());
+         }
+         catch (RuntimeException rte)
+         {
+            throw rte;
+         }
+         catch (IOException e)
+         {
+            throw new WSException("Cannot write generated wsdl", e);
+         }
+      }
+   }
+}
\ No newline at end of file


Property changes on: trunk/src/main/java/org/jboss/ws/metadata/builder/jaxws/JAXWSWebServiceMetaDataBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: trunk/src/main/java/org/jboss/ws/server/ServiceEndpointInfo.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/server/ServiceEndpointInfo.java	2006-11-19 21:49:36 UTC (rev 1467)
+++ trunk/src/main/java/org/jboss/ws/server/ServiceEndpointInfo.java	2006-11-20 04:58:20 UTC (rev 1468)
@@ -65,11 +65,11 @@
       this.sepMetaData = sepMetaData;
 
       // Set the endpoint type
-      if (udi.type == DeploymentType.JSR109_JSE || udi.type == DeploymentType.JSR181_JSE || udi.type == DeploymentType.JAXWS_PROVIDER_JSE)
+      if (udi.type == DeploymentType.JAXRPC_JSE || udi.type == DeploymentType.JAXWS_JSE)
       {
          this.type = EndpointType.JSE;
       }
-      else if (udi.type == DeploymentType.JSR109_EJB21 || udi.type == DeploymentType.JSR181_EJB21 || udi.type == DeploymentType.JAXWS_PROVIDER_EJB21)
+      else if (udi.type == DeploymentType.JAXRPC_EJB21 || udi.type == DeploymentType.JAXWS_EJB21)
       {
          String ejbName = sepMetaData.getLinkName();
          if (ejbName == null)
@@ -89,7 +89,7 @@
             this.type = EndpointType.MDB21;
          }
       }
-      else if (udi.type == DeploymentType.JSR181_EJB3 || udi.type == DeploymentType.JAXWS_PROVIDER_EJB3)
+      else if (udi.type == DeploymentType.JAXRPC_EJB3 || udi.type == DeploymentType.JAXWS_EJB3)
       {
          this.type = EndpointType.SLSB30;
       }




More information about the jbossws-commits mailing list