This commit was manufactured by cvs2svn to create tag 'R1_5_3'.
diff --git a/bundles/org.eclipse.jst.ws.axis.consumption.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.axis.consumption.core/META-INF/MANIFEST.MF
index 807f95b..822c2ed 100644
--- a/bundles/org.eclipse.jst.ws.axis.consumption.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.axis.consumption.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws.axis.consumption.core; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.103.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.axis.consumption.core.plugin.WebServiceAxisConsumptionCorePlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws.axis.consumption.core/src/org/eclipse/jst/ws/internal/axis/consumption/core/locator/AxisWebServiceLocator.java b/bundles/org.eclipse.jst.ws.axis.consumption.core/src/org/eclipse/jst/ws/internal/axis/consumption/core/locator/AxisWebServiceLocator.java
index da79c74..e03ba15 100644
--- a/bundles/org.eclipse.jst.ws.axis.consumption.core/src/org/eclipse/jst/ws/internal/axis/consumption/core/locator/AxisWebServiceLocator.java
+++ b/bundles/org.eclipse.jst.ws.axis.consumption.core/src/org/eclipse/jst/ws/internal/axis/consumption/core/locator/AxisWebServiceLocator.java
@@ -13,6 +13,7 @@
  * 20060517   140832 andyzhai@ca.ibm.com - Andy Zhai
  * 20060620   147862 cbrealey@ca.ibm.com - Chris Brealey
  * 20060620   147864 cbrealey@ca.ibm.com - Chris Brealey
+ * 20061214   165716 makandre@ca.ibm.com - Andrew Mak, Web Service finder does not locate Axis Web service deployed on certain servers
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.axis.consumption.core.locator;
@@ -385,8 +386,8 @@
 	{
 		for (int i = 0; i < ports.length; i++)
 		{
-			String name = ports[i].getName(); 
-			if ( name != null && name.trim().toLowerCase().equals("http")) return ports[i];
+			String protocol = ports[i].getProtocol(); 
+			if ( protocol != null && protocol.trim().toLowerCase().equals("http")) return ports[i];
 		}
 		return null;
 	}
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.axis.creation.ui/META-INF/MANIFEST.MF
index 5620ac3..73d0e0e 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws.axis.creation.ui; singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.axis.creation.ui.plugin.WebServiceAxisCreationUIPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/BUAxisInputCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/BUAxisInputCommand.java
index bc87075..c193e2a 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/BUAxisInputCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/BUAxisInputCommand.java
@@ -4,12 +4,13 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060419   132905 cbrealey@ca.ibm.com - Chris Brealey          
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.command;
 
@@ -38,6 +39,7 @@
 	private String javaBeanName_;
 
 	  private String serviceServerTypeID_;
+	  private IServer serviceExistingServer_ = null;
 	  
 		/**
 		* Default CTOR
@@ -88,13 +90,11 @@
 			}
 		}
 		
-		IServer serviceExistingServer=null;
-		
 		if (serverInstanceId != null) { // server exists
-	    	serviceExistingServer = ServerCore.findServer(serverInstanceId);
-			if (serviceExistingServer != null)
+	    	serviceExistingServer_ = ServerCore.findServer(serverInstanceId);
+			if (serviceExistingServer_ != null)
 		    {
-		      serviceServerTypeID_ = serviceExistingServer.getServerType().getId();
+		      serviceServerTypeID_ = serviceExistingServer_.getServerType().getId();
 		    }
 	    }
 	    else
@@ -121,4 +121,9 @@
 		public String getJavaBeanName() {
 			return javaBeanName_;
 		}
+		
+		public IServer getServiceExistingServer()
+		  {
+		    return serviceExistingServer_;
+		  }
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/CopyDeploymentFileCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/CopyDeploymentFileCommand.java
index dcc4350..f97e54b 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/CopyDeploymentFileCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/CopyDeploymentFileCommand.java
@@ -10,10 +10,12 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060524   130755 kathy@ca.ibm.com - Kathy Chan
+ * 20061221   168787 kathy@ca.ibm.com - Kathy Chan
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.command;
 
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 
@@ -27,6 +29,7 @@
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jst.ws.internal.axis.consumption.core.AxisConsumptionCoreMessages;
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.plugin.WebServicePlugin;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.command.internal.env.common.FileResourceUtils;
@@ -97,31 +100,37 @@
 					  serverModules = new IModule [] {EARProjectModule, projectModule};
 				  }
 				  IPath publishDirPath = publishHelper.getPublishDirectory(serverModules);
+				  
 				  if (publishDirPath != null) {
-					  IPath path = new Path( WEB_INF ).append( SERVER_CONFIG );
-					  IPath serverConfigPath = publishDirPath.append(path);
-					  if (serverConfigPath != null) {
-						  IVirtualFolder rootFolder = component.getRootFolder();
-						  if (rootFolder != null) {			  
-							  IVirtualFile newLocation = rootFolder.getFile(path);
-							  IPath targetPath = newLocation.getWorkspaceRelativePath();
-							  
-							  if (targetPath != null) {
-								  finStream = new FileInputStream(serverConfigPath.toString());
-								  if (finStream != null) {
-									  IStatusHandler statusHandler = environment.getStatusHandler();
-									  ResourceContext context = WebServicePlugin.getInstance().getResourceContext();
-									  FileResourceUtils.createFile(context,  
-											  targetPath,
-											  finStream,
-											  monitor,
-											  statusHandler);
-									  finStream.close();
+					  IVirtualFolder rootFolder = component.getRootFolder();
+					  IPath rootFolderPath = ResourceUtils.getWorkspaceRoot().getFile(rootFolder.getWorkspaceRelativePath()).getLocation();
+					  if (rootFolderPath != null) {
+						  File rootFolderFile = rootFolderPath.toFile();
+						  File publishDirFile = publishDirPath.toFile();
+						  if (!rootFolderFile.equals(publishDirFile)) {
+							  // copy the server-config.wsdd if the publish directory is not in the same as the project root folder
+							  IPath path = new Path( WEB_INF ).append( SERVER_CONFIG );
+							  IPath serverConfigPath = publishDirPath.append(path);
+							  if (serverConfigPath != null) {			  
+								  IVirtualFile newLocation = rootFolder.getFile(path);
+								  IPath targetPath = newLocation.getWorkspaceRelativePath();
+								  if (targetPath != null) {
+									  finStream = new FileInputStream(serverConfigPath.toString());
+									  if (finStream != null) {
+										  IStatusHandler statusHandler = environment.getStatusHandler();
+										  ResourceContext context = WebServicePlugin.getInstance().getResourceContext();
+										  FileResourceUtils.createFile(context,  
+												  targetPath,
+												  finStream,
+												  monitor,
+												  statusHandler);
+										  finStream.close();
+									  }
 								  }
 							  }
 						  }
 					  }
-				  }
+				  }  
 			  } 	  		  
 		  }	  
 	  }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java
index 45c8f59..dded685 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060330 128827   kathy@ca.ibm.com - Kathy Chan
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.command;
 
@@ -19,6 +20,8 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.ws.internal.wsrt.IWebService;
 import org.eclipse.wst.ws.internal.wsrt.WebServiceInfo;
 
@@ -30,6 +33,7 @@
 
 	  private String serverServer_;
       private String serviceServerTypeID_; 
+	  private IServer serviceExistingServer_ = null;
 	  private String wsdlURI_;
 	  private WebServiceInfo webServiceInfo_;
 	  	  
@@ -47,7 +51,21 @@
 		public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable ) 
 		{	    
 		serverServer_ = ws_.getWebServiceInfo().getServerInstanceId();
-        serviceServerTypeID_ = ws_.getWebServiceInfo().getServerFactoryId();
+
+		String serverInstanceId = ws_.getWebServiceInfo().getServerInstanceId();
+		String serverFactoryId = ws_.getWebServiceInfo().getServerFactoryId();
+		if (serverInstanceId != null) { // server exists
+	    	serviceExistingServer_ = ServerCore.findServer(serverInstanceId);
+			if (serviceExistingServer_ != null)
+		    {
+		      serviceServerTypeID_ = serviceExistingServer_.getServerType().getId();
+		    }
+	    }
+	    else
+	    {
+	    	serviceServerTypeID_ = serverFactoryId;
+	    }
+		
 		wsdlURI_ = ws_.getWebServiceInfo().getWsdlURL();
 		webServiceInfo_ = ws_.getWebServiceInfo();
 		
@@ -79,5 +97,10 @@
 		public WebServiceInfo getWebServiceInfo() {
 			return webServiceInfo_;
 		}
+		
+		public IServer getServiceExistingServer()
+		  {
+		    return serviceExistingServer_;
+		  }
 
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDCodeGenOperation.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDCodeGenOperation.java
index 1bbefc2..c4ab91a 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDCodeGenOperation.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDCodeGenOperation.java
@@ -12,6 +12,7 @@
  * 20060509   125094 sengpl@ca.ibm.com - Seng Phung-Lu, Use WorkspaceModifyOperation
  * 20060515   115225 sengpl@ca.ibm.com - Seng Phung-Lu
  * 20060517   142327 sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.command;
 
@@ -30,6 +31,7 @@
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
 import org.eclipse.wst.ws.internal.wsrt.WebServiceInfo;
 
@@ -54,6 +56,7 @@
 	private Skeleton2WSDLCommand skeleton2WSDLCommand = null;
 	private IProject serverProject;
 	private String serviceServerTypeID;
+	private IServer serviceExistingServer;
 	  
 	// UpdateWebXMLCommand
 	private UpdateWEBXMLCommand updateWebXMLCommand = null;
@@ -144,6 +147,7 @@
 			skeleton2WSDLCommand.setJavaWSDLParam(javaWSDLParam);
 			skeleton2WSDLCommand.setServerProject(serverProject);
 			skeleton2WSDLCommand.setServiceServerTypeID(serviceServerTypeID);
+			skeleton2WSDLCommand.setServiceExistingServer(serviceExistingServer);
 			status = skeleton2WSDLCommand.execute(monitor, info);
 			if (status.getSeverity() == Status.ERROR) {
 				throw new CoreException(status);
@@ -222,5 +226,9 @@
 	public void setServiceServerTypeID(String id) {
 	  this.serviceServerTypeID = id;
 	}
+	
+	public void setServiceExistingServer(IServer server) {
+		  this.serviceExistingServer = server;
+		}
 
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/BackupSkelImplCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/BackupSkelImplCommand.java
index e5ffc10..74de5ef 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/BackupSkelImplCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/BackupSkelImplCommand.java
@@ -12,6 +12,7 @@
  * 20060330 128827   kathy@ca.ibm.com - Kathy Chan
  * 20060403 128827   kathy@ca.ibm.com - Kathy Chan
  * 20060524 127343   mahutch@ca.ibm.com - Mark Hutchinson
+ * 20070116 169138   mahutch@ca.ibm.com - Mark Hutchinson	
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.task;
 
@@ -118,7 +119,11 @@
 		  service = (Service) definition.getServices().values().iterator().next();
 		  port = (Port) service.getPorts().values().iterator().next();
 		  Binding binding = port.getBinding();
-		  beanName.append(binding.getQName().getLocalPart());
+		  
+		  String qName = binding.getQName().getLocalPart();		  
+		  beanName.append(qName.substring(0,1).toUpperCase());//Fix for bug 169138, need to ensure first char is uppercase
+		  beanName.append(qName.substring(1));
+
 		  beanName.append(IMPL);
 		  String beanNameString = beanName.toString();
 		  javaWSDLParam.setBeanName(beanNameString);
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java
index e076cbb..eb5636e 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java
@@ -12,6 +12,7 @@
  * 20060221   119111 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060330   124667 kathy@ca.ibm.com - Kathy Chan
  * 20060524   128601 andyzhai@ca.ibm.com - Andy Zhai
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.task;
 
@@ -43,6 +44,7 @@
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.ws.internal.parser.discovery.WebServicesParserExt;
 import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
 
@@ -62,6 +64,7 @@
 	public final byte MODE_BEAN = (byte) 0;
 	public final String SERVICE_NAME_EXT = "Service"; //$NON-NLS-1$
 	private final String TEMP_URI = "http://tempuri.org/"; //$NON-NLS-1$
+	private IServer serviceExistingServer;
 
 	public DefaultsForServerJavaWSDLCommand( ) 
 	{
@@ -170,7 +173,7 @@
         String projectURL = null;
         if (serviceServerTypeID_ != null && serviceServerTypeID_.length()>0)
         {
-		  projectURL = ServerUtils.getEncodedWebComponentURL(serviceProject_, serviceServerTypeID_);          
+		  projectURL = ServerUtils.getEncodedWebComponentURL(serviceProject_, serviceServerTypeID_, serviceExistingServer);          
         }
         if (projectURL == null) // either no server type defined or server not able to get project URL
         { 
@@ -252,4 +255,7 @@
     serviceServerTypeID_ = id;
   }
   
+  public void setServiceExistingServer(IServer existingServer) {
+		serviceExistingServer = existingServer;
+	} 
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java
index 4d56e9f..0fdfa4b 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
  * -------- -------- -----------------------------------------------------------
  * 20060221   119111 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060330   124667 kathy@ca.ibm.com - Kathy Chan
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
+ * 20070112   165721 makandre@ca.ibm.com - Andrew Mak, WSDL import cannot use relative import with to parent directories
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.axis.creation.ui.task;
 
@@ -46,11 +48,12 @@
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.common.ServerUtils;
-import org.eclipse.jst.ws.internal.consumption.command.common.CopyWSDLCommand;
+import org.eclipse.jst.ws.internal.consumption.command.common.CopyWSDLTreeCommand;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
 
 public class Skeleton2WSDLCommand extends AbstractDataModelOperation
@@ -63,6 +66,7 @@
   private JavaWSDLParameter javaWSDLParam;
   private IProject serverProject;
   private String serviceServerTypeID_;  
+  private IServer serviceExistingServer;  
   private final String TEMP_URI = "http://tempuri.org/"; //$NON-NLS-1$
 
   public Skeleton2WSDLCommand( ) {
@@ -172,16 +176,20 @@
      }
 
      // copy WSDL
-     CopyWSDLCommand copyWSDLCommand = new CopyWSDLCommand();
-     copyWSDLCommand.setWebServicesParser(webServicesParser);
-     copyWSDLCommand.setWsdlURI(wsdlURL);
-     copyWSDLCommand.setDestinationURI(outputFile.getLocation().toFile().toURL().toString());
-     copyWSDLCommand.setDefinition(definition);
-     copyWSDLCommand.setEnvironment(environment);
-     IStatus status = copyWSDLCommand.execute(null, null);
+     CopyWSDLTreeCommand copyWSDLTreeCommand = new CopyWSDLTreeCommand();
+     copyWSDLTreeCommand.setWebServicesParser(webServicesParser);
+     copyWSDLTreeCommand.setWsdlURI(wsdlURL);
+     copyWSDLTreeCommand.setDestinationURI(outputFile.getLocation().toFile().toURL().toString());
+     copyWSDLTreeCommand.setDefinition(definition);
+     copyWSDLTreeCommand.setEnvironment(environment);
+     IStatus status = copyWSDLTreeCommand.execute(null, null);
      if(status!=null && status.getSeverity()==Status.ERROR) {
        return status;
      }
+     
+     // update wsdl location
+     String newPath = outputFile.getParent().getLocation().append(copyWSDLTreeCommand.getWSDLRelPath()).toString();
+     javaWSDLParam.setOutputWsdlLocation(newPath);
     } 
     catch (Exception e) {
       IStatus status = StatusUtils.errorStatus( NLS.bind(AxisConsumptionUIMessages.MSG_ERROR_WRITE_WSDL, new String[] { wsdlLocation }), e);
@@ -210,7 +218,7 @@
       String projectURL = null;
       if (serviceServerTypeID_ != null && serviceServerTypeID_.length()>0)
       {
-	    projectURL = ServerUtils.getEncodedWebComponentURL(serverProject, serviceServerTypeID_);
+	    projectURL = ServerUtils.getEncodedWebComponentURL(serverProject, serviceServerTypeID_, serviceExistingServer);
       }
       
       if (projectURL == null) // either no server type defined or server not able to get project URL
@@ -278,6 +286,10 @@
   public void setServiceServerTypeID(String id)
   {
     serviceServerTypeID_ = id;
-  }  
+  }
+
+public void setServiceExistingServer(IServer existingServer) {
+	serviceExistingServer = existingServer;
+}  
 
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java
index 550f738..f293004 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java
@@ -18,6 +18,7 @@
  * 20060524   130755 kathy@ca.ibm.com - Kathy Chan
  * 20060607   144978 kathy@ca.ibm.com - Kathy Chan
  * 20060810   135395 makandre@ca.ibm.com - Andrew Mak, Enable WTP Web service framework opening Java editor
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.axis.creation.ui.wsrt;
@@ -186,7 +187,8 @@
 	    //DefaultsForServerJavaWSDLCommand
 	    registry.addMapping(BUAxisDefaultingCommand.class, "JavaWSDLParam", DefaultsForServerJavaWSDLCommand.class);
 	    registry.addMapping(BUAxisInputCommand.class, "ServerProject", DefaultsForServerJavaWSDLCommand.class, "ServiceProject", new StringToIProjectTransformer());
-        registry.addMapping(BUAxisInputCommand.class, "ServiceServerTypeID", DefaultsForServerJavaWSDLCommand.class);        
+        registry.addMapping(BUAxisInputCommand.class, "ServiceServerTypeID", DefaultsForServerJavaWSDLCommand.class); 
+        registry.addMapping(BUAxisInputCommand.class, "ServiceExistingServer", DefaultsForServerJavaWSDLCommand.class);        
 	    registry.addMapping(BUAxisDefaultingCommand.class, "JavaBeanName", DefaultsForServerJavaWSDLCommand.class);
 	    registry.addMapping(BUAxisDefaultingCommand.class, "Parser", DefaultsForServerJavaWSDLCommand.class);
 	    
@@ -292,7 +294,8 @@
 	    
 	    // Skeleton2WSDLCommand
 	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServerProject", TDCodeGenOperation.class, "ServerProject", projectTransformer);
-	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServiceServerTypeID", TDCodeGenOperation.class);	    
+	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServiceServerTypeID", TDCodeGenOperation.class);
+	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServiceExistingServer", TDCodeGenOperation.class);	
 
 	    // RefreshProjectCommand
 	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServerProject", RefreshProjectCommand.class, "Project", projectTransformer);
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF
index 184de7d..19c46ac 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws.consumption.ui; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.consumption.ui.plugin.WebServiceConsumptionUIPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ant/AntClientRootCommandFragment.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ant/AntClientRootCommandFragment.java
index 25e1a3d..5f713b9 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ant/AntClientRootCommandFragment.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ant/AntClientRootCommandFragment.java
@@ -14,10 +14,12 @@
  * 20060530   144358 kathy@ca.ibm.com - Kathy Chan
  * 20060530   144350 kathy@ca.ibm.com - Kathy Chan
  * 20060825   155114 pmoogk@ca.ibm.com - Peter Moogk
+ * 20061011   159283 makandre@ca.ibm.com - Andrew Mak, project not associated to EAR when using ant on command-line
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.ant;
 
 import org.eclipse.jst.ws.internal.consumption.ui.command.AntDefaultingOperation;
+import org.eclipse.jst.ws.internal.consumption.ui.command.AntRestoringCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.command.CheckForServiceProjectCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.command.ListOptionsCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.command.data.EclipseIPath2URLStringTransformer;
@@ -77,7 +79,7 @@
   add( new SimpleFragment( new ClientExtensionOutputCommand(), "" ) );
  
   add(new FinishFragment());
-  
+  add( new SimpleFragment( new AntRestoringCommand(), "" ));
   add( new SimpleFragment( new ScenarioCleanupCommand(), "" ));
  
   }
@@ -214,5 +216,6 @@
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", DeployClientFragment.class, "EarProject", null );
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", DeployClientFragment.class, "Ear", null );  
           
+      dataRegistry.addMapping(AntDefaultingOperation.class, "RendererValidation", AntRestoringCommand.class);          
    }        
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntDefaultingOperation.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntDefaultingOperation.java
index 480cd6c..3fbf57b 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntDefaultingOperation.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntDefaultingOperation.java
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060221   119111 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20061011   159283 makandre@ca.ibm.com - Andrew Mak, project not associated to EAR when using ant on command-line
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.command;
 
@@ -19,11 +20,25 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
 
 public class AntDefaultingOperation extends AbstractDataModelOperation{
 
+	private boolean rendererValidation;
+	
 	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 		// TODO Auto-generated method stub
+
+		rendererValidation = RendererFactory.getDefaultRendererFactory().isValidating();		
+		RendererFactory.getDefaultRendererFactory().setValidating(false);
+		
+		return Status.OK_STATUS;
+	}
+	
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		
+		RendererFactory.getDefaultRendererFactory().setValidating(rendererValidation);
+		
 		return Status.OK_STATUS;
 	}
 	
@@ -56,4 +71,9 @@
     {
       return true;
     }
+    
+    public boolean getRendererValidation()
+    {
+    	return rendererValidation;
+    }
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntRestoringCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntRestoringCommand.java
new file mode 100644
index 0000000..5c73902
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/AntRestoringCommand.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20061011   159283 makandre@ca.ibm.com - Andrew Mak, project not associated to EAR when using ant on command-line
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.command;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
+
+public class AntRestoringCommand extends AbstractDataModelOperation{
+
+	private boolean rendererValidation;
+	
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+
+		RendererFactory.getDefaultRendererFactory().setValidating(rendererValidation);
+
+		return Status.OK_STATUS;
+	}
+	
+    public void setRendererValidation(boolean rendererValidation)
+    {
+    	this.rendererValidation = rendererValidation;
+    }
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java
index 0a472a2..02886f1 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060324   116750 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20070119   159458 mahutch@ca.ibm.com - Mark Hutchinson
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.ui.common;
@@ -25,6 +26,7 @@
 import org.eclipse.jst.ws.internal.consumption.common.IServerDefaulter;
 import org.eclipse.jst.ws.internal.consumption.common.ServerInfo;
 import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerCore;
 
@@ -72,14 +74,22 @@
       return null;
     
     ArrayList compatibleServersList = new ArrayList();
-    String runtimeId = runtime.getRuntimeType().getId();
-    for (int i=0; i<servers.length; i++)
+    IRuntimeType runtimeType = runtime.getRuntimeType();
+    if (runtimeType != null)
     {
-      IServer server = (IServer)servers[i];
-      String serverRuntimeId = server.getRuntime().getRuntimeType().getId();
-      if (serverRuntimeId.equals(runtimeId))
-        compatibleServersList.add(server);
-      
+    	String runtimeId = runtimeType.getId();
+		for (int i=0; i<servers.length; i++)
+		{
+		  IServer server = (IServer)servers[i];
+		  IRuntimeType runtimeType2 = server.getRuntime().getRuntimeType();
+		  if (runtimeType2 != null)
+		  {
+			  String serverRuntimeId = runtimeType2.getId();
+			  if (serverRuntimeId.equals(runtimeId))
+			    compatibleServersList.add(server);
+		  }
+		  
+		}
     }
     if (compatibleServersList.size()<1)
       return null;
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java
index 28717b1..b38af5c 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java
@@ -17,6 +17,8 @@
  * 20060425   137831 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060427   126780 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060427   138058 joan@ca.ibm.com - Joan Haggarty
+ * 20060905   156230 kathy@ca.ibm.com - Kathy Chan, Handling projects with no target runtime
+ * 20070119   159458 mahutch@ca.ibm.com - Mark Hutchinson
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.common;
 
@@ -71,6 +73,7 @@
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.common.project.facet.core.VersionFormatException;
 import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
@@ -553,7 +556,8 @@
     {
       org.eclipse.wst.common.project.facet.core.runtime.IRuntime fRuntime = (org.eclipse.wst.common.project.facet.core.runtime.IRuntime)itr.next();
       IRuntime sRuntime = FacetUtil.getRuntime(fRuntime);
-      if (runtimeTypeId.equals(sRuntime.getRuntimeType().getId()))
+      IRuntimeType runtimeType = sRuntime.getRuntimeType();
+      if (runtimeType != null && runtimeTypeId.equals(runtimeType.getId()))
       {
         //found a match
         return true;
@@ -667,7 +671,10 @@
 	 */
 	public boolean serverNeedsEAR(String serverTypeId)
 	{
-	    if (serverTypeId != null && serverTypeId.length() > 0) {
+		if (serverTypeId == null) {
+			return false;
+		}
+	    if (serverTypeId.length() > 0) {
 			String targetId = ServerUtils.getRuntimeTargetIdFromFactoryId(serverTypeId);
 			if (targetId != null && targetId.length() > 0) {
 				if (!ServerUtils.isTargetValidForEAR(targetId, "13")) // rm j2ee
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java
index 65f13a2..8c03870 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
  * 20060221   119111 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060516   126965 kathy@ca.ibm.com - Kathy Chan
  * 20060529   141422 kathy@ca.ibm.com - Kathy Chan
+ * 20070123   167487 makandre@ca.ibm.com - Andrew Mak
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.ui.extension;
@@ -30,6 +31,7 @@
 import org.eclipse.wst.command.internal.env.core.context.ResourceContext;
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.ws.internal.common.HTTPUtility;
 import org.eclipse.wst.ws.internal.wsrt.IContext;
 import org.eclipse.wst.ws.internal.wsrt.ISelection;
 import org.eclipse.wst.ws.internal.wsrt.IWebService;
@@ -95,7 +97,10 @@
 		  wsInfo.setServerInstanceId(typeRuntimeServer_.getServerInstanceId());
 		  wsInfo.setState(WebServiceState.UNKNOWN_LITERAL);
 		  wsInfo.setWebServiceRuntimeId(typeRuntimeServer_.getRuntimeId());
-		  wsInfo.setWsdlURL(wsdlURI_);
+		  
+		  // check for redirection in the wsdl
+		  HTTPUtility httpUtil = new HTTPUtility();		  
+		  wsInfo.setWsdlURL(httpUtil.handleRedirect(wsdlURI_));
 
 		  webServiceClient_ = wsrt.getWebServiceClient(wsInfo);
 		  WebServiceScenario scenario = WebServiceScenario.CLIENT_LITERAL;
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java
index dee828c..699f534 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060728	  151723 mahutch@ca.ibm.com - Mark Hutchinson
+ * 20070109   130965 kathy@ca.ibm.com - Kathy Chan
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.ui.preferences;
@@ -132,14 +133,17 @@
 		String selectedText = getServerSelection();
 		serverToRuntimeToJ2EE_.getList().setSelectionValue(selectedText);
 		
+		// TODO (see bug 116025) - Since the server and runtime set in serverToRuntimeToJ2EE is just the list of 
+		// all servers and all runtime (i.e. no validation checking is being done), no need to update the runtime,
+		// just keep the original value.
 		//Update the runtime -------------------------------
-		setRuntimeItems(serverToRuntimeToJ2EE_.getChoice().getList().getList());
-		if (serverToRuntimeToJ2EE_.getChoice().getList().getList().length > 0)
-		  serverToRuntimeToJ2EE_.getChoice().getList().setIndex(0);
-		
-		String newRuntimeText = serverToRuntimeToJ2EE_.getChoice().getList().getSelection();
-		if (newRuntimeText!=null && newRuntimeText.length()>0)
-			setRuntimeSelection(newRuntimeText);		
+//		setRuntimeItems(serverToRuntimeToJ2EE_.getChoice().getList().getList());
+//		if (serverToRuntimeToJ2EE_.getChoice().getList().getList().length > 0)
+//		  serverToRuntimeToJ2EE_.getChoice().getList().setIndex(0);
+//		
+//		String newRuntimeText = serverToRuntimeToJ2EE_.getChoice().getList().getSelection();
+//		if (newRuntimeText!=null && newRuntimeText.length()>0)
+//			setRuntimeSelection(newRuntimeText);		
 		
 		startListening();
 	}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java
index d2e5b76..24dd038 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java
@@ -23,6 +23,9 @@
  * 20060817   140017 makandre@ca.ibm.com - Andrew Mak, longer project or server/runtime strings do not resize wizard
  * 20060825   135570 makandre@ca.ibm.com - Andrew Mak, Service implementation URL not displayed properly on first page
  * 20060829   155441 makandre@ca.ibm.com - Andrew Mak, web service wizard hangs during resize
+ * 20060907   156211 makandre@ca.ibm.com - Andrew Mak, Selecting service definition invalidated project config when creating web service java client
+ * 20061212   159911 makandre@ca.ibm.com - Andrew Mak, changing service definition resets some configuration fields
+ * 20060125   159911 kathy@ca.ibm.com - Kathy Chan, Remove unused method and imports
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets;
 
@@ -35,7 +38,6 @@
 import org.eclipse.jst.ws.internal.consumption.ui.command.data.EclipseIPath2URLStringTransformer;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ValidationUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.Timer;
-import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.ClientRuntimeSelectionWidgetDefaultingCommand;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.plugin.WebServicePlugin;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
@@ -104,7 +106,7 @@
 	  validationState_ = ValidationUtils.VALIDATE_ALL;
 	  statusListener_.handleEvent(null);
 	  if (validObjectSelection_)
-		  callObjectTransformation(wsdlValidatorWidget_.getProject(), 
+		  callObjectTransformation(project_, 
 				  wsdlValidatorWidget_.getComponentName(), 
 				  wsdlValidatorWidget_.getWsdlURI());	  
   }
@@ -380,29 +382,7 @@
     monitorService_.setSelection(value.booleanValue());
   }
 
-  private void refreshClientRuntimeSelection()
-	{		
-		//new up ServerRuntimeSelectionWidgetDefaultingCommand
-		ClientRuntimeSelectionWidgetDefaultingCommand clientRTDefaultCmd = new ClientRuntimeSelectionWidgetDefaultingCommand();
-		
-		clientRTDefaultCmd.setResourceContext(resourceContext_);
-		clientRTDefaultCmd.setClientEarProjectName(getClientEarProjectName());
-		clientRTDefaultCmd.setClientInitialProject(getProject());  
-        clientRTDefaultCmd.setClientTypeRuntimeServer(getClientTypeRuntimeServer());
-		clientRTDefaultCmd.setTestService(getTestService().booleanValue());
-		clientRTDefaultCmd.setWebServicesParser(getWebServicesParser());
-		clientRTDefaultCmd.setWsdlURI(getWsdlURI());
-		
-		clientRTDefaultCmd.execute(null, null);
-		  
-		setClientComponentType(clientRTDefaultCmd.getClientComponentType());
-		setClientEarProjectName(clientRTDefaultCmd.getClientEarProjectName());
-		setClientNeedEAR(clientRTDefaultCmd.getClientNeedEAR());
-		setClientProjectName(clientRTDefaultCmd.getClientProjectName());
-		setClientTypeRuntimeServer(clientRTDefaultCmd.getClientTypeRuntimeServer());
-	}
-  
-	public IStatus getStatus() {
+  public IStatus getStatus() {
 				
 		validObjectSelection_ = false;	// assume false at first
 
@@ -502,7 +482,9 @@
            setWebServicesParser(wsdlOutputCommand.getWebServicesParser());
            setWebServiceURI(wsdlOutputCommand.getWsdlURI());
            
-	       refreshClientRuntimeSelection();
+           // bug 159911: our starting point is a wsdl, we should not need to
+           // refresh the runtime everytime the user specify a new wsdl path
+           // refreshClientRuntimeSelection();
      }
 	
   private class WSDLBrowseListener implements SelectionListener
@@ -526,7 +508,7 @@
 			   serviceImpl_.addModifyListener(objectModifyListener_);
 			   
 			   // call WSDLSelectionOutputCommand to carry out any transformation on the objectSelection
-	           callObjectTransformation(wsdlDialog_.getProject(),
+	           callObjectTransformation(project_,
 	        			wsdlDialog_.getComponentName(), wsdlDialog_.getWebServiceURI());
 	           
 		       validationState_ = ValidationUtils.VALIDATE_ALL;
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WSDLSelectionWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WSDLSelectionWidgetDefaultingCommand.java
index fc40135..127c509 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WSDLSelectionWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WSDLSelectionWidgetDefaultingCommand.java
@@ -1,12 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070116   159618 makandre@ca.ibm.com - Andrew Mak, Project and EAR not defaulted properly when wizard launched from JSR-109 Web services branch in J2EE Project Explorer
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets;
 
@@ -18,11 +21,13 @@
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef;
 import org.eclipse.jst.ws.internal.common.J2EEActionAdapterFactory;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.common.UniversalPathTransformer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.wsdl.internal.impl.ServiceImpl;
@@ -31,9 +36,12 @@
 public class WSDLSelectionWidgetDefaultingCommand extends AbstractDataModelOperation
 {
   private IStructuredSelection selection_;
+  private UniversalPathTransformer transformer_ = new UniversalPathTransformer();  
   
   public String getWebServiceURI()
   {
+    String uri = "";
+    
   	if (selection_ != null && !selection_.isEmpty())
   	{
   	  Object firstSel = selection_.getFirstElement();
@@ -43,28 +51,30 @@
   	    String ext = ifile.getFileExtension();
   	    if (ext != null && (ext.equals("wsdl") || ext.equals("wsil") || ext.equals("html")))
   	    {
-  	      return ifile.getFullPath().toString();
+  	      uri = ifile.getFullPath().toString();
   	    }
   	  }
   	  if (firstSel instanceof ServiceImpl)
       {
         ServiceImpl serviceImpl = (ServiceImpl)firstSel;
-        return J2EEActionAdapterFactory.getWSDLURI(serviceImpl);
+        uri = J2EEActionAdapterFactory.getWSDLURI(serviceImpl);
       }
   	  if (firstSel instanceof ServiceRef)
       {
   	    ServiceRef serviceRef = (ServiceRef)firstSel;
-        return J2EEActionAdapterFactory.getWSDLURI(serviceRef);
+        uri = J2EEActionAdapterFactory.getWSDLURI(serviceRef);
       }
   	  if (firstSel instanceof WSDLResourceImpl)
   	  {
   	    WSDLResourceImpl wsdlRI = (WSDLResourceImpl)firstSel;
-  	    return J2EEActionAdapterFactory.getWSDLURI(wsdlRI);
+  	    uri = J2EEActionAdapterFactory.getWSDLURI(wsdlRI);
   	  }
   	  if (firstSel instanceof String)
-  	    return (String)firstSel;
+  	    uri = (String)firstSel;
+  	  
+  	  uri = transformer_.toPath(uri);
   	}
-    return "";
+    return uri;
   }
  
   public void setInitialSelection( IStructuredSelection selection )
@@ -101,6 +111,10 @@
     return cname;
   }
   
+  private boolean hasProtocol(String url) {	  
+    return url.indexOf(":") != -1;	  
+  }
+  
   private IProject getProjectFromInitialSelection(IStructuredSelection selection)
   {
     if (selection != null && selection.size() == 1)
@@ -111,10 +125,13 @@
         try
         { 
           IResource resource = ResourceUtils.getResourceFromSelection(obj);
-          if (resource==null) 
-            return null;
-          IProject p = ResourceUtils.getProjectOf(resource.getFullPath());
-          return p;
+          if (resource==null) {
+            String uri = getWebServiceURI();
+            if (hasProtocol(uri)) return null;
+            return ResourceUtils.getProjectOf(new Path(uri));
+          }
+          else
+            return ResourceUtils.getProjectOf(resource.getFullPath());
         } catch(CoreException e)
         {
           return null;
@@ -134,10 +151,14 @@
         try
         { 
           IResource resource = ResourceUtils.getResourceFromSelection(obj);
-          if (resource==null) 
-            return null;
-          
-          IVirtualComponent comp = ResourceUtils.getComponentOf(resource);
+          IVirtualComponent comp;
+          if (resource==null) {
+            String uri = getWebServiceURI();
+            if (hasProtocol(uri)) return null;              
+            comp = ResourceUtils.getComponentOf(new Path(uri)) ;
+          }
+          else 
+            comp = ResourceUtils.getComponentOf(resource);
           if (comp!=null)
           {
             return comp.getName();
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java
index 43620e4..12561b2 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@
  * 20060726   150865 sengpl@ca.ibm.com - Seng Phung-Lu
  * 20060817   140017 makandre@ca.ibm.com - Andrew Mak, longer project or server/runtime strings do not resize wizard
  * 20060829   155441 makandre@ca.ibm.com - Andrew Mak, web service wizard hangs during resize
+ * 20070126   138484 kathy@ca.ibm.com - Kathy Chan
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets;
 
@@ -44,6 +45,7 @@
 import org.eclipse.jst.ws.internal.consumption.ui.common.DefaultingUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ValidationUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.plugin.WebServiceConsumptionUIPlugin;
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.ClientRuntimeSelectionWidgetDefaultingCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.ProjectSelectionWidget;
 import org.eclipse.jst.ws.internal.consumption.ui.wizard.RuntimeServerSelectionDialog;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
@@ -164,6 +166,7 @@
 	
   private UIUtils utils_ = new UIUtils("org.eclipse.jst.ws.consumption.ui");
   private IPackable packable_ = null;  
+  private LabelsAndIds labelIds_;
   
   public WebServiceClientTypeWidget(boolean clientOnly) {
 	    clientOnly_ = clientOnly;
@@ -218,9 +221,14 @@
 			}
 
 			public void widgetSelected(SelectionEvent e) {
-				// TODO - a change in the client type should result in a recalcualtion
-				// of page defaults. Not an issue at this point since 
-				// there is only one possible client type.
+				String oldTypeId = ids_.getTypeId();
+				int currentSelectionIdx = clientTypeCombo_.getSelectionIndex();
+				String currentTypeId = labelIds_.getIds_()[currentSelectionIdx];
+				if (!oldTypeId.equals(currentTypeId)) {		
+					// handle changing client type
+					ids_.setTypeId(currentTypeId);
+					refreshServerRuntimeSelection();
+				}
 				validationState_ = ValidationUtils.VALIDATE_ALL;
 				statusListener_.handleEvent(null);
 			}
@@ -466,6 +474,7 @@
     String[]                     clientIds  = labelIds.getIds_();
     String                       selectedId = ids.getTypeId();
     
+    labelIds_ = labelIds;
 	// rskreg
     clientTypeCombo_.setItems( labelIds.getLabels_() );
     
@@ -1016,6 +1025,28 @@
 		public void widgetDefaultSelected(SelectionEvent e) {
 			widgetSelected(e);
 		}
-	}  
+	} 
+  
+  private void refreshServerRuntimeSelection()
+	{		
+		//new up ServerRuntimeSelectionWidgetDefaultingCommand
+		ClientRuntimeSelectionWidgetDefaultingCommand clientRTDefaultCmd = new ClientRuntimeSelectionWidgetDefaultingCommand();
+		
+		  //call setters of new defaulting command:
+		  clientRTDefaultCmd.setClientInitialSelection(getObjectSelection());
+		  clientRTDefaultCmd.setClientInitialProject(getProject());	      
+	      clientRTDefaultCmd.setClientTypeRuntimeServer(getTypeRuntimeServer());
+		  clientRTDefaultCmd.setWebServicesParser(getWebServicesParser());     
+	      clientRTDefaultCmd.setClientEarProjectName(getClientEarProjectName());
+		  		  
+		  clientRTDefaultCmd.execute(null, null);
+		  
+		  //perform mappings from the defaulting command to the project settings...	
+		  setClientProjectName(clientRTDefaultCmd.getClientProjectName());
+		  setClientEarProjectName(clientRTDefaultCmd.getClientEarProjectName());
+		  setClientComponentType(clientRTDefaultCmd.getClientComponentType());
+		  setTypeRuntimeServer(clientRTDefaultCmd.getClientTypeRuntimeServer());
+          setClientNeedEAR(clientRTDefaultCmd.getClientNeedEAR());
+	}
 }
 
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/EJBSelectionTransformer.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/EJBSelectionTransformer.java
index f6c35a6..6306fbb 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/EJBSelectionTransformer.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/EJBSelectionTransformer.java
@@ -1,19 +1,26 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070116   159618 makandre@ca.ibm.com - Andrew Mak, Project and EAR not defaulted properly when wizard launched from JSR-109 Web services branch in J2EE Project Explorer
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
+import org.eclipse.jst.j2ee.webservice.wsdd.EJBLink;
+import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent;
+import org.eclipse.jst.j2ee.webservice.wsdd.ServiceImplBean;
 import org.eclipse.wst.command.internal.env.core.data.Transformer;
 
 public class EJBSelectionTransformer implements Transformer
@@ -28,9 +35,31 @@
       {
         return new StructuredSelection(((EnterpriseBean)sel).getName());
       }
+      else if (sel instanceof ServiceImplBean)
+      {
+        return new StructuredSelection(getBeanName((ServiceImplBean) sel));
+      }
+      else if (sel instanceof EJBLink)
+      {
+        return new StructuredSelection(getBeanName((EJBLink) sel));
+      }
     }
     return value;
   }
   
-
+  private String getBeanName(ServiceImplBean bean) {
+	  EObject eObject = bean.eContainer();
+	  if (eObject instanceof PortComponent) {
+		  PortComponent pc = (PortComponent) eObject;
+		  return pc.getPortComponentName();	      	
+	  }
+	  return "";
+  }
+  
+  private String getBeanName(EJBLink link) {
+	  EObject eObject = link.eContainer();
+	  if (eObject instanceof ServiceImplBean)
+		  return getBeanName((ServiceImplBean) eObject);
+	  return "";
+  }
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/JavaBeanSelectionTransformer.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/JavaBeanSelectionTransformer.java
index 7a93358..8e76b88 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/JavaBeanSelectionTransformer.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/JavaBeanSelectionTransformer.java
@@ -1,21 +1,28 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070116   159618 makandre@ca.ibm.com - Andrew Mak, Project and EAR not defaulted properly when wizard launched from JSR-109 Web services branch in J2EE Project Explorer
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jst.j2ee.webservice.wsdd.ServiceImplBean;
+import org.eclipse.jst.j2ee.webservice.wsdd.ServletLink;
+import org.eclipse.jst.j2ee.webservice.wsdd.internal.impl.PortComponentImpl;
 import org.eclipse.wst.command.internal.env.core.data.Transformer;
 
 public class JavaBeanSelectionTransformer implements Transformer
@@ -35,6 +42,14 @@
         if (res instanceof IFile)
           return new StructuredSelection(computeFullyQualifiedJavaName((IFile)res));
       }
+      else if (sel instanceof ServiceImplBean)
+      {
+        return new StructuredSelection(getBeanName((ServiceImplBean) sel));
+      }
+      else if(sel instanceof ServletLink)
+      {
+        return new StructuredSelection(getBeanName((ServletLink) sel));
+      }
     }
     return value;
   }
@@ -53,4 +68,20 @@
     }
     return beanClass;
   }
-}
\ No newline at end of file
+  
+  private String getBeanName(ServiceImplBean bean) {
+    EObject eObject = bean.eContainer();
+    if (eObject instanceof PortComponentImpl) {
+      PortComponentImpl pci = (PortComponentImpl) eObject;
+      return pci.getServiceEndpointInterface();	      	
+    }
+    return "";
+  }
+  
+  private String getBeanName(ServletLink link) {    
+    EObject eObject = link.eContainer();
+    if (eObject instanceof ServiceImplBean)
+      return getBeanName((ServiceImplBean) eObject);
+    return "";
+  }
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java
index 235e48d..0dd5eab 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060830   155114 pmoogk@ca.ibm.com - Peter Moogk, Updated patch for this defect.
+ * 20070116   159618 makandre@ca.ibm.com - Andrew Mak, Project and EAR not defaulted properly when wizard launched from JSR-109 Web services branch in J2EE Project Explorer
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
@@ -19,9 +20,13 @@
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.common.UniversalPathTransformer;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceImpl;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
@@ -42,6 +47,10 @@
   private IProject               project_;
   private String                 componentName_;
   private WebServicesParser      parser_;
+  
+  private UniversalPathTransformer transformer_ = new UniversalPathTransformer();
+  
+  private boolean                topDown_ = false;
 
   public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
   {
@@ -96,6 +105,7 @@
         if (scenario == WebServiceScenario.TOPDOWN)
         {
           objectSelectionWidgetId = "org.eclipse.jst.ws.internal.consumption.ui.widgets.object.WSDLSelectionWidget";
+          topDown_ = true;
         }
         else
         {
@@ -158,6 +168,8 @@
   
   public IProject getProject()
   {
+    if (project_ == null && topDown_)
+      project_ = getProjectFromTransformedSelection();
     return project_;
   }
   
@@ -168,6 +180,8 @@
   
   public String getComponentName()
   {
+    if (componentName_ == null && topDown_)
+      componentName_ = getComponentNameFromTransformedSelection();
     return componentName_;
   }
 
@@ -184,6 +198,34 @@
     return parser_;
   }
   
+  private boolean hasProtocol(String url) { 
+    return url.indexOf(":") != -1;  
+  }
+  
+  private IResource findResourceFromSelection(Object selection) throws CoreException {
+	  
+      IResource resource = ResourceUtils.getResourceFromSelection(selection); 
+	  
+      // try finding at least the project using the EMF way
+      if (resource == null && selection instanceof EObject)
+          resource = ProjectUtilities.getProject(selection);
+	  
+      return resource;
+  }
+  
+  private IProject getProjectFromTransformedSelection() {
+    if (objectSelection_ != null && objectSelection_.size() == 1)
+    {
+      Object obj = objectSelection_.getFirstElement();
+      if (obj instanceof String) {
+        String str = transformer_.toPath((String) obj);
+        if (hasProtocol(str)) return null;
+        return ResourceUtils.getProjectOf(new Path(str));
+      }
+    }
+    return null;	  
+  }
+  
   private IProject getProjectFromObjectSelection(IStructuredSelection selection)
   {
     if (selection != null && selection.size() == 1)
@@ -193,9 +235,11 @@
       {
         try
         { 
-          IResource resource = ResourceUtils.getResourceFromSelection(obj);
+          IResource resource = findResourceFromSelection(obj);
           if (resource==null) 
             return null;
+          if (resource instanceof IProject)
+        	return (IProject) resource;
           IProject p = ResourceUtils.getProjectOf(resource.getFullPath());
           return p;
         } catch(CoreException e)
@@ -208,6 +252,20 @@
     return null;
   }
   
+  private String getComponentNameFromTransformedSelection() {
+    if (objectSelection_ != null && objectSelection_.size() == 1)
+    {
+      Object obj = objectSelection_.getFirstElement();
+      if (obj instanceof String) { 
+        String str = transformer_.toPath((String) obj);
+        if (hasProtocol(str)) return null;
+        IVirtualComponent comp = ResourceUtils.getComponentOf(new Path(str));
+        return comp == null ? null : comp.getName();
+      }
+    }
+    return null;	  
+  }
+  
   private String getComponentNameFromObjectSelection(IStructuredSelection selection)
   {
     if (selection != null && selection.size() == 1)
@@ -217,7 +275,7 @@
       {
         try
         { 
-          IResource resource = ResourceUtils.getResourceFromSelection(obj);
+          IResource resource = findResourceFromSelection(obj);
           if (resource==null) 
             return null;
      
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java
index 9732f9d..3285958 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java
@@ -12,6 +12,7 @@
  * 20060224   129387 pmoogk@ca.ibm.com - Peter Moogk
  * 20060410   135441 joan@ca.ibm.com - Joan Haggarty
  * 20060825   155114 pmoogk@ca.ibm.com - Peter Moogk
+ * 20061220   161232 makandre@ca.ibm.com - Andrew Mak, AbstractObjectSelectionWidget.setInitialSelection(IStructuredSelection initialSelection) called twice each time Browse pressed
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
@@ -42,7 +43,6 @@
   private Composite parent;
   private Listener statusListener;
   private Composite composite;
-  private IStructuredSelection initialSelection;
   private IProject project;
   private String componentName;
   private IObjectSelectionWidget child;
@@ -108,7 +108,6 @@
           composite.setLayout(gl);
           composite.setLayoutData(gd);
           child.addControls(composite, statusListener);
-          child.setInitialSelection(initialSelection);                  
 
           Point origSize = shell.getSize();
           Point compSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
@@ -146,7 +145,6 @@
 
   public void setInitialSelection(IStructuredSelection initialSelection)
   {
-    this.initialSelection = initialSelection;
     project = getProjectFromInitialSelection(initialSelection);
     componentName = getComponentNameFromInitialSelection(initialSelection);
     if (child != null)
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionTransformer.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionTransformer.java
index 2e2a809..2630fdc 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionTransformer.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionTransformer.java
@@ -1,21 +1,33 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070116   159618 makandre@ca.ibm.com - Andrew Mak, Project and EAR not defaulted properly when wizard launched from JSR-109 Web services branch in J2EE Project Explorer
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
 import java.net.MalformedURLException;
+
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.j2ee.webservice.wsclient.internal.impl.ServiceRefImpl;
+import org.eclipse.jst.j2ee.webservice.wsdd.BeanLink;
+import org.eclipse.jst.j2ee.webservice.wsdd.ServiceImplBean;
+import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription;
 import org.eclipse.jst.ws.internal.common.J2EEActionAdapterFactory;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.wst.command.internal.env.core.data.Transformer;
 import org.eclipse.wst.wsdl.internal.impl.ServiceImpl;
 import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
@@ -49,7 +61,51 @@
       {
         return new StructuredSelection(J2EEActionAdapterFactory.getWSDLURI((WSDLResourceImpl)sel));
       }
+      /*
+       * TODO - Remove the cases below after bug 170834 is fixed
+       * 
+       * WSDLSelectionTransformer should not need to handle ServiceImplBean and BeanLink which
+       * represent service classes.  These catches are here for now since we incorrectly allow
+       * the wizard to default to top-down sceanrio when launch from these objects in the JSR-109
+       * branch. 
+       */
+      else if (sel instanceof ServiceImplBean)
+      {
+        return new StructuredSelection(getWSDLURI((ServiceImplBean) sel));
+      }
+      else if (sel instanceof BeanLink)
+      {
+        return new StructuredSelection(getWSDLURI((BeanLink) sel));
+      }
     }
     return value;
   }
+  
+  private String getWSDLURI(ServiceImplBean bean) {
+	  EObject eObject = bean.eContainer();
+	  if (eObject == null)
+		  return "";
+          
+	  eObject = eObject.eContainer();
+      
+	  if (eObject instanceof WebServiceDescription) {
+		  WebServiceDescription wsd = (WebServiceDescription) eObject;
+		  IProject project = ProjectUtilities.getProject(wsd);    	  
+    	  
+		  // getWebContentPath returns the "WebContent" folder path for Web projects
+		  // for EJB projects, it returns the "ebjModule" folder path
+		  IPath path = J2EEUtils.getWebContentPath(project);    	 
+		  path = path.append(wsd.getWsdlFile()); 
+    	  
+		  return path.toString();    	    
+	  }
+	  return "";
+  }
+  
+  private String getWSDLURI(BeanLink link) {
+	  EObject eObject = link.eContainer();
+	  if (eObject instanceof ServiceImplBean)
+		  return getWSDLURI((ServiceImplBean) eObject);
+	  return "";
+  }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java
index 393cb6c..1cde516 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java
@@ -20,6 +20,8 @@
  * 20060803   152701 cbrealey@ca.ibm.com - Chris Brealey
  * 20060803   152486 makandre@ca.ibm.com - Andrew Mak, Typing WSDL in Service definition field is very slow
  * 20060825   135570 makandre@ca.ibm.com - Andrew Mak, Service implementation URL not displayed properly on first page
+ * 20060831   155883 makandre@ca.ibm.com - Andrew Mak, service impl field doesn't work after switching from BU to TD
+ * 20061211   161589 makandre@ca.ibm.com - Andrew Mak, NPE in service generation after opening and cancelling from browse dialog
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
@@ -554,7 +556,7 @@
   public IStructuredSelection getObjectSelection()
   {
 	  StructuredSelection ss; 
-	  if (tree != null)
+	  if (tree != null && tree.getWsdlURI() != null)
 		  ss = new StructuredSelection(tree.getWsdlURI());
 	  else
 		  ss = new StructuredSelection(wsdlURI_);
@@ -703,8 +705,6 @@
 		
 	    // prime widget based on the string
 	    wsdlURI_ = wsURI;
-	    if (tree != null)
-	      tree.setWebServiceURI(wsURI);
 	    
 	    WebServiceEntity entity = webServicesParser.getWebServiceEntityByURI(wsURI);
 	    if (entity != null && entity.getType() == WebServiceEntity.TYPE_WSDL)
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java
index 4391746..7c62335 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java
@@ -21,6 +21,8 @@
  * 20060427   138058 joan@ca.ibm.com - Joan Haggarty
  * 20060523   133714 joan@ca.ibm.com - Joan Haggarty
  * 20060525   143843 joan@ca.ibm.com - Joan Haggarty
+ * 20060905   156230 kathy@ca.ibm.com - Kathy Chan, Handling projects with no target runtime
+ * 20070119   159458 mahutch@ca.ibm.com - Mark Hutchinson
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime;
 
@@ -69,6 +71,7 @@
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.ServerCore;
@@ -340,6 +343,9 @@
             clientNeedEAR_ = false;
           }
         }
+      } else {  // serverId == null, assume that it does not need EAR
+    	  clientNeedEAR_ = false;
+    	  
       }
     }
     
@@ -651,12 +657,13 @@
 	    if (fRuntime != null)
 	    {
 	      //Get a server type that has the same runtime type.
-	      IRuntime sRuntime = FacetUtil.getRuntime(fRuntime);      
+	      IRuntime sRuntime = FacetUtil.getRuntime(fRuntime); 
+	      IRuntimeType sRuntimeType = sRuntime.getRuntimeType();
 	      IServerType firstMatchingServerType = null;
 	      for (int i=0; i<serverTypes.length; i++)
 	      {
 	        IServerType thisServerType = serverTypes[i];
-	        if (thisServerType.getRuntimeType().getId().equals(sRuntime.getRuntimeType().getId()))
+	        if (sRuntimeType != null && thisServerType.getRuntimeType().getId().equals(sRuntimeType.getId()))
 	        {
 	          if (firstMatchingServerType == null)
 	          {
@@ -689,7 +696,7 @@
 	        {
 	          Set facetsClone = new HashSet();
 	          facetsClone.addAll(facets);          
-	          if (facetMatcher.getFacetsToAdd() != null)
+	          if (facetMatcher != null && facetMatcher.getFacetsToAdd() != null)
 	          {
 	            Iterator itr = facetMatcher.getFacetsToAdd().iterator();
 	            while (itr.hasNext())
@@ -728,7 +735,8 @@
 	        {
 	          org.eclipse.wst.common.project.facet.core.runtime.IRuntime fRuntime = (org.eclipse.wst.common.project.facet.core.runtime.IRuntime)runtimesItr.next();
 	          IRuntime sRuntime = FacetUtil.getRuntime(fRuntime);
-	          if (thisServerType.getRuntimeType().getId().equals(sRuntime.getRuntimeType().getId()))
+	          IRuntimeType sRuntimeType = sRuntime.getRuntimeType();
+	          if (sRuntimeType != null && thisServerType.getRuntimeType().getId().equals(sRuntimeType.getId()))
 	          {
 	            serverType = thisServerType;
 	          }          
@@ -744,10 +752,11 @@
 	        org.eclipse.wst.common.project.facet.core.runtime.IRuntime fRuntime = (org.eclipse.wst.common.project.facet.core.runtime.IRuntime) itr
 	            .next();
 	        IRuntime sRuntime = FacetUtil.getRuntime(fRuntime);
+	        IRuntimeType sRuntimeType = sRuntime.getRuntimeType();
 	        for (int i = 0; i < serverTypes.length; i++)
 	        {
 	          IServerType thisServerType = serverTypes[i];
-	          if (thisServerType.getRuntimeType().getId().equals(sRuntime.getRuntimeType().getId()))
+	          if (sRuntimeType != null && thisServerType.getRuntimeType().getId().equals(sRuntimeType.getId()))
 	          {
 	            serverType = thisServerType;
 	            break outer;
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java
index de4565f..dac452a 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java
@@ -17,6 +17,7 @@
  * 20060427   138058 joan@ca.ibm.com - Joan Haggarty
  * 20060510   140868 sengpl@ca.ibm.com - Seng Phung-Lu
  * 20060524   141024 joan@ca.ibm.com - Joan Haggarty
+ * 20060829   145449 makandre@ca.ibm.com - Andrew Mak, Web service client project type dropdown disabled after selecting client project
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime;
 
@@ -331,7 +332,7 @@
       if (project.exists())
       {
         projectType_.setEnabled(false);
-        projectType_.setText("");        
+        projectType_.deselectAll();        
       }
       else
       {
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/CopyWebServiceUtilsJarCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/CopyWebServiceUtilsJarCommand.java
index bb5e85a..b87d272 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/CopyWebServiceUtilsJarCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/CopyWebServiceUtilsJarCommand.java
@@ -1,18 +1,26 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060912   157039 makandre@ca.ibm.com - Andrew Mak, new webserviceutils.jar not copied in client generation
+ * 20061025   161250 makandre@ca.ibm.com - Andrew Mak, Installations or workspace paths with spaces break Sample Gen and Java Editor Launch
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.test;
 
+import java.io.File;
+import java.net.URL;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -32,6 +40,7 @@
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.environment.IStatusHandler;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.ws.internal.common.BundleUtils;
 
 
 public class CopyWebServiceUtilsJarCommand extends AbstractDataModelOperation 
@@ -100,10 +109,15 @@
        context.setCreateFoldersEnabled(true);
        context.setCheckoutFilesEnabled(true);
        IResource resource = FileResourceUtils.findResource(target);
-       if(resource != null) return Status.OK_STATUS;
+       URL sourceURL = BundleUtils.getURLFromBundle( WebServiceConsumptionPlugin.ID, source );       
+       if(resource != null) {    	      	   
+    	   File sourceFile = new File(FileLocator.toFileURL(sourceURL).getPath());   
+    	   if (resource.getLocation().toFile().length() == sourceFile.length())
+    		   return Status.OK_STATUS;
+       }
        FileResourceUtils.createFile(context, 
                       							target,
-                                    plugin.openStream(new Path(source)),
+                                    sourceURL.openStream(),
                                     monitor,
                                     env.getStatusHandler());
     }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/TestDefaultingFragment.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/TestDefaultingFragment.java
index fcc0eda..a246e7c 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/TestDefaultingFragment.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/TestDefaultingFragment.java
@@ -11,6 +11,7 @@
  * -------- -------- -----------------------------------------------------------
  * 20060727   144354 kathy@ca.ibm.com - Kathy Chan
  * 20060821   153833 makandre@ca.ibm.com - Andrew Mak, Allow the Web Service Test extension point to specify the supported client runtime
+ * 20060907   156606 makandre@ca.ibm.com - Andrew Mak, no sample JSP in the pop-up action of Generate Sample JSPs
  *******************************************************************************/
 /*
  * Created on May 4, 2004
@@ -90,7 +91,7 @@
     	  (WebServiceTestExtension) WebServiceTestRegistry.getInstance()
     	  .getWebServiceExtensionsByName(testTypes[i]);
 		  
-      if (!extension.supportsRuntime(clientRuntimeId_))
+      if (clientRuntimeId_ != null && !extension.supportsRuntime(clientRuntimeId_))
     	  continue;
     	
 	  if(testTypes[i].equals(launchedServiceTestName))
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/WebServiceClientTestArrivalCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/WebServiceClientTestArrivalCommand.java
index 4df5f50..9cd6558 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/WebServiceClientTestArrivalCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/test/WebServiceClientTestArrivalCommand.java
@@ -4,13 +4,15 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060608   144500 mahutch@ca.ibm.com - Mark Hutchinson
  * 20060818   153903 makandre@ca.ibm.com - Andrew Mak, Browse does not work in generate client test page
+ * 20060906   154548 gilberta@ca.ibm.com - Gilbert Andrews, This fixes name collisions when creating a sample project
+ * 20060922   158177 makandre@ca.ibm.com - Andrew Mak, NPE when creating web service client into existing Java project with test
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.test;
 
@@ -27,6 +29,7 @@
 import org.eclipse.jem.java.JavaHelpers;
 import org.eclipse.jem.java.Method;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.consumption.command.common.JavaMofReflectionCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages;
@@ -80,13 +83,16 @@
 	IStatus status = Status.OK_STATUS;
   	
 	sampleProjectAndEarSetup(env);
-	IPath webcontentPath = J2EEUtils.getWebContentPath(clientIProject);
+	IPath webcontentPath = null;
+
+	// *need* to double-check that clientIProject is a web project
+	if (J2EEUtils.isWebComponent(clientIProject))
+		webcontentPath = J2EEUtils.getWebContentPath(clientIProject);
 	
     //Get the sample Folder ready
     StringBuffer sb = new StringBuffer();
-
-    // *need* to double-check that clientIProject is a web project
-    if (webcontentPath != null && J2EEUtils.isWebComponent(clientIProject))
+    
+    if (webcontentPath != null)
     {	
     	String path = webcontentPath.toString();
     	sb.append(path).append("/");
@@ -177,9 +183,30 @@
 	  sampleC = clientC + DEFAULT_SAMPLE_WEB_PROJECT_EXT;
 	  sampleProject = sampleP + "/" + sampleC;
 	  
+	  String sampleTemp = sampleP;
 	  
-	}  
-	sampleProjectEAR = clientProjectEAR;
+	  boolean nameFound = false;
+	  int i = 1;
+	  while(!nameFound){
+		  IProject sampleIProject = (IProject)ProjectUtilities.getProject(sampleTemp);
+		  if(sampleIProject.exists() && !J2EEProjectUtilities.isDynamicWebProject(sampleIProject)){
+			  sampleTemp = sampleP + Integer.toString(i);
+			  sampleProject = sampleTemp + "/" + sampleC;
+		      
+		  }
+		  else
+			  nameFound = true; 
+		  
+		  i++;
+	  }
+	  sampleP = sampleTemp;
+    
+  	}  
+	
+  	
+  	
+  	
+  	sampleProjectEAR = clientProjectEAR;
 	if (sampleProjectEAR == null || sampleProjectEAR.length()==0){
 	  sampleProjectEAR = sampleP + DEFAULT_SAMPLE_EAR_PROJECT_EXT + "/" + sampleC + DEFAULT_SAMPLE_EAR_PROJECT_EXT;	
 	}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java
index 93e66e4..c0047b1 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java
@@ -14,6 +14,7 @@
  * 20060227   124392 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060324   116750 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060427   126780 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20070119   159458 mahutch@ca.ibm.com - Mark Hutchinson
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
@@ -41,6 +42,7 @@
 import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.ServerCore;
@@ -258,11 +260,15 @@
       for (int i=0; i<serverTypeIds.length; i++)
       {
         IServerType serverType = ServerCore.findServerType(serverTypeIds[i]);
-        String runtimeTypeId = serverType.getRuntimeType().getId();
-        if (runtimeTypeId.equals(sRuntime.getRuntimeType().getId()))
+        IRuntimeType runtimeType = serverType.getRuntimeType();
+        if (runtimeType != null)
         {
-          supportedServerFactoryIds.add(serverTypeIds[i]);          
-        }        
+	        String runtimeTypeId = runtimeType.getId();
+	        if (sRuntime != null && sRuntime.getRuntimeType() != null && runtimeTypeId.equals(sRuntime.getRuntimeType().getId()))
+	        {
+	          supportedServerFactoryIds.add(serverTypeIds[i]);          
+	        }      
+        }
       }
     }
     
@@ -1646,16 +1652,25 @@
       IServerType st = sts[i];
       for (int j=0; j<rts.length; j++)
       {
+    	if (st == null || st.getRuntimeType() == null) break;    	  
         org.eclipse.wst.server.core.IRuntime rt = rts[j];
         // If the server type has the same runtime type as this runtime, add it to the list
         String serverTypeRuntimeTypeId = st.getRuntimeType().getId();
-        String runtimeRuntimeTypeId = rt.getRuntimeType().getId();
-        if (serverTypeRuntimeTypeId.equals(runtimeRuntimeTypeId))
+        
+        if (rt != null)
         {
-          if (!fids.contains(st.getId()))
-          {
-            fids.add(st.getId());
-          }
+        	IRuntimeType rtType = rt.getRuntimeType();
+        	if (rtType != null)
+        	{
+		        String runtimeRuntimeTypeId = rtType.getId();
+		        if (serverTypeRuntimeTypeId.equals(runtimeRuntimeTypeId))
+		        {
+		          if (!fids.contains(st.getId()))
+		          {
+		            fids.add(st.getId());
+		          }
+		        }
+        	}
         }
       }
     }
diff --git a/bundles/org.eclipse.jst.ws.consumption/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.consumption/META-INF/MANIFEST.MF
index f536f32..51c11da 100644
--- a/bundles/org.eclipse.jst.ws.consumption/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.consumption/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws.consumption; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.103.qualifier
 Bundle-ClassPath: wsc.jar,
  webserviceutils.jar
 Bundle-Activator: org.eclipse.jst.ws.internal.consumption.plugin.WebServiceConsumptionPlugin
@@ -52,7 +52,6 @@
  org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
  org.wsdl4j;bundle-version="[1.4.0,1.5.0)",
  org.eclipse.jem.util;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.common.environment;bundle-version="[1.0.100,1.1.0)",
  org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.server.core;bundle-version="[1.0.102,1.1.0)",
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/AddModuleToServerCommand.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/AddModuleToServerCommand.java
index d25b4ec..79657e3 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/AddModuleToServerCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/AddModuleToServerCommand.java
@@ -1,21 +1,27 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060921 [158210] kathy@ca.ibm.com - Kathy Chan, Calling incremental build on the project before adding to server
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.command.common;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
@@ -64,7 +70,30 @@
 	    IProject iproject = ProjectUtilities.getProject(project);
 	    if (!J2EEUtils.isJavaComponent(iproject))
 	    {      
-	      IModule imodule = ServerUtils.getModule(iproject);
+	    	IModule imodule = ServerUtils.getModule(iproject);
+	    	// TODO:  This workaround for 156768 should be removed once the defect is fixed
+	    	if (imodule == null) {
+	    	    // calling incremental build on the project before trying again
+	    		iproject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD,null);
+	    		// wait for the incremental build to complete before trying again
+	    		try 
+	    		{
+	    			Platform.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
+	    		} 
+	    		catch( InterruptedException exc ) 
+	    		{
+	    			// Assuming that the autobuilder has actually completed.	
+	    		}
+	    		imodule = ServerUtils.getModule(iproject);
+	    		if (imodule == null) {  
+	    			// return error if module is still null after 1 retry
+	    			status = StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_ADD_MODULE, new String[]{module}) );
+	    			env.getStatusHandler().reportError(status);
+	    			return status;
+	    		}
+	    	}
+	    	// end of workaround for 156768
+	    	
 	      if (!ServerUtil.containsModule(server, imodule, null))
 	      {
 	        IModule[] imodules = new IModule[]{imodule};
@@ -75,7 +104,7 @@
 	    }
 	    } catch (CoreException e)
 	    {
-	      status = StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_ADD_MODULE, new String[]{module}) );
+	      status = StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_ADD_MODULE, new String[]{module}), e);
 	      env.getStatusHandler().reportError(status);
 	      return status;      
 	    } finally
@@ -88,7 +117,7 @@
 	        }
 	      } catch (CoreException ce)
 	      {
-	        status = StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_ADD_MODULE, new String[] { module }) );
+	        status = StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_ADD_MODULE, new String[] { module }), ce);
 	        env.getStatusHandler().reportError(status);
 	        return status;
 	      }      
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLCommand.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLCommand.java
index c50a2a4..9834948 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLCommand.java
@@ -1,21 +1,22 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20061213   165723 kathy@ca.ibm.com - Kathy Chan
+ * 20061213   165725 kathy@ca.ibm.com - Kathy Chan
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.command.common;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -37,18 +38,20 @@
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.consumption.ConsumptionMessages;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.environment.uri.URIException;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
-import org.eclipse.wst.common.uriresolver.internal.util.URIEncoder;
 import org.eclipse.wst.ws.internal.parser.discovery.NetUtils;
 import org.eclipse.wst.ws.internal.parser.wsil.WWWAuthenticationException;
 import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
@@ -78,24 +81,39 @@
   public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
   {
     IEnvironment env = getEnvironment();
-    
+    CopyWSDLRunnable copyWSDLRunnable = new CopyWSDLRunnable(env);
     try
     {
-      ignoreList = new Vector();
-      if (def == null)
-        def = webServicesParser.getWSDLDefinition(wsdlURI);
-      copyWSDL(env, wsdlURI, getBaseURI(destinationURI), getLocalname(destinationURI), def);
+      ResourceUtils.getWorkspace().run(copyWSDLRunnable, null);
       return Status.OK_STATUS;
     }
-    catch (Throwable t)
+    catch (CoreException ce)
     {
-      t.printStackTrace();
-      IStatus status = StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_COPY_WSDL, new String[]{wsdlURI, destinationURI}), t);
-      env.getStatusHandler().reportError(status);
+        IStatus status = ce.getStatus();
+		env.getStatusHandler().reportError(status);
       return status;
     }
   }
 
+   
+  private class CopyWSDLRunnable implements IWorkspaceRunnable {
+  	
+  	private IEnvironment environment = null;
+  	
+  	protected CopyWSDLRunnable(IEnvironment env){
+  		environment = env;
+  	}
+  	public void run(IProgressMonitor pm) throws CoreException {
+  		ignoreList = new Vector();
+  		if (def == null)
+  			def = webServicesParser.getWSDLDefinition(wsdlURI);
+  		try {
+  			copyWSDL(environment, wsdlURI, getBaseURI(destinationURI), getLocalname(destinationURI), def);
+  		} catch (Throwable e) {
+  			throw new CoreException(StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_COPY_WSDL, new String[]{wsdlURI, destinationURI}), e));
+  		}
+  	}
+  }
   private void copyWSDL(IEnvironment env, String uri, String destURI, String destLocalname) throws WSDLException, IOException, WWWAuthenticationException, TransformerException, TransformerConfigurationException, URIException
   {
   	Definition definition;
@@ -110,10 +128,11 @@
 
   private void copyWSDL(IEnvironment env, String uri, String destURI, String destLocalname, Definition definition) throws WSDLException, IOException, WWWAuthenticationException, TransformerException, TransformerConfigurationException, URIException
   {
+	uri = normalize(uri);
 	if (!needToCopy(uri)) {
 	   	return;
 	}
-    
+	destURI = normalize(destURI);
     String baseURI = getBaseURI(uri);
     if (destLocalname == null || destLocalname.length() <= 0)
       destLocalname = getLocalname(uri);
@@ -228,10 +247,11 @@
 
   private void copyXMLSchema(IEnvironment env, String uri, String destURI) throws TransformerException, TransformerConfigurationException, IOException, URIException
   {
+	  uri = normalize(uri);
 	  if (!needToCopy(uri)) {
 	    	return;
 	    }
-	
+	  destURI = normalize(destURI);
     // load as a cached schema
     XSDSchema xsdSchema = XSDSchemaImpl.getSchemaForSchema(uri);
     // if schema is not cached, parse it
@@ -289,26 +309,35 @@
     }
   }
 
-  private boolean needToCopy (String uri) {
-	  String normalizedURI = normalize(uri);	
+  private boolean needToCopy (String normalizedURI) {	
 	  if (ignoreList.contains(normalizedURI))
 		  return false;
 	  ignoreList.add(normalizedURI);
 	  return true;
   }
   
+//normalize the uri to remove relative addressing "/.."
   private String normalize(String uri )
   {
-	  try {
-		  String encodedURI = URIEncoder.encode(uri,"UTF-8");
-		  URI normalizedURI = new URI(encodedURI);
-		  normalizedURI = normalizedURI.normalize();
-		  return normalizedURI.toString();
-	  } catch (URISyntaxException e) {
-		  return uri;
-	  } catch (UnsupportedEncodingException e) {
-		  return uri;
-	  }
+  	boolean normalized = false;
+  	while(!normalized){
+  	  int dir = uri.indexOf("/..");
+  	  if(dir == -1)
+  	  	normalized = true;
+  	  else{
+  	  	String first = uri.substring(0,dir);
+  	    String second = uri.substring(dir + 3);
+  	    int newIndex = first.lastIndexOf("/");
+  	    if(newIndex == -1){
+  	    	normalized = true;
+  	    } else {
+  	    	first = first.substring(0,newIndex);
+  	    	uri = first + second;
+  	    }
+  	  }
+  	}
+  	return uri;
+  
   }
 	  
   public void setWsdlURI(String wsdlURI)
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLTreeCommand.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLTreeCommand.java
new file mode 100644
index 0000000..03b9479
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CopyWSDLTreeCommand.java
@@ -0,0 +1,467 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070112   165721 makandre@ca.ibm.com - Andrew Mak, WSDL import cannot use relative import with to parent directories
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.command.common;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Import;
+import javax.wsdl.Types;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.UnknownExtensibilityElement;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLWriter;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.consumption.ConsumptionMessages;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
+import org.eclipse.wst.common.environment.IEnvironment;
+import org.eclipse.wst.common.environment.uri.URIException;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.ws.internal.parser.discovery.NetUtils;
+import org.eclipse.wst.ws.internal.parser.wsil.WWWAuthenticationException;
+import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
+import org.eclipse.wst.wsdl.internal.impl.XSDSchemaExtensibilityElementImpl;
+import org.eclipse.wst.wsdl.internal.impl.wsdl4j.WSDLFactoryImpl;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSchemaDirective;
+import org.eclipse.xsd.impl.XSDSchemaImpl;
+import org.eclipse.xsd.util.XSDParser;
+import org.w3c.dom.Element;
+
+public class CopyWSDLTreeCommand extends AbstractDataModelOperation
+{
+  private String wsdlURI;
+  private WebServicesParser webServicesParser;
+  private String destinationURI;
+  private Definition def;
+  private Vector ignoreList;
+
+  private IPath pathPrefix;  
+  private String wsdlRelPath;
+  private Vector xmlObjectInfos;
+  
+  public CopyWSDLTreeCommand()
+  {
+  }
+
+  /**
+   * Execute the command
+   */
+  public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
+  {
+    IEnvironment env = getEnvironment();
+    CopyWSDLRunnable copyWSDLRunnable = new CopyWSDLRunnable(env);
+    try
+    {
+      ResourceUtils.getWorkspace().run(copyWSDLRunnable, null);
+      return Status.OK_STATUS;
+    }
+    catch (CoreException ce)
+    {
+        IStatus status = ce.getStatus();
+		env.getStatusHandler().reportError(status);
+      return status;
+    }
+  }
+
+   
+  private class CopyWSDLRunnable implements IWorkspaceRunnable {
+  	
+  	private IEnvironment environment = null;
+  	
+  	protected CopyWSDLRunnable(IEnvironment env){
+  		environment = env;
+  	}
+  	public void run(IProgressMonitor pm) throws CoreException {
+  		ignoreList = new Vector();
+  		xmlObjectInfos = new Vector();
+  		if (def == null)
+  			def = webServicesParser.getWSDLDefinition(wsdlURI);
+  		try {
+  			String baseDestinationURI = getBaseURI(destinationURI);
+  			
+  			// copy will record what files needs to be copy, but does not write the files yet
+  			copyWSDL(environment, wsdlURI, baseDestinationURI, getLocalname(destinationURI), def);
+  			
+  			// begin write
+  			
+  			Iterator iter = xmlObjectInfos.iterator();  			  			
+  			
+  			while (iter.hasNext()) {
+  				XMLObjectInfo info = (XMLObjectInfo) iter.next();  				
+  				IPath relPath = info.path.removeFirstSegments(pathPrefix.segmentCount());
+  				  				  				
+  				if (info.content instanceof Definition) {
+  					Definition definition = (Definition) info.content;
+  					
+  					// if this is the starting wsdl, check if it's at the root directory
+  					if (definition == def)
+  						wsdlRelPath = relPath.toString();
+
+  					writeXMLObj(environment, baseDestinationURI, relPath.toString(), definition);
+  				}
+  				else
+  					writeXMLObj(environment, baseDestinationURI, relPath.toString(), (XSDSchema) info.content);
+  			}
+  			
+  		} catch (Throwable e) {
+  			throw new CoreException(StatusUtils.errorStatus( NLS.bind(ConsumptionMessages.MSG_ERROR_COPY_WSDL, new String[]{wsdlURI, destinationURI}), e));
+  		}
+  	}
+  }
+  /**
+   * Helper class holding information about the files we need to write
+   */
+  private class XMLObjectInfo {
+  	
+  	public IPath  path;  	
+  	public Object content;
+  	  	
+  	/**
+  	 * Constructor.
+  	 * 
+  	 * @param uri The URI of the source file
+  	 * @param content A representation of the source file
+  	 */
+  	public XMLObjectInfo(String uri, Object content) {
+  		
+  		int colon = uri.lastIndexOf(":"); 
+  		
+  		// don't need protocol or device info
+  		if (colon != -1)
+  			uri = uri.substring(colon + 1, uri.length());
+  		
+  		this.path    = new Path(uri);  		
+  		this.content = content;
+  	}
+  }
+  
+  /**
+   * Update the path prefix, which is the shortest parent path
+   * common to all files we need to write.
+   * 
+   * @param info Contains info on file to write.
+   */
+  private void updatePathPrefix(XMLObjectInfo info) {
+  	if (pathPrefix == null)
+        pathPrefix = info.path.removeLastSegments(1);
+    else {
+    	int matching = pathPrefix.matchingFirstSegments(info.path);
+    	
+    	if (matching < pathPrefix.segmentCount())
+    		pathPrefix = pathPrefix.uptoSegment(matching);
+    }
+  }    
+  
+  // write a wsdl file
+  private void writeXMLObj(IEnvironment env, String destURI, String destLocalname, Definition definition) 
+	throws WSDLException, IOException, URIException {
+	
+	StringBuffer destinationFileURI = new StringBuffer(addTrailingSeparator(destURI));
+    destinationFileURI.append(destLocalname);   
+  
+    WSDLFactory wsdlFactory = new WSDLFactoryImpl();
+    WSDLWriter wsdlWriter = wsdlFactory.newWSDLWriter();
+    OutputStream os = env.getURIFactory().newURI(destinationFileURI.toString()).getOutputStream();
+    wsdlWriter.writeWSDL(definition, os);
+    os.close();
+  }
+  
+  // write an xsd file
+  private void writeXMLObj(IEnvironment env, String destURI, String destLocalname, XSDSchema xsdSchema) 
+	throws TransformerConfigurationException, URIException, TransformerException, IOException {
+		
+	StringBuffer destinationFileURI = new StringBuffer(addTrailingSeparator(destURI));
+	destinationFileURI.append(destLocalname);
+		
+	Element e = xsdSchema.getElement();
+	DOMSource domSource = new DOMSource(e);
+	Transformer serializer = TransformerFactory.newInstance().newTransformer();
+	serializer.setOutputProperty(OutputKeys.INDENT, "yes");
+	serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+	serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+	OutputStream os = env.getURIFactory().newURI(destinationFileURI.toString()).getOutputStream();
+	serializer.transform(domSource, new StreamResult(os));
+	os.close();
+  }  
+  
+  private void copyWSDL(IEnvironment env, String uri, String destURI, String destLocalname) throws WSDLException, IOException, WWWAuthenticationException, TransformerException, TransformerConfigurationException, URIException
+  {
+  	Definition definition;
+	
+	try {
+		definition = webServicesParser.getWSDLDefinitionVerbose(uri);
+		copyWSDL(env, uri, destURI, destLocalname, definition);	
+	} catch (WSDLException e) {
+		copyXMLSchema(env, uri, destURI);
+	}
+  }
+
+  private void copyWSDL(IEnvironment env, String uri, String destURI, String destLocalname, Definition definition) throws WSDLException, IOException, WWWAuthenticationException, TransformerException, TransformerConfigurationException, URIException
+  {
+	uri = normalize(uri);
+	if (!needToCopy(uri)) {
+	   	return;
+	}
+	destURI = normalize(destURI);
+    String baseURI = getBaseURI(uri);
+    if (destLocalname == null || destLocalname.length() <= 0)
+      destLocalname = getLocalname(uri);
+    
+    // copy WSDL
+    
+    XMLObjectInfo info = new XMLObjectInfo(baseURI + destLocalname, definition);
+    updatePathPrefix(info);
+    xmlObjectInfos.add(info);
+
+    // copy <wsdl:import>s
+    Map imports = definition.getImports();
+    for (Iterator it = imports.values().iterator(); it.hasNext();)
+    {
+      List list = (List)it.next();
+      for (Iterator listIt = list.iterator(); listIt.hasNext();)
+      {
+        Import wsdlImport = (Import)listIt.next();
+        String wsdlImportURI = wsdlImport.getLocationURI();
+        if (isRelative(wsdlImportURI))
+        {
+          String importBaseURI = (new StringBuffer(baseURI)).append(wsdlImportURI).toString();
+          String wsdlImportBaseURI = getBaseURI(wsdlImportURI);
+          StringBuffer importDestURI = new StringBuffer(destURI);
+          if (wsdlImportBaseURI != null)
+            importDestURI.append(wsdlImportBaseURI);
+          copyWSDL(env, importBaseURI, importDestURI.toString(), getLocalname(wsdlImportURI));
+        }
+      }
+    }
+    Types types = definition.getTypes();
+    if (types != null)
+    {
+      List schemas = types.getExtensibilityElements();
+      for (Iterator it = schemas.iterator(); it.hasNext();)
+      {
+        ExtensibilityElement extElement = (ExtensibilityElement)it.next();
+        if (extElement instanceof UnknownExtensibilityElement)
+        {
+          UnknownExtensibilityElement schemaElement = (UnknownExtensibilityElement)extElement;
+          XSDSchema xsdSchema = null;
+          try
+          {
+            xsdSchema = XSDSchemaImpl.createSchema(schemaElement.getElement());
+          }
+          catch (Throwable t)
+          {
+            // ignore any extensibility elements that cannot be parsed into a
+            // XSDSchema instance
+          }
+          copyXMLSchema(env, xsdSchema, baseURI, destURI);
+        }
+        else if (extElement instanceof XSDSchemaExtensibilityElementImpl)
+        {
+          XSDSchemaExtensibilityElementImpl schemaElement = (XSDSchemaExtensibilityElementImpl)extElement;
+          XSDSchema xsdSchema = null;
+          try
+          {
+            xsdSchema = XSDSchemaImpl.createSchema(schemaElement.getElement());
+          }
+          catch (Throwable t)
+          {
+            // ignore any extensibility elements that cannot be parsed into a
+            // XSDSchema instance
+          }
+          copyXMLSchema(env, xsdSchema, baseURI, destURI);
+        }
+      }
+    }
+  }
+
+  private String getBaseURI(String uri)
+  {
+    int index = uri.lastIndexOf('/');
+    if (index == -1)
+      index = uri.lastIndexOf('\\');
+    if (index != -1)
+      return uri.substring(0, index + 1);
+    else
+      return null;
+  }
+
+  private String getLocalname(String uri)
+  {
+    int index = uri.lastIndexOf('/');
+    if (index == -1)
+      index = uri.lastIndexOf('\\');
+    if (index != -1)
+      return uri.substring(index + 1);
+    else
+      return uri;
+  }
+
+  private String addTrailingSeparator(String s)
+  {
+    if (!(s.endsWith("/") || s.endsWith("\\")))
+    {
+      StringBuffer sb = new StringBuffer(s);
+      sb.append('/');
+      return sb.toString();
+    }
+    else
+      return s;
+  }
+
+  private boolean isRelative(String uri)
+  {
+    return (uri.indexOf(':') == -1);
+  }
+
+  private void copyXMLSchema(IEnvironment env, String uri, String destURI) throws TransformerException, TransformerConfigurationException, IOException, URIException
+  {
+	  uri = normalize(uri);
+	  if (!needToCopy(uri)) {
+	    	return;
+	    }
+	  destURI = normalize(destURI);
+    // load as a cached schema
+    XSDSchema xsdSchema = XSDSchemaImpl.getSchemaForSchema(uri);
+    // if schema is not cached, parse it
+    if (xsdSchema == null)
+    {
+      XSDParser p = new XSDParser();
+      InputStream is = NetUtils.getURLInputStream(uri);
+      if (is != null)
+      {
+        p.parse(is);
+        xsdSchema = p.getSchema();
+      }
+    }
+    if (xsdSchema != null)
+    {
+      // copy schema
+        
+      XMLObjectInfo info = new XMLObjectInfo(uri, xsdSchema);
+      updatePathPrefix(info);
+      xmlObjectInfos.add(info);
+      
+      // copy <xsd:import>s and <xsd:include>s
+      copyXMLSchema(env, xsdSchema, getBaseURI(uri), destURI);
+    }
+  }
+
+  private void copyXMLSchema(IEnvironment env, XSDSchema xsdSchema, String baseURI, String destURI) throws TransformerException, TransformerConfigurationException, IOException, URIException
+  {
+    if (xsdSchema != null)
+    {
+      // copy <xsd:import>s and <xsd:include>s
+      EList xsdSchemaContents = xsdSchema.getContents();
+      for (Iterator it = xsdSchemaContents.iterator(); it.hasNext();)
+      {
+        Object content = it.next();
+        if (content instanceof XSDSchemaDirective)
+        {
+          XSDSchemaDirective xsdSchemaDirective = (XSDSchemaDirective)content;
+          String xsdSchemaDirectiveLocation = xsdSchemaDirective.getSchemaLocation();
+          if (xsdSchemaDirectiveLocation != null && isRelative(xsdSchemaDirectiveLocation))
+          {
+            String directiveURI = (new StringBuffer(baseURI)).append(xsdSchemaDirectiveLocation).toString();
+            String directiveBaseURI = getBaseURI(xsdSchemaDirectiveLocation);
+            StringBuffer directiveDestURI = new StringBuffer(destURI);
+            if (directiveBaseURI != null)
+              directiveDestURI.append(directiveBaseURI);
+            copyXMLSchema(env, directiveURI, directiveDestURI.toString());
+          }
+        }
+      }
+    }
+  }
+
+  private boolean needToCopy (String normalizedURI) {	
+	  if (ignoreList.contains(normalizedURI))
+		  return false;
+	  ignoreList.add(normalizedURI);
+	  return true;
+  }
+  
+//normalize the uri to remove relative addressing "/.."
+  private String normalize(String uri )
+  {
+  	boolean normalized = false;
+  	while(!normalized){
+  	  int dir = uri.indexOf("/..");
+  	  if(dir == -1)
+  	  	normalized = true;
+  	  else{
+  	  	String first = uri.substring(0,dir);
+  	    String second = uri.substring(dir + 3);
+  	    int newIndex = first.lastIndexOf("/");
+  	    if(newIndex == -1){
+  	    	normalized = true;
+  	    } else {
+  	    	first = first.substring(0,newIndex);
+  	    	uri = first + second;
+  	    }
+  	  }
+  	}
+  	return uri;
+  
+  }
+	  
+  public void setWsdlURI(String wsdlURI)
+  {
+    this.wsdlURI = wsdlURI;
+  }
+
+  public void setWebServicesParser(WebServicesParser webServicesParser)
+  {
+    this.webServicesParser = webServicesParser;
+  }
+
+  public void setDestinationURI(String destinationURI)
+  {
+    this.destinationURI = destinationURI;
+  }
+
+  public void setDefinition(Definition def)
+  {
+    this.def = def;
+  }
+  
+  public String getWSDLRelPath() {
+    return wsdlRelPath;
+  }
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CreateFacetedProjectCommand.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CreateFacetedProjectCommand.java
index 5e41b8f..72b5da7 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CreateFacetedProjectCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/command/common/CreateFacetedProjectCommand.java
@@ -15,6 +15,7 @@
  * 20060221 119111   rsinha@ca.ibm.com - Rupam Kuehner
  * 20060427 126780   rsinha@ca.ibm.com - Rupam Kuehner
  * 20060517 126965   kathy@ca.ibm.com - Kathy Chan
+ * 20060905   156230 kathy@ca.ibm.com - Kathy Chan, Handling projects with no target runtime
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.command.common;
@@ -136,41 +137,43 @@
         		return status;
         	}      
         }
-                
-        // add the default facets that's not in conflict with the existing facets
-        Set projectFacetVersionSet = fproject.getProjectFacets();
-        Set projectFacetSet = new HashSet();
-        // get the project facet from the project facet version we calculated
-        for (Iterator iter = projectFacetVersionSet.iterator(); iter.hasNext();) {
-        	IProjectFacetVersion pfv = (IProjectFacetVersion) iter.next();
-        	projectFacetSet.add(pfv.getProjectFacet());
+             
+        if (facetRuntime != null)
+        {
+        	// add the default facets that's not in conflict with the existing facets
+        	Set projectFacetVersionSet = fproject.getProjectFacets();
+        	Set projectFacetSet = new HashSet();
+        	// get the project facet from the project facet version we calculated
+        	for (Iterator iter = projectFacetVersionSet.iterator(); iter.hasNext();) {
+        		IProjectFacetVersion pfv = (IProjectFacetVersion) iter.next();
+        		projectFacetSet.add(pfv.getProjectFacet());
+        	}
+        	try {
+        		Set defaultProjectFacetVersionSet = facetRuntime.getDefaultFacets(projectFacetSet);
+        		// The returned defaultFacetSet contains the original projectFacetSet passed into getDefaultFacets
+        		// plus any default facets that are not in conflict with the original projectFacetSet.
+        		// Add to facetsToAdd if the the default facet is not in the original set.
+        		Set defaultFacetsToAdd = new HashSet();
+        		for (Iterator iter = defaultProjectFacetVersionSet.iterator(); iter.hasNext();) {
+        			IProjectFacetVersion defaultProjFacetVersion = (IProjectFacetVersion) iter.next();
+        			if( ! projectFacetSet.contains( defaultProjFacetVersion.getProjectFacet() ) )
+        			{
+        				defaultFacetsToAdd.add(defaultProjFacetVersion);
+        			}
+        		}
+        		if (!defaultFacetsToAdd.isEmpty()) {
+        			status = FacetUtils.addFacetsToProject(fproject, defaultFacetsToAdd);
+        			if (status.getSeverity() == IStatus.ERROR)
+        			{
+        				return status;
+        			}    
+        		}
+        	} catch (CoreException e) {
+        		// If there's any exception when trying to get the default facet, just ignore the default facet
+        		// and return the original facetsToAdd.
+        	}
+        	// end of adding default facets
         }
-        try {
-      	  Set defaultProjectFacetVersionSet = facetRuntime.getDefaultFacets(projectFacetSet);
-      	  // The returned defaultFacetSet contains the original projectFacetSet passed into getDefaultFacets
-      	  // plus any default facets that are not in conflict with the original projectFacetSet.
-      	  // Add to facetsToAdd if the the default facet is not in the original set.
-      	  Set defaultFacetsToAdd = new HashSet();
-      	  for (Iterator iter = defaultProjectFacetVersionSet.iterator(); iter.hasNext();) {
-      		  IProjectFacetVersion defaultProjFacetVersion = (IProjectFacetVersion) iter.next();
-      		  if( ! projectFacetSet.contains( defaultProjFacetVersion.getProjectFacet() ) )
-      		  {
-      			  defaultFacetsToAdd.add(defaultProjFacetVersion);
-      		  }
-      	  }
-      	  if (!defaultFacetsToAdd.isEmpty()) {
-      		  status = FacetUtils.addFacetsToProject(fproject, defaultFacetsToAdd);
-      		  if (status.getSeverity() == IStatus.ERROR)
-      		  {
-      			  return status;
-      		  }    
-      	  }
-        } catch (CoreException e) {
-      	  // If there's any exception when trying to get the default facet, just ignore the default facet
-      	  // and return the original facetsToAdd.
-        }
-        // end of adding default facets
- 
       } catch (CoreException ce)
       {
         return StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }));
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/common/FacetUtils.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/common/FacetUtils.java
index 2743dc4..9414654 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/common/FacetUtils.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/common/FacetUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,8 @@
  * 20060427   126780 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060503   126819 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060523   133714 joan@ca.ibm.com - Joan Haggarty
+ * 20060920   158061 kathy@ca.ibm.com - Kathy Chan, Do not add module to EAR when adding J2EE facets to project
+ * 20070124   162326 kathy@ca.ibm.com - Kathy Chan
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.common;
@@ -36,6 +38,14 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jst.j2ee.internal.ejb.project.operations.EjbFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.internal.ejb.project.operations.IEjbFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.AppClientFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.project.facet.IAppClientFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.IUtilityFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.UtilityFacetInstallDataModelProvider;
+import org.eclipse.jst.j2ee.web.project.facet.IWebFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.web.project.facet.WebFacetInstallDataModelProvider;
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.consumption.ConsumptionMessages;
@@ -44,6 +54,8 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
@@ -380,15 +392,50 @@
     
     while(facets.hasNext())
     {
-      IProjectFacetVersion fv = (IProjectFacetVersion)facets.next();
-      Action action = new Action(Type.INSTALL, fv, null);
-      actions.add(action);
+    	IProjectFacetVersion fv = (IProjectFacetVersion)facets.next();
+    	if (fv != null) {
+    		IProjectFacet pf = fv.getProjectFacet();
+    		Action action = new Action(Type.INSTALL, fv, getConfigObject(pf));
+    		actions.add(action);
+    	}
     }
     
     return actions;
   }
   
   /**
+   * Returns the data model config object for the given project facet
+   * For J2EE facets, set Add_TO_EAR properties of the data model to false, 
+   * for other facets, just return null
+   * @param facetID
+   * @return data model config object
+   */
+  public static Object getConfigObject(IProjectFacet projectFacet)
+  {
+	  
+	  IDataModel dm = null;
+	  if (projectFacet != null) {
+		  String facetId = projectFacet.getId();
+		  if (facetId != null) {
+			  // set Add to EAR to false
+			  if (facetId.equals(IModuleConstants.JST_WEB_MODULE)) { 
+				  dm = DataModelFactory.createDataModel(new WebFacetInstallDataModelProvider());
+				  dm.setBooleanProperty(IWebFacetInstallDataModelProperties.ADD_TO_EAR, false);
+			  } else if (facetId.equals(IModuleConstants.JST_EJB_MODULE)) {
+				  dm = DataModelFactory.createDataModel(new EjbFacetInstallDataModelProvider());
+				  dm.setBooleanProperty(IEjbFacetInstallDataModelProperties.ADD_TO_EAR, false);
+			  } else if (facetId.equals(IModuleConstants.JST_APPCLIENT_MODULE)) {
+				  dm = DataModelFactory.createDataModel(new AppClientFacetInstallDataModelProvider());
+				  dm.setBooleanProperty(IAppClientFacetInstallDataModelProperties.ADD_TO_EAR, false);
+			  } else if (facetId.equals(IModuleConstants.JST_UTILITY_MODULE)) {
+				  dm = DataModelFactory.createDataModel(new UtilityFacetInstallDataModelProvider());
+				  dm.setBooleanProperty(IUtilityFacetInstallDataModelProperties.ADD_TO_EAR, false);
+			  }
+		  }
+	  }
+	  return dm;
+  }
+  /**
    * Returns the {@link FacetMatcher} calculated when checking the required facet versions 
    * against the facet versions.
    * 
@@ -1017,7 +1064,7 @@
       jdkComplianceLevel = javaProject.getOption("org.eclipse.jdt.core.compiler.compliance", false);
       if (jdkComplianceLevel == null)
       {
-        jdkComplianceLevel = (String)JavaCore.getDefaultOptions().get("org.eclipse.jdt.core.compiler.compliance");
+        jdkComplianceLevel = JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE);
         if (jdkComplianceLevel == null)
         {
           jdkComplianceLevel = "1.4";
@@ -1335,5 +1382,5 @@
     
     return false;
   }
-  
+      
 }
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF
index 0b32569..5ddf1d2 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws.creation.ui; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.creation.ui.plugin.WebServiceCreationUIPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/ant/AntServiceRootCommandFragment.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/ant/AntServiceRootCommandFragment.java
index 476ac97..f35a509 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/ant/AntServiceRootCommandFragment.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/ant/AntServiceRootCommandFragment.java
@@ -14,10 +14,12 @@
  * 20060530   144350 kathy@ca.ibm.com - Kathy Chan
  * 20060823   154938 pmoogk@ca.ibm.com - Peter Moogk
  * 20060825   155114 pmoogk@ca.ibm.com - Peter Moogk
+ * 20061011   159283 makandre@ca.ibm.com - Andrew Mak, project not associated to EAR when using ant on command-line
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.creation.ui.ant;
 
 import org.eclipse.jst.ws.internal.consumption.ui.command.AntDefaultingOperation;
+import org.eclipse.jst.ws.internal.consumption.ui.command.AntRestoringCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.command.ListOptionsCommand;
 import org.eclipse.jst.ws.internal.consumption.ui.common.FinishFragment;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ScenarioCleanupCommand;
@@ -64,6 +66,7 @@
     add( new ServiceRootFragment() );
     add( new SimpleFragment( new ServerExtensionOutputCommand(), "" ));
     add(new FinishFragment());
+    add( new SimpleFragment( new AntRestoringCommand(), "" ));
     add( new SimpleFragment( new ScenarioCleanupCommand(), "" ));
   }
   
@@ -143,6 +146,8 @@
     // Map ServerExtensionOutputCommand for ServerStart()
     dataRegistry.addMapping(ServerExtensionDefaultingCommand.class, "ServerProjectEAR", ServerExtensionOutputCommand.class, "EarProjectName", null);
     
+    dataRegistry.addMapping(AntDefaultingOperation.class, "RendererValidation", AntRestoringCommand.class);
+    
   }
 
 }
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java
index 856e99c..3cebfaf 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
  * 20060221   119111 rsinha@ca.ibm.com - Rupam Kuehner
  * 20060516   126965 kathy@ca.ibm.com - Kathy Chan
  * 20060529   141422 kathy@ca.ibm.com - Kathy Chan
+ * 20070123   167487 makandre@ca.ibm.com - Andrew Mak
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.creation.ui.extension;
@@ -30,6 +31,7 @@
 import org.eclipse.wst.command.internal.env.core.context.ResourceContext;
 import org.eclipse.wst.common.environment.IEnvironment;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.ws.internal.common.HTTPUtility;
 import org.eclipse.wst.ws.internal.wsrt.IContext;
 import org.eclipse.wst.ws.internal.wsrt.ISelection;
 import org.eclipse.wst.ws.internal.wsrt.IWebService;
@@ -111,7 +113,10 @@
 		  {
 			  scenario = WebServiceScenario.TOPDOWN_LITERAL;
 			  String wsdlURL = (String)(selection_.getSelection())[0];
-			  wsInfo.setWsdlURL(wsdlURL);      
+			  
+			  // check for redirection in the wsdl
+			  HTTPUtility httpUtil = new HTTPUtility();
+			  wsInfo.setWsdlURL(httpUtil.handleRedirect(wsdlURL));      
 		  }
 
 		  context_     = new SimpleContext(develop_, assemble_, deploy_, install_, run_, client_, test_, publish_, 
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java
index 0ae3725..f0df662 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java
@@ -42,6 +42,10 @@
  * 20060825   135570 makandre@ca.ibm.com - Andrew Mak, Service implementation URL not displayed properly on first page
  * 20060829   155441 makandre@ca.ibm.com - Andrew Mak, web service wizard hangs during resize
  * 20060830   155114 pmoogk@ca.ibm.com - Peter Moogk, Updated patch for this defect.
+ * 20060831   155441 makandre@ca.ibm.com - Andrew Mak, Small tweak for this bug
+ * 20061003   159142 kathy@ca.ibm.com - Kathy Chan
+ * 20061212   164177 makandre@ca.ibm.com - Andrew Mak, Incorrect validation error complaining about runtime not supporting a project type
+ * 20061212   159911 makandre@ca.ibm.com - Andrew Mak, changing service definition resets some configuration fields
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.creation.ui.widgets;
 
@@ -197,6 +201,8 @@
 		
 	private UIUtils utils_ = new UIUtils("org.eclipse.jst.ws.creation.ui");
 	
+	private boolean forceRefreshRuntime = false;
+	
 	private String GRAPHIC_SERVICE_0="icons/service_test.jpg"; //$NON-NLS-N$
 	private String GRAPHIC_SERVICE_1="icons/service_run.jpg";  //$NON-NLS-N$
 	private String GRAPHIC_SERVICE_2="icons/service_install.jpg"; //$NON-NLS-N$
@@ -235,34 +241,38 @@
 	 */
 	public void run() {
 		
-		validationState_ = ValidationUtils.VALIDATE_ALL;
-		statusListener_.handleEvent(null);
-			
-		if (serviceImpl_.getText().trim().equals(""))
-			validObjectSelection_ = false;
+		// do minimal check here, this call will determine if we at least
+		// have a "validObjectSelection_"
+		checkServiceImplTextStatus();
 		
 		if (validObjectSelection_)
 		{
+			boolean refreshRuntime = (getWebServiceScenario() != WebServiceScenario.TOPDOWN); 
+			
 			if (objectSelectionWidget_ instanceof IObjectSelectionLaunchable)
 		       {
 				IObjectSelectionLaunchable launchable = (IObjectSelectionLaunchable)objectSelectionWidget_;
-				callObjectTransformation(launchable.getObjectSelection(), launchable.getProject(), launchable.getComponentName());								
+				callObjectTransformation(launchable.getObjectSelection(), launchable.getProject(), launchable.getComponentName(), refreshRuntime);								
 		       }
 			else 
 			{
 				IObjectSelectionWidget widget = (IObjectSelectionWidget)objectSelectionWidget_;
-				callObjectTransformation(widget.getObjectSelection(), widget.getProject(), widget.getComponentName());
+				callObjectTransformation(widget.getObjectSelection(), widget.getProject(), widget.getComponentName(), refreshRuntime);
 		    }	
 		}
 		else
 			setObjectSelection(null);
+		
+		// do full validation after all transformations and calculations have occurred
+		validationState_ = ValidationUtils.VALIDATE_ALL;
+		statusListener_.handleEvent(null);		
 	}
 	
 	/**
 	 * Pack this widget and the client-side widget as well. 
 	 */
 	private void packSelf() {
-		packIt();
+		// don't need to call packIt(), since clientWidget_ has a callback to packIt() already.
 		clientWidget_.packIt();
 	}
 	
@@ -308,13 +318,31 @@
 					// implementation/definition based on the web service type
 					handleTypeChange();					
 
+					// After bug 159911, we will not refresh the runtime in TOPDOWN scenario unless we absolutely
+					// have to.  Therefore, if we are switching from another scenario type, we should check if the 
+					// current selections are valid for this TOPDOWN scenario, if not, try to pick a more suitable 
+					// runtime.
+					if (currentScenario == WebServiceScenario.TOPDOWN) {
+						validationState_ = ValidationUtils.VALIDATE_SERVER_RUNTIME_CHANGES;
+						
+						// this will force a refresh the next time the wsdl is changed
+						forceRefreshRuntime = !checkErrorStatus().isOK();
+					}
+					
 					//if the web service type change is from one top-down type to another
 					//top-down type leave the object selection field in tact and refresh
 					//the server/runtime project defaulting.
 					//Otherwise clear the object selection field since it's value is not valid anymore
 					if (oldScenario==WebServiceScenario.TOPDOWN && currentScenario==WebServiceScenario.TOPDOWN)						
 					{
-						refreshServerRuntimeSelection();					
+						// if switching from one TOPDOWN scenario to another TOPDOWN scenario and
+						// we've determined that the current runtime selection is not suitable, we 
+						// can refresh the runtime now (don't need to wait for the next time the
+						// wsdl is changed).
+						if (forceRefreshRuntime) {
+							refreshServerRuntimeSelection();
+							forceRefreshRuntime = false;
+						}
 					}
 					else
 					{
@@ -1003,13 +1031,12 @@
 		if (objectSelectionWidget_ instanceof IObjectSelectionLaunchable) {		
 			IObjectSelectionLaunchable launchable = (IObjectSelectionLaunchable) objectSelectionWidget_;
 			launchable.setInitialSelection(objectSelection_);
-			
+			objectSelection_ = launchable.getObjectSelection();
 			displayable = launchable.getObjectSelectionDisplayableString();
 		}
 		else {
 			IObjectSelectionWidget selectionWidget = (IObjectSelectionWidget) objectSelectionWidget_;
 			selectionWidget.setInitialSelection(objectSelection_);
-		
 		    displayable = selectionWidget.getObjectSelectionDisplayableString();
 		}
 		
@@ -1254,7 +1281,7 @@
 		serviceProjectName_= name;
 		hLinkServiceProject_.setText(SERVICE_PROJECT_PREFIX + " " + serviceProjectName_);
 		hLinkServiceProject_.pack(true);
-		groupComposite_.pack(true);	
+		packSelf();	
 	  }
 	
 	 public void setServiceEarProjectName(String name)
@@ -1270,7 +1297,7 @@
 		  {			 
 			  hLinkServiceEAR_.setText(SERVICE_EAR_PREFIX + " " + serviceEarProjectName_);
 			  hLinkServiceEAR_.pack(true);
-			  groupComposite_.pack(true);
+			  packSelf();
 		  }
 	  }
 	 public void setServiceComponentType( String type )
@@ -1495,7 +1522,7 @@
 		
 	
 	private void callObjectTransformation(IStructuredSelection objectSelection,
-			IProject project, String componentName)
+			IProject project, String componentName, boolean refreshRuntime)
 	{
 		ObjectSelectionOutputCommand objOutputCommand = new ObjectSelectionOutputCommand();
 		   objOutputCommand.setTypeRuntimeServer(getServiceTypeRuntimeServer());
@@ -1508,7 +1535,11 @@
 	       setWebServicesParser(objOutputCommand.getWebServicesParser());
 	       setObjectSelection(objOutputCommand.getObjectSelection());
 	       setProject(objOutputCommand.getProject());      		       
-	       refreshServerRuntimeSelection();  
+	       
+	       if (refreshRuntime || forceRefreshRuntime)
+	    	   refreshServerRuntimeSelection();  
+	       
+	       forceRefreshRuntime = false;
 	}
 	
 	private class ScaleSelectionListener implements SelectionListener
@@ -1620,7 +1651,7 @@
 			   // call ObjectSelectionOutputCommand to carry out any transformation on the objectSelection
 			   if (result == Dialog.OK)
 			   {
-				   callObjectTransformation(objectSelection, project, componentName);				   
+				   callObjectTransformation(objectSelection, project, componentName, getWebServiceScenario() != WebServiceScenario.TOPDOWN);				   
 			       validationState_ = ValidationUtils.VALIDATE_ALL;
 			       statusListener_.handleEvent(null); // validate the page
 			   }			   
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java
index 350520f..89cecb4 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java
@@ -18,6 +18,7 @@
  * 20060427   138058 joan@ca.ibm.com - Joan Haggarty
  * 20060523   133714 joan@ca.ibm.com - Joan Haggarty
  * 20060525   143843 joan@ca.ibm.com - Joan Haggarty
+ * 20060905   156230 kathy@ca.ibm.com - Kathy Chan, Handling projects with no target runtime
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.creation.ui.widgets.runtime;
 
@@ -274,6 +275,8 @@
             serviceNeedEAR_ = false;
           }
         }
+      } else { // serverId == null, assume that it does not need EAR
+    	  serviceNeedEAR_ = false;
       }
     }
     
diff --git a/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
index 100dd18..9f7ebd1 100644
--- a/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.103.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.plugin.WebServicePlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java
index f7320da..e079b36 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java
@@ -11,6 +11,8 @@
  * -------- -------- -----------------------------------------------------------
  * 20060204  124408   rsinha@ca.ibm.com - Rupam Kuehner          
  * 20060330   124667 kathy@ca.ibm.com - Kathy Chan
+ * 20061004   159356 kathy@ca.ibm.com - Kathy Chan, Get correct module root URL based on server chosen
+ * 20070119   159458 mahutch@ca.ibm.com - Mark Hutchinson
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.common;
@@ -27,7 +29,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
@@ -407,67 +408,61 @@
   
 	/**
 	 * Returns the URL string corresponding to the web server module root of the
-	 * component in a server instance or null if the project has no Web nature
-	 * or has no association to a server instance.
+	 * component based on a server factory ID or null if the project has no Web nature
+	 * or the module root cannot be determined (e.g. For some types of 
+	 * servers, we would not be able to get module root URL if the server has not been started).
+	 * Note that we are not relying on which server the module is currently associated with to determine
+	 * the correct module server root because the project might be associated with a server but we need the
+	 * module root based on another server factory ID.
 	 * 
 	 * @param project
 	 *            The project.
-	 * @return The web server module root URL or null if the project has no Web
-	 *         nature or has no association to a server instance.
+	 * @param serverFactoryId server factory ID
+	 * @return The web server module root URL or null 
 	 */
 	public static String getWebComponentURL(IProject project, String serverFactoryId) {
 		String webProjectURL = null;
 		IModule module = getModule(project);
 		if (module != null) {
-			IServer serverInstance = getServerForModule(module);
-			if (serverInstance != null) {
-				IURLProvider urlProvider = (IURLProvider) serverInstance.loadAdapter(IURLProvider.class, null);
-				if (urlProvider!=null) {
-					URL url = urlProvider.getModuleRootURL(module);
-					if (url != null) {
-						String s = url.toString();
-						webProjectURL = (s.endsWith("/") ? s.substring(0, s.length() - 1) : s);
+			IServerType serverType = ServerCore.findServerType(serverFactoryId);               
+			if (serverType!=null)
+			{
+				try {
+					//Choose a Runtime which is not a stub
+					IRuntime nonStubRuntime = null;
+					IRuntime[] runtimes = ServerUtil.getRuntimes(null, null);
+					String serverRuntimeTypeId = serverType.getRuntimeType().getId();
+					for (int i = 0; i < runtimes.length; i++) {
+						IRuntime runtime = runtimes[i];
+						IRuntimeType runtimeType = runtime.getRuntimeType();
+						if (runtimeType != null)
+						{
+							String thisRuntimeTypeId = runtimeType.getId();
+							if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub()) {
+								//Found an appropriate IRuntime that is not a stub
+								nonStubRuntime = runtime;
+								break;
+							}
+						}
 					}
-				}
-			}
-			else {
-				//IRuntime projectTarget = ServerCore.getProjectProperties(project).getRuntimeTarget();
-                IServerType serverType = ServerCore.findServerType(serverFactoryId);               
-				if (serverType!=null)
-				{
-					try {
-                        //Choose a Runtime which is not a stub
-                        IRuntime nonStubRuntime = null;
-                        IRuntime[] runtimes = ServerUtil.getRuntimes(null, null);
-                        String serverRuntimeTypeId = serverType.getRuntimeType().getId();
-                        for (int i = 0; i < runtimes.length; i++) {
-                            IRuntime runtime = runtimes[i];
-                            String thisRuntimeTypeId = runtime.getRuntimeType().getId();
-                            if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub()) {
-                                //Found an appropriate IRuntime that is not a stub
-                                nonStubRuntime = runtime;
-                                break;
-                            }
-                        }
-                        
-                        if (nonStubRuntime != null)
-                        {
-					      IServerWorkingCopy serverWC = serverType.createServer(null, null, nonStubRuntime, null);
-						  IURLProvider urlProvider = (IURLProvider) serverWC.loadAdapter(IURLProvider.class, null);
-						  if (urlProvider!=null) {
-						     URL url = urlProvider.getModuleRootURL(module);							
-							 if (url != null) {
+
+					if (nonStubRuntime != null)
+					{
+						IServerWorkingCopy serverWC = serverType.createServer(null, null, nonStubRuntime, null);
+						IURLProvider urlProvider = (IURLProvider) serverWC.loadAdapter(IURLProvider.class, null);
+						if (urlProvider!=null) {
+							URL url = urlProvider.getModuleRootURL(module);							
+							if (url != null) {
 								String s = url.toString();
 								webProjectURL = (s.endsWith("/") ? s.substring(0, s.length() - 1) : s);
-							 }				
-						  }
-                        }
-
-					} catch(CoreException ce){
-                        Logger.getLogger().log(ce);
+							}				
+						}
 					}
-					
+
+				} catch(CoreException ce){
+					Logger.getLogger().log(ce);
 				}
+
 			}
 		}
 		return webProjectURL;
@@ -475,13 +470,18 @@
 
 	/**
 	 * Returns the URL string corresponding to the web server module root of the
-	 * project in a server instance or null if the project has no Web nature or
-	 * has no association to a server instance.
+	 * component based on a server factory ID and server.  Returns null if the project has no Web nature
+	 * or the module root cannot be determined (e.g. For some types of 
+	 * servers, we would not be able to get module root URL if the server has not been started).
+	 * Note that we are not relying on which server the module is currently associated with to determine
+	 * the correct module server root because the project might be associated with a server but we need the
+	 * module root based on another server / server factory ID.
 	 * 
 	 * @param project
 	 *            The project.
-	 * @return The web server module root URL or null if the project has no Web
-	 *         nature or has no association to a server instance.
+	 * @param serverFactoryId server factory ID
+	 * @param server Server id
+	 * @return The web server module root URL or null 
 	 */
 	public static String getWebComponentURL(IProject project,
 			String serverFactoryId, IServer server) {
@@ -489,9 +489,8 @@
 		String webProjectURL = null;
 		IModule module = getModule(project);
 		if (module != null) {
-			IServer serverInstance = ServerUtils.getServerForModule(module, serverFactoryId, server, true, new NullProgressMonitor());
-			if (serverInstance != null) {
-                IURLProvider urlProvider = (IURLProvider) serverInstance.loadAdapter(IURLProvider.class, null);
+			if (server != null) {
+                IURLProvider urlProvider = (IURLProvider) server.loadAdapter(IURLProvider.class, null);
                 if (urlProvider!=null) {
                     URL url = urlProvider.getModuleRootURL(module);              
 					if (url != null) {
@@ -499,6 +498,8 @@
 					  webProjectURL = (s.endsWith("/") ? s.substring(0, s.length() - 1) : s);
                     }
 				}
+			} else {
+				webProjectURL = getWebComponentURL(project, serverFactoryId);
 			}
 		}
 		return webProjectURL;
@@ -621,9 +622,13 @@
         List runtimes = Arrays.asList(ServerUtil.getRuntimes(moduleType, stJ2EEVersion));    
 		for (int i = 0; i < runtimes.size(); i++) {
 			IRuntime runtime = (IRuntime) runtimes.get(i);
-			String thisRuntimeTypeId = runtime.getRuntimeType().getId();
-			if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub()) {
-				return runtime.getId();
+			IRuntimeType runtimeType = runtime.getRuntimeType();
+			if (runtimeType != null)
+			{
+				String thisRuntimeTypeId = runtimeType.getId();
+				if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub()) {
+					return runtime.getId();
+				}
 			}
 		}
 
@@ -686,9 +691,13 @@
         List runtimes = Arrays.asList(ServerUtil.getRuntimes(earModuleType, stJ2EEVersion));
 		for (int i = 0; i < runtimes.size(); i++) {
 			IRuntime runtime = (IRuntime) runtimes.get(i);
-			String thisId = runtime.getRuntimeType().getId();
-			if (thisId.equals(runtimeTargetId))
-				return true;
+			IRuntimeType runtimeType = runtime.getRuntimeType();
+			if (runtimeType != null)
+			{
+				String thisId = runtimeType.getId();
+				if (thisId.equals(runtimeTargetId))
+					return true;
+			}
 		}
 
 		return false;
@@ -711,9 +720,13 @@
         List runtimes = Arrays.asList(ServerUtil.getRuntimes(projectType, stJ2EEVersion));    
 		for (int i = 0; i < runtimes.size(); i++) {
 			IRuntime runtime = (IRuntime) runtimes.get(i);
-			String thisId = runtime.getRuntimeType().getId();
-			if (thisId.equals(runtimeTargetId))
-				return true;
+			IRuntimeType runtimeType = runtime.getRuntimeType();
+			if (runtimeType != null)
+			{
+				String thisId = runtimeType.getId();
+				if (thisId.equals(runtimeTargetId))
+					return true;
+			}
 		}
 
 		return false;
@@ -776,14 +789,18 @@
       for (int i = 0; i < runtimes.length; i++)
       {
         IRuntime runtime = runtimes[i];
-        String thisRuntimeTypeId = runtime.getRuntimeType().getId();
-        if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub())
-        {
-          // Found an appropriate IRuntime that is not a stub
-          //foundNonStubRuntime = true;
-          nonStubRuntime = runtime;
-          break;
-        }
+        IRuntimeType runtimeType = runtime.getRuntimeType();
+    	if (runtimeType != null)
+    	{
+    		String thisRuntimeTypeId = runtimeType.getId();
+	        if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub())
+	        {
+	          // Found an appropriate IRuntime that is not a stub
+	          //foundNonStubRuntime = true;
+	          nonStubRuntime = runtime;
+	          break;
+	        }
+    	}
       }
     }
     
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/conformance/JDTResolver.java b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/conformance/JDTResolver.java
index c1ed6fd..7df3716 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/conformance/JDTResolver.java
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/conformance/JDTResolver.java
@@ -11,6 +11,7 @@
  * -------- -------- -----------------------------------------------------------
  * 20060419   132905 cbrealey@ca.ibm.com - Chris Brealey
  * 20060711   149411 cbrealey@ca.ibm.com - Chris Brealey
+ * 20070102   196371 sengpl@ca.ibm.com - Seng Phung-Lu
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.conformance;
 
@@ -566,8 +567,13 @@
 	 */
 	public String getTypeNameFromSignature ( String signature )
 	{
+
 		String packageName = Signature.getSignatureQualifier(signature);
 		String baseName = Signature.getSignatureSimpleName(signature);
+		if (baseName.endsWith("[]")){
+			baseName = baseName.substring(0, baseName.indexOf("["));
+		}
+			
 		String typeName = (packageName.trim().equals("")?"":packageName+".") + baseName;
 		return typeName;
 	}
diff --git a/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF
index 0ed8f6d..90a979d 100644
--- a/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.command.env.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.command.env.core
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.102.qualifier
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.command.internal.env.core;x-internal:=true,
diff --git a/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java b/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java
index 0faeffc..12488aa 100644
--- a/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java
+++ b/bundles/org.eclipse.wst.command.env.core/src/org/eclipse/wst/command/internal/env/core/fragment/CommandFragmentEngine.java
@@ -11,6 +11,7 @@
  * -------- -------- -----------------------------------------------------------
  * 20060223   129232 pmoogk@ca.ibm.com - Peter Moogk
  * 20060313   130958 pmoogk@ca.ibm.com - Peter Moogk
+ * 20061011   159283 makandre@ca.ibm.com - Andrew Mak, project not associated to EAR when using ant on command-line
  *******************************************************************************/
 package org.eclipse.wst.command.internal.env.core.fragment;
 
@@ -401,10 +402,10 @@
   	    
   	  if( cmd != null )
   	  {
-  	    dataManager_.process( cmd );
-  	  	  
   	    try
   	    {
+  	      dataManager_.process( cmd );  	    	
+  	    	
           status = initBeforeExecute( cmd );
           
   	      environment_.getLog().log(ILog.INFO, "command", 5001, this, "runCommand", "Executing: " + cmd.getClass().getName());
diff --git a/bundles/org.eclipse.wst.command.env/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.command.env/META-INF/MANIFEST.MF
index 6d5e27e..922d04e 100644
--- a/bundles/org.eclipse.wst.command.env/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.command.env/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.command.env; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.103.qualifier
 Bundle-Activator: org.eclipse.wst.command.internal.env.plugin.EnvPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java
index 23321dc..87c72f3 100644
--- a/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java
+++ b/bundles/org.eclipse.wst.command.env/src/org/eclipse/wst/command/internal/env/ant/AntController.java
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060726   151614 pmoogk@ca.ibm.com - Peter Moogk
+ * 20061011   159283 makandre@ca.ibm.com - Andrew Mak, project not associated to EAR when using ant on command-line
  *******************************************************************************/
 
 package org.eclipse.wst.command.internal.env.ant;
@@ -75,6 +76,9 @@
 	      
 	   //ready to start running operations
  	   ((AntOperationManager)getOperationManager()).moveForwardToNextStop(new NullProgressMonitor());
+
+ 	   if (!operationManager_.getLastStatus().isOK()) 		   
+ 		   operationManager_.undoToLastStop();
    }
    
    private void createOperationManager(CommandFragment frag, DataFlowManager mgr, AntEnvironment env)
diff --git a/bundles/org.eclipse.wst.ws.explorer/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.ws.explorer/META-INF/MANIFEST.MF
index 8377fd6..ce761f4 100644
--- a/bundles/org.eclipse.wst.ws.explorer/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.ws.explorer/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.ws.explorer; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-ClassPath: explorer.jar,
  wsexplorer-properties.jar
 Bundle-Activator: org.eclipse.wst.ws.internal.explorer.plugin.ExplorerPlugin
diff --git a/bundles/org.eclipse.wst.ws.explorer/build-war.xml b/bundles/org.eclipse.wst.ws.explorer/build-war.xml
index 37aba57..78ec8b6 100644
--- a/bundles/org.eclipse.wst.ws.explorer/build-war.xml
+++ b/bundles/org.eclipse.wst.ws.explorer/build-war.xml
@@ -1,10 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project name="org.eclipse.wst.ws.explorer" default="build.wars" basedir=".">
-
+    
+    <!-- the environment variables are important to set here, and 
+    to have JAVA_4_HOME set to some Java 1.4 SDK home, 
+    since we want this compiled with a 1.4 version, but 
+    this overall build itself might be being ran in Java 1.5 -->
+    <property environment="env" />
+    
 	<property name="wsexplorerDir" value="${buildDirectory}/plugins/org.eclipse.wst.ws.explorer/wsexplorer"/>
 
 	<target name="jspcompile" unless="wsexplorer.war" description="Pre-compile the JSPs in the org.eclipse.wst.ws.explorer plugin">
-		<java classname="org.apache.jasper.JspC" fork="true">
+		<java classname="org.apache.jasper.JspC" fork="true" jvm="${env.JAVA_4_HOME}/bin/java">
 			<arg line="-webxml ${wsexplorerDir}/WEB-INF/web.xml -d ${wsexplorerDir} -webapp ${wsexplorerDir}"/>
 			<classpath>
 				<fileset dir="${baseLocation}/plugins">
@@ -15,7 +21,7 @@
 				</fileset>
 			</classpath>
 		</java>
-		<javac destdir="${wsexplorerDir}/WEB-INF/classes" includeAntRuntime="false" failonerror="false">
+		<javac destdir="${wsexplorerDir}/WEB-INF/classes" includeAntRuntime="false" failonerror="false" executable="${env.JAVA_4_HOME}/bin/javac" fork="true">
 			<src path="${wsexplorerDir}"/>
 			<classpath>
 				<fileset dir="${buildDirectory}/plugins">
diff --git a/bundles/org.eclipse.wst.ws.explorer/build.properties b/bundles/org.eclipse.wst.ws.explorer/build.properties
index 04b8b51..982a5f0 100644
--- a/bundles/org.eclipse.wst.ws.explorer/build.properties
+++ b/bundles/org.eclipse.wst.ws.explorer/build.properties
@@ -9,6 +9,7 @@
                explorer.jar,\
                plugin.properties,\
                properties/,\
+               wsexplorer.war,\
                META-INF/,\
                about.html,\
                wsexplorer-properties.jar
diff --git a/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/WSExplorer.java b/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/WSExplorer.java
index d8d4344..6c60c63 100644
--- a/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/WSExplorer.java
+++ b/bundles/org.eclipse.wst.ws.explorer/src/org/eclipse/wst/ws/internal/explorer/WSExplorer.java
@@ -11,6 +11,7 @@
  * -------- -------- -----------------------------------------------------------
  * 20060721   151409 makandre@ca.ibm.com - Andrew Mak, WSE does not open in external browser on RH
  * 20060802   150428 sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20061219   168620 makandre@ca.ibm.com - Andrew Mak, WSE does not open in external browser on Linux
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.explorer;
 
@@ -23,6 +24,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.browser.IWebBrowser;
 import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
@@ -119,6 +121,23 @@
 			
 			if (forceLaunchOutsideIDE) {
 				browser = browserSupport.getExternalBrowser();
+				
+				// external browser support uses swt Program.findProgram() to locate an appropriate browser for HTML files
+				// certain versions of swt Program class need to be run from the UI thread, otherwise findProgram() does not
+				// work properly (this applies to Linux only).  The code below is to workaround this problem.
+				
+				// Display.getCurrent() will be null if this is not the UI thread
+				if (Display.getCurrent() == null) {
+					
+					// create a runnable to open the browser, run it in the UI thread
+					OpenBrowserRunnable runnable = new OpenBrowserRunnable(browser, new URL(sb.toString()));
+					Display.getDefault().syncExec(runnable);
+					
+					if (runnable.getException() != null)
+						throw runnable.getException();
+				}
+				else
+					browser.openURL(new URL(sb.toString()));
 			}
 			else {
 				// browserId
@@ -129,10 +148,8 @@
 				if (internalBrowser_==null)
 					internalBrowser_ = browserSupport.createBrowser(browserId.toString());
 				browser = internalBrowser_;
+				browser.openURL(new URL(sb.toString()));
 			}
-			
-			browser.openURL(new URL(sb.toString()));
-			
 		} catch (Exception e) {
 			return new Status(IStatus.ERROR, ExplorerPlugin.ID, 0,
 					ExplorerPlugin.getMessage("%MSG_ERROR_LAUNCH_WSEXPLORER"),
@@ -234,3 +251,32 @@
 		return launch(wb, sel, options, forceLaunchOutsideIDE);
 	}
 }
+
+/**
+ * Helper class for opening a browser and storing the
+ * Exception thrown if it was unsuccessful. 
+ */
+class OpenBrowserRunnable implements Runnable {
+	
+	private IWebBrowser browser;
+	private URL url;
+	private Exception exception = null;
+	
+	public OpenBrowserRunnable(IWebBrowser browser, URL url) {
+		this.browser = browser;
+		this.url = url;
+	}
+	
+	public void run() {
+		try {
+			browser.openURL(url);			
+		}
+		catch (Exception e) {
+			exception = e;
+		}
+	}
+	
+	public Exception getException() {
+		return exception;
+	}
+}
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUserDefUDDIRegistryElement.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUserDefUDDIRegistryElement.java
index 19df577..37a4de1 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUserDefUDDIRegistryElement.java
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/favorites/datamodel/FavoritesUserDefUDDIRegistryElement.java
@@ -1,20 +1,29 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060912   141796 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 
 package org.eclipse.wst.ws.internal.explorer.platform.favorites.datamodel;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.wst.ws.internal.datamodel.Model;
+import org.eclipse.wst.ws.internal.model.v10.registry.Registry;
 import org.eclipse.wst.ws.internal.model.v10.taxonomy.Taxonomy;
+import org.eclipse.wst.ws.internal.model.v10.uddiregistry.UDDIRegistry;
+import org.eclipse.wst.ws.internal.registry.IRegistryManager;
+import org.eclipse.wst.ws.internal.registry.RegistryService;
+import org.eclipse.wst.ws.internal.registry.UDDIRegistryService;
 
 public class FavoritesUserDefUDDIRegistryElement extends FavoritesElement
 {
@@ -138,4 +147,46 @@
   {
     return getName();
   }
+  
+  public void refreshMeta(){
+	    
+	    RegistryService regService = RegistryService.instance();
+	    IRegistryManager regManager = regService.getDefaultRegistryManager();
+	    try
+	    {
+	      
+	    	
+	      regManager.refreshManager();
+	      String[] regURIs = regManager.getRegistryURIs();
+	      for (int i = 0; i < regURIs.length; i++)
+	      {
+	        Registry reg = regManager.loadRegistry(regURIs[i]);
+	        if (reg instanceof UDDIRegistry)
+	        {
+	          UDDIRegistry uddiReg = (UDDIRegistry)reg;
+	          List names = uddiReg.getName();
+	          
+	          if(uddiReg.getDiscoveryURL().equals(getInquiryURL())){
+	          
+	        	  setNames(names);
+	        	  setDescs(uddiReg.getDescription());
+	        	  setVersion(uddiReg.getVersion());
+	        	  setDefaultLogin(uddiReg.getDefaultLogin());
+	        	  setDefaultPassword(uddiReg.getDefaultPassword());
+	        	  setInquiryURL(uddiReg.getDiscoveryURL());
+	        	  setPublishURL(uddiReg.getPublicationURL());
+	        	  setSecureInquiryURL(uddiReg.getSecuredDiscoveryURL());
+	        	  setSecurePublishURL(uddiReg.getSecuredPublicationURL());
+	        	  Taxonomy[] taxonomies = regManager.loadTaxonomies(UDDIRegistryService.instance().getTaxonomyURIs(uddiReg));
+	        	  setTaxonomies(taxonomies);
+	          }
+	        }
+	      }
+	    }
+	    catch (CoreException ce)
+	    {
+	      // TODO: Better error reporting
+	      ce.printStackTrace();
+	    }  
+  }
 }
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/actions/OpenRegistryAction.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/actions/OpenRegistryAction.java
index 891ff4f..9288c7d 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/actions/OpenRegistryAction.java
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/actions/OpenRegistryAction.java
@@ -1,12 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060912   141796 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.explorer.platform.uddi.actions;
 
@@ -215,8 +218,6 @@
         gatherWSUserDefinedCategories(proxy,categoryModels);
         if (categoryModels.size() > 0)
           registryElement.setUserDefinedCategories(categoryModels);
-        else
-          messageQueue.addMessage(uddiPerspective.getMessage("MSG_INFO_NO_USER_DEFINED_CATEGORIES_FOUND"));
       }
       registryElement.setCategoriesDirectory(categoriesDirectory);
       uddiMainElement.connect(registryElement,UDDIModelConstants.REL_REGISTRIES,ModelConstants.REL_OWNER);
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/datamodel/RegistryElement.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/datamodel/RegistryElement.java
index 1d51162..ee23fd5 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/datamodel/RegistryElement.java
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/datamodel/RegistryElement.java
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060427   136449 brunssen@us.ibm.com - Vince Brunssen  
+ * 20060912   141796 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel;
 
@@ -17,9 +18,17 @@
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.wst.ws.internal.datamodel.Model;
 import org.eclipse.wst.ws.internal.explorer.platform.uddi.constants.UDDIModelConstants;
+import org.eclipse.wst.ws.internal.model.v10.registry.Registry;
+import org.eclipse.wst.ws.internal.model.v10.taxonomy.Taxonomy;
+import org.eclipse.wst.ws.internal.model.v10.uddiregistry.UDDIRegistry;
 import org.eclipse.wst.ws.internal.parser.discovery.NetUtils;
+import org.eclipse.wst.ws.internal.registry.IRegistryManager;
+import org.eclipse.wst.ws.internal.registry.RegistryService;
+import org.eclipse.wst.ws.internal.registry.UDDIRegistryService;
 import org.uddi4j.UDDIException;
 import org.uddi4j.client.UDDIProxy;
 import org.uddi4j.datatype.Description;
@@ -235,4 +244,56 @@
   {
     return categoriesDirectory_;
   }
+
+  public void refreshMeta(){
+	    
+	  RegistryService regService = RegistryService.instance();
+	  IRegistryManager regManager = regService.getDefaultRegistryManager();
+	  
+	  
+	  try
+	  {
+    	  regManager.refreshManager();
+		  String[] regURIs = regManager.getRegistryURIs();
+		  for (int i = 0; i < regURIs.length; i++)
+		  {
+			  Registry reg = regManager.loadRegistry(regURIs[i]);
+			  if (reg instanceof UDDIRegistry)
+			  {
+				  UDDIRegistry uddiReg = (UDDIRegistry)reg;
+				  if(uddiReg.getDiscoveryURL().equals(getInquiryURL())){
+					  
+					  
+					 
+					  Taxonomy[] taxonomies = regManager.loadTaxonomies(UDDIRegistryService.instance().getTaxonomyURIs(uddiReg));
+					  if (taxonomies != null)
+				        {
+				          Hashtable taxonomyTable = new Hashtable();
+				          for (int j=0; j<taxonomies.length; j++)
+				          {
+				            Taxonomy taxonomy = taxonomies[j];
+				            String name = taxonomy.getName();
+				            String tmodelKey = taxonomy.getTmodelKey();
+				            CategoryModel catModel = new CategoryModel();
+				            catModel.setDisplayName(name);
+				            catModel.setCategoryKey(name);
+				            catModel.setTModelKey(tmodelKey);
+				            catModel.loadFromTaxonomy(taxonomy);
+				            taxonomyTable.put(tmodelKey, catModel);
+				          }
+				          
+				          setUserDefinedCategories(taxonomyTable);
+				        }   
+				  }
+		  
+			  }
+	  
+		  }
+	  }catch (CoreException ce)
+	  {
+		  // TODO: Better error reporting
+		  ce.printStackTrace();
+	  }  
+  }
+
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/util/Uddi4jHelper.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/util/Uddi4jHelper.java
index 10e3b8c..8a7b2fe 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/util/Uddi4jHelper.java
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/uddi/util/Uddi4jHelper.java
@@ -1,18 +1,24 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20061004   148052 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.explorer.platform.uddi.util;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Vector;
 import javax.wsdl.Binding;
 import javax.wsdl.Definition;
@@ -305,7 +311,28 @@
   
   public String[] getImports(Definition def, String wsdlUrl)
   {
-    Import[] imports = (Import [])def.getImports().values().toArray(new Import[0]);
+  
+	  
+	Map importsMap = def.getImports();
+    Collection values = importsMap.values();
+    Iterator it = values.iterator();
+    
+    Vector importsVec = new Vector();  
+    for(int i =0;it.hasNext();i++){
+    	ArrayList aList = (ArrayList)it.next();
+        Iterator itImports = aList.iterator();
+        while(itImports.hasNext()){
+        	importsVec.add(itImports.next());
+        }
+    }
+    Import imports[] = new Import[importsVec.size()] ;
+    Iterator itVec = importsVec.iterator();
+    for(int j = 0;itVec.hasNext();j++){
+    	imports[j] = (Import)itVec.next();
+    }
+    
+    
+    
     String[] importStrings = new String[imports.length];
     String s;
     if (wsdlUrl != null && wsdlUrl.indexOf('/') != -1)
@@ -393,4 +420,4 @@
     }
     return s;
   }
-}
\ No newline at end of file
+}
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/datamodel/WSDLElement.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/datamodel/WSDLElement.java
index 320ec18..7530a43 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/datamodel/WSDLElement.java
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/datamodel/WSDLElement.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * IBM Corporation - initial API and implementation
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060717   146707 mahutch@ca.ibm.com - Mark Hutchinson
+ * 20070124   167487 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel;
 
@@ -38,6 +39,7 @@
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.wst.common.uriresolver.internal.util.URIEncoder;
+import org.eclipse.wst.ws.internal.common.HTTPUtility;
 import org.eclipse.wst.ws.internal.datamodel.Model;
 import org.eclipse.wst.ws.internal.explorer.platform.constants.ModelConstants;
 import org.eclipse.wst.ws.internal.explorer.platform.util.Validator;
@@ -98,14 +100,15 @@
   public WSDLElement(String name, Model model, String wsdlUrl)
   {
     super(name, model);
-    wsdlUrl_ = wsdlUrl;
+    setWsdlUrl(wsdlUrl);
     definition_ = null;
     schemaList_ = new Vector();
 	schemaURI_ = new Vector();
   }
 
   public void setWsdlUrl(String wsdlUrl) {
-    wsdlUrl_ = wsdlUrl;
+	  HTTPUtility http = new HTTPUtility();
+	  wsdlUrl_ = http.handleRedirect(wsdlUrl);
   }
 
   public String getWsdlUrl() {
@@ -151,6 +154,8 @@
 	  
     Vector errorMessages = new Vector();
     definition_ = loadWSDL(wsdlUrl_);
+    
+    
     if (definition_ != null)
     {
       setDocumentation(definition_.getDocumentationElement());
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/favorites/forms/FavoritesUserDefUDDIRegistryDetailsPage.jsp b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/favorites/forms/FavoritesUserDefUDDIRegistryDetailsPage.jsp
index eba10a0..82d003c 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/favorites/forms/FavoritesUserDefUDDIRegistryDetailsPage.jsp
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/favorites/forms/FavoritesUserDefUDDIRegistryDetailsPage.jsp
@@ -1,13 +1,16 @@
 <%
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060912   141796 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 %>
 <%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.wst.ws.internal.explorer.platform.perspective.*,
@@ -50,9 +53,8 @@
     <%
     if (selectedElement instanceof FavoritesUserDefUDDIRegistryElement) {
         FavoritesUserDefUDDIRegistryElement regElement = (FavoritesUserDefUDDIRegistryElement)selectedElement;
-    %>
-
-        <%
+        regElement.refreshMeta();      
+    
         String version = regElement.getVersion();
         if (version != null)
         {
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/uddi/forms/RegDetailsForm.jsp b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/uddi/forms/RegDetailsForm.jsp
index efaf642..1dba225 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/uddi/forms/RegDetailsForm.jsp
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/uddi/forms/RegDetailsForm.jsp
@@ -1,13 +1,16 @@
 <%
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060912   141796 gilberta@ca.ibm.com - Gilbert Andrews
  *******************************************************************************/
 %>
 <%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.*,
@@ -30,6 +33,7 @@
    ToolManager currentToolManager = registryNode.getCurrentToolManager();
    FormTool formTool = (FormTool)(currentToolManager.getSelectedTool());   
    RegistryElement regElement = (RegistryElement)registryNode.getTreeElement();
+   regElement.refreshMeta();
 %>
 <html>
 <head>
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl_content.jsp b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl_content.jsp
index 693e6a3..8d26fe9 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl_content.jsp
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl_content.jsp
@@ -12,6 +12,7 @@
  * -------- -------- -----------------------------------------------------------
  * 20060317   127456 cbrealey@ca.ibm.com - Chris Brealey
  * 20060524   142499 jeffliu@ca.ibm.com - Jeffrey Liu
+ * 20070109   169553 makandre@ca.ibm.com - Andrew Mak
  *******************************************************************************/
 %>
 <%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.core.resources.*,
@@ -40,7 +41,9 @@
    Controller controller = (Controller)currentSession.getAttribute("controller");
    int wsdlType = controller.getWSDLType();
    
-   WebServiceCategory mainCategory = null;
+   Vector wsInfoCache = new Vector();
+   int workspaceStart = -1;
+   int workspaceEnd   = -1;
    
 %>
 <html>
@@ -141,7 +144,14 @@
 <%
        Iterator it = finder.getWebServicesByCategory(category,null);
        if(category.getId().equals("org.eclipse.wst.ws.internal.wsfinder.category.workspace")){
-       mainCategory = category;
+
+    	   workspaceStart = wsInfoCache.size();
+    	   workspaceEnd   = workspaceStart;
+    	   
+    	   while (it.hasNext()) {
+        	   wsInfoCache.add(it.next());
+        	   workspaceEnd++;
+    	   }
 %>
       document.getElementById("projects").style.display = ""; 
       fillWebProjects();
@@ -159,6 +169,7 @@
 %>
       document.forms[0].<%=ActionInputs.QUERY_INPUT_WEBPROJECT_WSDL_URL%>.options[x++] = new Option("<%=wsdl%>", "<%=wsdl%>"); 
 <%
+           wsInfoCache.add(wsi);
          }
        }
 %>
@@ -177,7 +188,7 @@
       document.forms[0].webProjectWSDLURL.options[0] = null;
 <%
      TreeSet urls = new TreeSet();
-     Iterator wsIterator = WebServiceFinder.instance().getWebServices(null);    
+     Iterator wsIterator = wsInfoCache.iterator();
      while (wsIterator.hasNext())
      {
        WebServiceInfo wsInfo = (WebServiceInfo)wsIterator.next();
@@ -234,7 +245,7 @@
          String httpsProtocol = "https://";
          wsdlURLs_.removeAllElements();
 
-		 Iterator ws = WebServiceFinder.instance().getWebServicesByCategory(mainCategory,null);        
+		 Iterator ws = wsInfoCache.subList(workspaceStart, workspaceEnd).iterator();
 
          while (ws.hasNext())
          {
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsil/actions/ClearNodeConfirmJSP.jsp b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsil/actions/ClearNodeConfirmJSP.jsp
index 5c1337f..9fe32ba 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsil/actions/ClearNodeConfirmJSP.jsp
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsil/actions/ClearNodeConfirmJSP.jsp
@@ -7,12 +7,16 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060906 155434   makandre@ca.ibm.com - Andrew Mak, Back Slash '\' not appearing in "WSIL no longer resolvable" error message
  *******************************************************************************/
 %>
 <%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.wst.ws.internal.explorer.platform.wsil.constants.WsilFrameNames,
                                                                                           org.eclipse.wst.ws.internal.explorer.platform.constants.*,
-                                   					                    org.eclipse.wst.ws.internal.explorer.platform.wsil.actions.ClearWSILAction"%>
+                                   					                    org.eclipse.wst.ws.internal.explorer.platform.wsil.actions.ClearWSILAction,
+                                   					                    org.eclipse.wst.ws.internal.explorer.platform.util.*"%>
 
 <jsp:include page="/wsil/scripts/wsilPanes.jsp" flush="true"/>
 <jsp:useBean id="controller" class="org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller" scope="session"/>
@@ -22,7 +26,7 @@
 </head>
 <body dir="<%=org.eclipse.wst.ws.internal.explorer.platform.util.DirUtils.getDir()%>">
     <script language="javascript">
-        if (confirm("<%=controller.getWSILPerspective().getMessage("MSG_CONFIRM_REMOVE_NODE", controller.getWSILPerspective().getNodeManager().getSelectedNode().getNodeName())%>")) {
+        if (confirm("<%=HTMLUtils.JSMangle(controller.getWSILPerspective().getMessage("MSG_CONFIRM_REMOVE_NODE", controller.getWSILPerspective().getNodeManager().getSelectedNode().getNodeName()))%>")) {
             perspectiveWorkArea.location = "<%=response.encodeURL(controller.getPathWithContext(ClearWSILAction.getActionLink(controller.getWSILPerspective().getNodeManager().getSelectedNode().getNodeId())))%>";
         }
         else {
diff --git a/bundles/org.eclipse.wst.ws.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.ws.ui/META-INF/MANIFEST.MF
index 702ec8e..f71097d 100644
--- a/bundles/org.eclipse.wst.ws.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.ws.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.ws.ui; singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.102.qualifier
 Bundle-Activator: org.eclipse.wst.ws.internal.ui.plugin.WSUIPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
@@ -20,6 +20,5 @@
  org.eclipse.wst.ws;bundle-version="[1.0.100,1.1.0)",
  org.eclipse.wst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.emf.common;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)"
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)"
 Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.wst.ws.ui/src/org/eclipse/wst/ws/internal/ui/command/OpenEditorCommand.java b/bundles/org.eclipse.wst.ws.ui/src/org/eclipse/wst/ws/internal/ui/command/OpenEditorCommand.java
index e673ef7..8cfaaeb 100644
--- a/bundles/org.eclipse.wst.ws.ui/src/org/eclipse/wst/ws/internal/ui/command/OpenEditorCommand.java
+++ b/bundles/org.eclipse.wst.ws.ui/src/org/eclipse/wst/ws/internal/ui/command/OpenEditorCommand.java
@@ -10,17 +10,14 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060810   135395 makandre@ca.ibm.com - Andrew Mak, Enable WTP Web service framework opening Java editor
+ * 20061025   162288 makandre@ca.ibm.com - Andrew Mak, workspace paths with spaces break Java Editor Launch
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.ui.command;
 
-import java.net.URI;
-
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.filesystem.URIUtil;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
@@ -41,6 +38,7 @@
  */
 public class OpenEditorCommand extends AbstractDataModelOperation {
 
+	private final static String FILE_PROTOCOL     = "file:/";
 	private final static String PLATFORM_RESOURCE = "platform:/resource/";
 	
 	private IWebService webService;
@@ -79,24 +77,30 @@
 		if (implURLs == null)
 			return Status.OK_STATUS;
 		
-		IFile file = null;
+		IFile file;
 		
 		for (int i = 0; i < implURLs.length; i++) {
 			try {    						
-				URI uri    = new URI(implURLs[i]); 				
-				IPath path = URIUtil.toPath(uri);
+				String implURL = implURLs[i];
+				file = null;
 				
 				// local filesystem path
-				if (path != null)
-					file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
+				if (implURL.startsWith(FILE_PROTOCOL)) {
+					implURL = implURL.substring(FILE_PROTOCOL.length());				
+					file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(implURL));
+				}
+				else {	
+					// platform path
+					if (implURL.startsWith(PLATFORM_RESOURCE))
+						implURL = implURL.substring(PLATFORM_RESOURCE.length());
 				
-				// platform path
-				else if (implURLs[i].startsWith(PLATFORM_RESOURCE)) {
-					path = new Path(uri.getPath()).removeFirstSegments(1);					
-					file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+					if (implURL.indexOf(':') != -1)
+						continue;
+					
+					file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(implURL));
 				}
 						
-				if (file == null)
+				if (file == null || !file.exists())
 					continue;
 				
 				IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
diff --git a/bundles/org.eclipse.wst.ws/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.ws/META-INF/MANIFEST.MF
index 50f6a1f..551d96a 100644
--- a/bundles/org.eclipse.wst.ws/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.ws/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.ws; singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.102.qualifier
 Bundle-Activator: org.eclipse.wst.ws.internal.plugin.WSPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.ws/src/org/eclipse/wst/ws/internal/common/HTTPUtility.java b/bundles/org.eclipse.wst.ws/src/org/eclipse/wst/ws/internal/common/HTTPUtility.java
new file mode 100644
index 0000000..1f5112e
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws/src/org/eclipse/wst/ws/internal/common/HTTPUtility.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070124   167487 gilberta@ca.ibm.com - Gilbert Andrews
+ *******************************************************************************/
+package org.eclipse.wst.ws.internal.common;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+
+public class HTTPUtility {
+
+	public String handleRedirect(String urlString){
+		URLConnection conn = null;
+		String urlRedirect = urlString;
+		int time = 0;
+		while(urlRedirect!= null){
+			if (time == 6) return urlRedirect;
+			try{
+				URL url = new URL(urlRedirect);
+				conn = url.openConnection();
+			}catch(Exception exc){
+				return urlRedirect;
+			}
+			if (conn instanceof HttpURLConnection)
+				{
+				HttpURLConnection http = (HttpURLConnection) conn;
+				http.setInstanceFollowRedirects(false);
+	         
+				try{
+					int code = http.getResponseCode();
+					if (code >= 300 && code <= 307 && code != 306 &&
+	        			 code != HttpURLConnection.HTTP_NOT_MODIFIED)
+					{
+						String urlRedirect2 = changeSlash(http.getHeaderField("Location"));
+	           	 		if (urlRedirect2 == null || urlRedirect.equals(urlRedirect2)) return urlRedirect;
+	          	 		else urlRedirect = urlRedirect2;
+					}else return urlRedirect;
+				
+				
+				}catch(IOException exc){
+					return urlRedirect; 
+				}
+			}
+			else return urlRedirect;
+			time++;
+		}
+		return urlString;
+	}
+
+	public String changeSlash(String url){
+		String temp = "";
+		try{
+			temp = url.replace('\\', '/');
+		}catch(Exception exc){
+			return url;
+		}
+		return temp;
+	}
+}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.wsdl.ui/META-INF/MANIFEST.MF
index 12b3eb5..4387db9 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.wsdl.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %_UI_PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.wsdl.ui; singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.101.qualifier
 Bundle-Activator: org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java
index 8c95e59..30948a0 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java
@@ -33,6 +33,7 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IFileEditorInput;
@@ -540,8 +541,22 @@
     IContentProvider provider = newEditorMode.getOutlineProvider();
     if (provider != null)
     {
-      ((ASDContentOutlinePage)getContentOutlinePage()).getTreeViewer().setContentProvider(provider);
-      ((ASDContentOutlinePage)getContentOutlinePage()).getTreeViewer().refresh();  
+      ASDContentOutlinePage outline = (ASDContentOutlinePage)getContentOutlinePage();
+      if (outline != null)
+      {
+        TreeViewer treeViewer = outline.getTreeViewer();
+        if (treeViewer != null)
+        {      
+          outline.getTreeViewer().setContentProvider(provider);
+          outline.getTreeViewer().refresh();
+        }
+      }  
+
     }  
+  }
+  
+  protected void storeCurrentModePreference(String id)
+  {
+    WSDLEditorPlugin.getInstance().getPreferenceStore().setValue(DEFAULT_EDITOR_MODE_ID, id);    
   }  
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/Messages.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/Messages.java
index 70feab6..6e40e15 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/Messages.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/Messages.java
@@ -30,6 +30,10 @@
 		return MessageFormat.format(getString(key), new Object [] { arg0 });
 	}
 
+	public static String getString(String key, Object[] args) {
+		return MessageFormat.format(getString(key), args);
+	}
+	
 	public static String _UI_DEPENDENCIES_CHANGED;
 	public static String _UI_DEPENDENCIES_CHANGED_REFRESH;
 	public static String _UI_EDIT_NAMESPACES_DIALOG_TITLE;
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/WSDLEditorPlugin.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/WSDLEditorPlugin.java
index e61c862..33dfa9c 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/WSDLEditorPlugin.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/WSDLEditorPlugin.java
@@ -321,7 +321,8 @@
       productCustomizationProviderInitialized = true;
       String pluginName = getPreferenceStore().getString(PRODUCT_CUSTOMIZATION_PROVIDER_PLUGIN_ID);
       String className = getPreferenceStore().getString(PRODUCT_CUSTOMIZATION_PROVIDER_CLASS_NAME);
-      if (pluginName != null && className != null)
+      if (pluginName != null && pluginName.length() > 0 &&
+    	  className != null && className.length() > 0)
       {
         try
         {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11MessageReference.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11MessageReference.java
index 3808575..fcee503 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11MessageReference.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11MessageReference.java
@@ -13,6 +13,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.gef.commands.Command;
@@ -22,6 +23,7 @@
 import org.eclipse.wst.wsdl.MessageReference;
 import org.eclipse.wst.wsdl.Operation;
 import org.eclipse.wst.wsdl.Output;
+import org.eclipse.wst.wsdl.Part;
 import org.eclipse.wst.wsdl.ui.internal.Messages;
 import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.adapters.WSDLBaseAdapter;
@@ -33,10 +35,12 @@
 import org.eclipse.wst.wsdl.ui.internal.adapters.commands.W11AddOutputParameterCommand;
 import org.eclipse.wst.wsdl.ui.internal.adapters.commands.W11DeleteCommand;
 import org.eclipse.wst.wsdl.ui.internal.adapters.commands.W11ReorderParametersCommand;
+import org.eclipse.wst.wsdl.ui.internal.adapters.visitor.W11FindInnerElementVisitor;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.ASDAddFaultAction;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.ASDAddOperationAction;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.ASDDeleteAction;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.BaseSelectionAction;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ModelDiagnosticInfo;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IASDObject;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IASDObjectListener;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IMessageReference;
@@ -44,6 +48,8 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
 import org.eclipse.wst.wsdl.ui.internal.visitor.WSDLVisitorForParameters;
+import org.eclipse.wst.xsd.ui.internal.adt.editor.ProductCustomizationProvider;
+import org.eclipse.xsd.XSDElementDeclaration;
 
 
 public class W11MessageReference extends WSDLBaseAdapter implements IMessageReference, IASDObjectListener
@@ -51,7 +57,8 @@
   protected int messageKind = -1;
   protected List parameters = null;
   protected List otherThingsToListenTo = null;
-
+  private String previewString = "";
+  
   public W11MessageReference(int messageKind)
   {
     this.messageKind = messageKind;
@@ -63,6 +70,9 @@
   }
   
   public String getPreview() {
+	  return "  (" + previewString + ")  ";
+	  
+	  /*
 	  String previewString = "()";
 	  List params = getParameters();
 	  // For now, just look at the first Part for the preview
@@ -73,6 +83,34 @@
 	  }	  
 	  
 	  return previewString;
+	  */
+  }
+  
+  private String getMessageString(String key, Object[] args) {
+	  String string = null;
+
+	  Object object = WSDLEditorPlugin.getInstance().getProductCustomizationProvider();
+	  if (object instanceof ProductCustomizationProvider) {
+		  ProductCustomizationProvider productCustomizationProvider = (ProductCustomizationProvider)object;
+		  String newString = productCustomizationProvider.getProductString(key, args);
+		  if (newString != null) {
+			  string = newString;
+		  }
+	  }
+
+	  return string;
+  }
+  
+  private String getInvalidElementReferenceString() {
+	  String string = null;
+	  String[] args = new String[1];
+	  args[0] = "element";
+	  string = getMessageString("_UI_LABEL_INVALID_ARG_REFERENCE", args);
+	  if (string == null) {
+		  string = "Invalid element reference";
+	  }
+	  
+	  return string;
   }
   
   // Convenience method
@@ -297,6 +335,7 @@
 	      }
 	    } 
 	  }
+
 	  return parameters;
 	}    
 	
@@ -323,4 +362,133 @@
 	public ITreeElement getParent() {
 		return null;
 	}
+
+	private void processAdvancedW11MessageReference() {
+		diagnosticMessages = new ArrayList();
+
+		MessageReference messageRef = (MessageReference) getTarget();
+		List parts = new ArrayList();
+		if (messageRef.getEMessage() != null) {
+			if (messageRef.getEMessage().getEParts() != null) {
+				parts = messageRef.getEMessage().getEParts();
+			}
+		}
+
+		if (messageRef == null || messageRef.getEMessage() == null) {
+			addErrorDiagnosticMessage(getUndefinedArg1String("message"));
+		}
+		else if (parts.size() <= 0) {
+			String[] args = new String[1];
+			args[0] = "part";
+			addWarningDiagnosticMessage(getStringForKey("_UI_LABEL_NO_OBJECT_SPECIFIED_ARG1", args));
+		}
+	}
+
+	private void processSimplifiedW11MessageReference() {
+		diagnosticMessages = new ArrayList();
+		
+		MessageReference messageRef = (MessageReference) getTarget();
+		  if (messageRef == null || messageRef.getEMessage() == null) {
+			  addErrorDiagnosticMessage(getUndefinedArg1String("message"));
+		  }
+		  else if (messageRef.getEMessage().getEParts().size() <= 0) {
+			  addWarningDiagnosticMessage(getNoParametersSpecifiedString());
+		  }
+		  else {
+			  Part part = (Part) messageRef.getEMessage().getEParts().get(0);
+			  XSDElementDeclaration xsdElement = part.getElementDeclaration();
+			  if (xsdElement == null || xsdElement.getSchema() == null) {
+				  // No XSD Element
+				  addErrorDiagnosticMessage(getUndefinedArg1String("element"));
+			  }
+			  else {
+				  MyInnerElementVisitor visitor = new MyInnerElementVisitor();
+				  visitor.findErrorsAndWarnings(xsdElement);
+				  diagnosticMessages.addAll(visitor.getDiagnosticMessages());
+			  }
+		  }
+	}
+
+	private void addErrorDiagnosticMessage(String txt) {
+		diagnosticMessages.add(new ModelDiagnosticInfo(txt, ModelDiagnosticInfo.ERROR_TYPE, null));
+	}
+	
+	private void addWarningDiagnosticMessage(String txt) {
+		diagnosticMessages.add(new ModelDiagnosticInfo(txt, ModelDiagnosticInfo.WARNING_TYPE, null));		
+	}
+	
+	protected List diagnosticMessages = new ArrayList();
+	
+	// TODO: rmah: Post WTP 1.5, we should rename this to be something like getAdvancedW11MessageReference()
+	public List getDiagnosticMessages() {
+		processAdvancedW11MessageReference();
+		return diagnosticMessages;
+	}
+	
+	// TODO: rmah: Post WTP 1.5, we should rename this to be something like getSimplifiedW11MessageReference()
+	public List getDiagnosticMessages2() {
+		processSimplifiedW11MessageReference();
+		return diagnosticMessages;
+	}
+	
+	private class MyInnerElementVisitor extends W11FindInnerElementVisitor {
+		private List diagMessages = new ArrayList();
+		
+		public void findErrorsAndWarnings(XSDElementDeclaration xsdElement) {
+			if (xsdElement.getTypeDefinition() == null || xsdElement.getTypeDefinition().getSchema() == null) {
+				// No XSD type (non anonymous) defined
+				diagMessages.add(new ModelDiagnosticInfo(getUndefinedArg1String("type"), ModelDiagnosticInfo.ERROR_TYPE, null));
+			}
+
+			XSDElementDeclaration innerElement = super.getInnerXSDElement(xsdElement);
+			if (innerElement.equals(xsdElement)) {
+				diagMessages.add(new ModelDiagnosticInfo(getNoParametersSpecifiedString(), ModelDiagnosticInfo.WARNING_TYPE, null));
+			}
+		}
+		
+		public List getDiagnosticMessages() {
+			return diagMessages;
+		}
+	}
+	
+	  private String getUndefinedArg1String(String arg) {
+		  String[] args = new String[1];
+		  args[0] = arg;
+		  String newString = getStringForKey("_UI_LABEL_UNDEFINED_ARG1", args);
+		  return newString;
+	  }
+	  
+	  private String getNoParametersSpecifiedString() {
+		  String string = null;
+		  String[] args = new String[0];
+		  string = getStringForKey("_UI_LABEL_NO_PARAMETERS_SPECIFIED", args);
+		  return string;
+	  }
+	  
+	  private String getStringForKey(String key, Object[] args) {
+		  String newString = "";
+		  newString = Messages.getString(key, args);
+		  
+		  Object object = WSDLEditorPlugin.getInstance().getProductCustomizationProvider();
+		  if (object instanceof ProductCustomizationProvider) {
+			  ProductCustomizationProvider productCustomizationProvider = (ProductCustomizationProvider)object;
+			  String customizedString = "";
+			  if (args == null) {
+				  customizedString = productCustomizationProvider.getProductString(key);
+			  }
+			  else {
+				  customizedString = productCustomizationProvider.getProductString(key, args);
+			  }
+			  
+			  if (customizedString != null && !customizedString.equals("")) {
+				  newString = customizedString;
+			  }
+		  }
+
+		  if (newString == null) {
+			  newString = "";
+		  }
+
+		  return newString;
+	  }
   }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Operation.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Operation.java
index d1fd58a..e63a67e 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Operation.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Operation.java
@@ -13,13 +13,18 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+
 import javax.wsdl.OperationType;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.wsdl.Input;
 import org.eclipse.wst.wsdl.Operation;
 import org.eclipse.wst.wsdl.Output;
+import org.eclipse.wst.wsdl.ui.internal.DefaultEditorMode;
 import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.actions.OpenInNewEditor;
 import org.eclipse.wst.wsdl.ui.internal.adapters.WSDLBaseAdapter;
@@ -37,6 +42,8 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IMessageReference;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IOperation;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
+import org.eclipse.wst.wsdl.ui.internal.commands.AddBaseParameterCommand;
+import org.eclipse.wst.xsd.ui.internal.adt.editor.EditorModeManager;
 
 public class W11Operation extends WSDLBaseAdapter implements IOperation {
 	public List getMessages()
@@ -111,15 +118,39 @@
 	}
 	
 	public Command getAddInputCommand() {
-		return new W11AddInputParameterCommand(getOperation());
+		W11AddInputParameterCommand command = new W11AddInputParameterCommand(getOperation());
+		
+        IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+        EditorModeManager manager = (EditorModeManager) editor.getAdapter(EditorModeManager.class);
+		if (manager.getCurrentMode().getId() != DefaultEditorMode.class.getName()) {
+			command.setParameterPattern(AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT);
+		}
+
+		return command;
 	}
 	
 	public Command getAddOutputCommand() {
-		return new W11AddOutputParameterCommand(getOperation());
+		W11AddOutputParameterCommand command = new W11AddOutputParameterCommand(getOperation());
+		
+        IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+        EditorModeManager manager = (EditorModeManager) editor.getAdapter(EditorModeManager.class);
+		if (manager.getCurrentMode().getId() != DefaultEditorMode.class.getName()) {
+			command.setParameterPattern(AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT);
+		}
+
+		return command;
 	}
 	
 	public Command getAddFaultCommand(Object fault) {
-		return new W11AddFaultParameterCommand(getOperation(), null);
+		W11AddFaultParameterCommand command = new W11AddFaultParameterCommand(getOperation(), null);
+		
+        IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+        EditorModeManager manager = (EditorModeManager) editor.getAdapter(EditorModeManager.class);
+		if (manager.getCurrentMode().getId() != DefaultEditorMode.class.getName()) {
+			command.setParameterPattern(AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT);
+		}
+
+		return command;
 	}
 	
 	public Command getReorderMessageReferencesCommand(IMessageReference leftSibling, IMessageReference rightSibling, IMessageReference movingMessageRef) {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForAttribute.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForAttribute.java
index f15c464..5aaa7c0 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForAttribute.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForAttribute.java
@@ -12,9 +12,11 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.gef.commands.Command;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.wsdl.ui.internal.Messages;
+import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.adapters.WSDLBaseAdapter;
 import org.eclipse.wst.wsdl.ui.internal.adapters.actions.W11SetExistingTypeAction;
 import org.eclipse.wst.wsdl.ui.internal.adapters.actions.W11SetNewTypeAction;
@@ -24,6 +26,7 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IMessageReference;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
+import org.eclipse.wst.xsd.ui.internal.adt.editor.ProductCustomizationProvider;
 import org.eclipse.xsd.XSDAttributeDeclaration;
 import org.eclipse.xsd.XSDAttributeUse;
 import org.eclipse.xsd.XSDTypeDefinition;
@@ -98,9 +101,23 @@
 	}
 	
 	public String getText() {
-		return "parameter - attribute";
+		return getParameterString() + " - attribute"; 
 	}
 	
+	private String getParameterString() {
+		String string = "";
+		Object object = WSDLEditorPlugin.getInstance().getProductCustomizationProvider();
+		if (object instanceof ProductCustomizationProvider) {
+			ProductCustomizationProvider productCustomizationProvider = (ProductCustomizationProvider)object;
+			String newString = productCustomizationProvider.getProductString("_UI_LABEL_PARAMETER");
+			if (newString != null) {
+				string = newString;
+			}
+		}
+
+		return string;
+	}
+	  
 	public ITreeElement[] getChildren() {
 		return new ITreeElement[0];
 	}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForElement.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForElement.java
index 102e871..712fca2 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForElement.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForElement.java
@@ -12,9 +12,11 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.gef.commands.Command;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.wsdl.ui.internal.Messages;
+import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.adapters.WSDLBaseAdapter;
 import org.eclipse.wst.wsdl.ui.internal.adapters.actions.W11SetExistingTypeAction;
 import org.eclipse.wst.wsdl.ui.internal.adapters.actions.W11SetNewTypeAction;
@@ -26,6 +28,7 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IMessageReference;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
+import org.eclipse.wst.xsd.ui.internal.adt.editor.ProductCustomizationProvider;
 import org.eclipse.xsd.XSDElementDeclaration;
 import org.eclipse.xsd.XSDTypeDefinition;
 
@@ -52,7 +55,7 @@
         compName = "**anonymous**"; 
     }
 
-    return td.getName() != null ? td.getName() : compName;
+    return (td != null && td.getName() != null) ? td.getName() : compName;
   }
   
   public String getPreview() {
@@ -115,9 +118,23 @@
 	}
 	
 	public String getText() {
-		return "parameter - element"; 
+		return getParameterString() + " - element"; 
 	}
 	
+	  private String getParameterString() {
+		  String string = "";
+		  Object object = WSDLEditorPlugin.getInstance().getProductCustomizationProvider();
+		  if (object instanceof ProductCustomizationProvider) {
+			  ProductCustomizationProvider productCustomizationProvider = (ProductCustomizationProvider)object;
+			  String newString = productCustomizationProvider.getProductString("_UI_LABEL_PARAMETER");
+			  if (newString != null) {
+				  string = newString;
+			  }
+		  }
+
+		  return string;
+	  }
+	
 	public ITreeElement[] getChildren() {
 		return new ITreeElement[0];
 	}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForPart.java
index c557ec7..36725f4 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11ParameterForPart.java
@@ -35,11 +35,13 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.ASDAddOperationAction;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.ASDDeleteAction;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.BaseSelectionAction;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ModelDiagnosticInfo;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IMessageReference;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IOperation;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
 import org.eclipse.wst.wsdl.ui.internal.visitor.WSDLVisitorForParameters;
+import org.eclipse.wst.xsd.ui.internal.adt.editor.ProductCustomizationProvider;
 import org.eclipse.xsd.XSDAttributeUse;
 import org.eclipse.xsd.XSDComplexTypeDefinition;
 import org.eclipse.xsd.XSDElementDeclaration;
@@ -69,9 +71,13 @@
     }
     else
     {
-      return "(no name specified)";
+      return getNoNameSpecifiedString();
     }  
   }
+  
+  private String getNoNameSpecifiedString() {
+	  return "";
+  }
 
   public String getComponentNameQualifier()
   {
@@ -244,4 +250,46 @@
 		
 		return false;
 	}
+
+	public List getDiagnosticMessages() {
+		List errors = new ArrayList();
+		Part part = (Part) getTarget();
+		if (part.getElementDeclaration() == null && part.getTypeDefinition() == null) {
+			String[] args = new String[2];
+			args[0] = "element";
+			args[1] = "type";
+			String newString = getStringForKey("_UI_LABEL_OR_UNDEFINED_ARG2", args);
+			ModelDiagnosticInfo info = new ModelDiagnosticInfo(newString, ModelDiagnosticInfo.ERROR_TYPE, null);
+			errors.add(info);
+		}
+		
+		return errors;
+	}
+	
+	  private String getStringForKey(String key, Object[] args) {
+		  String newString = "";
+		  newString = Messages.getString(key, args);
+
+		  Object object = WSDLEditorPlugin.getInstance().getProductCustomizationProvider();
+		  if (object instanceof ProductCustomizationProvider) {
+			  ProductCustomizationProvider productCustomizationProvider = (ProductCustomizationProvider)object;
+			  String customizedString = "";
+			  if (args == null) {
+				  customizedString = productCustomizationProvider.getProductString(key);
+			  }
+			  else {
+				  customizedString = productCustomizationProvider.getProductString(key, args);
+			  }
+			  
+			  if (customizedString != null && !customizedString.equals("")) {
+				  newString = customizedString;
+			  }
+		  }
+
+		  if (newString == null) {
+			  newString = "";
+		  }
+
+		  return newString;
+	  }
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddFaultParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddFaultParameterCommand.java
index 26b7ecc..a84be48 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddFaultParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddFaultParameterCommand.java
@@ -20,6 +20,8 @@
 public class W11AddFaultParameterCommand extends W11TopLevelElementCommand implements IASDAddCommand {
 	protected Operation operation;
 	protected Fault fault;
+	protected Object newObject;
+	private int parameterPattern = -1;
 	
 	public W11AddFaultParameterCommand(Operation operation, Fault fault) {
         super(Messages._UI_ACTION_ADD_FAULT, operation.getEnclosingDefinition());
@@ -27,16 +29,32 @@
 		this.fault = fault;
 	}
 	
+	public void setParameterPattern(int pattern) {
+		parameterPattern = pattern;
+	}
+	
 	public void execute() {
 		try {
 			beginRecording(operation.getElement());
 
-			// Determine which Pattern we should use.  For example, ADDBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT
-			int pattern = AddBaseParameterCommand.getParameterPattern(operation);
+			if (parameterPattern == -1) {
+				// Determine which Pattern we should use.  For example, ADDBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT
+				parameterPattern = AddFaultParameterCommand.getParameterPatternForFault(operation, fault);
+				if (parameterPattern == -1) {
+					parameterPattern = AddBaseParameterCommand.getParameterPattern(operation);
+				}
+			}
+			
 			AddFaultParameterCommand command = new AddFaultParameterCommand(operation, fault);
-			command.setStyle(pattern);
+			command.setStyle(parameterPattern);
 			command.run();
 			fault = command.getFault();
+			newObject = command.getNewlyAddedComponentPart();
+			
+			if (command.getXSDElementDeclaration() != null) {
+				// Try to grab the "inner" XSDElement
+				newObject = getNewXSDElement(command.getXSDElementDeclaration());
+			}
 		}
 		finally {
 			endRecording(operation.getElement());
@@ -44,6 +62,6 @@
 	}
 	
 	public Object getNewlyAddedComponent() {
-		return fault;
+		return newObject;
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddInputParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddInputParameterCommand.java
index 0cc0f5e..ea19294 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddInputParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddInputParameterCommand.java
@@ -15,38 +15,55 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.IASDAddCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddBaseParameterCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddInputParameterCommand;
+import org.eclipse.xsd.XSDConcreteComponent;
 
 public class W11AddInputParameterCommand extends W11TopLevelElementCommand implements IASDAddCommand{
 	protected Operation operation;
 	private Object input;
+	private int parameterPattern = -1;
 	
 	public W11AddInputParameterCommand(Operation operation) {
         super(Messages._UI_ACTION_ADD_INPUT, operation.getEnclosingDefinition());
 		this.operation = operation;
 	}
 	
+	public void setParameterPattern(int pattern) {
+		parameterPattern = pattern;
+	}
+	
 	public void execute() {
 		try {
 			beginRecording(operation.getElement());
 
-			// Determine which Pattern we should use.  For example, ADDBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT
-			int pattern = AddBaseParameterCommand.getParameterPattern(operation, true);
-			if (pattern == -1) {
-				pattern = AddBaseParameterCommand.getParameterPattern(operation);
+			if (parameterPattern == -1) {
+				// Determine which Pattern we should use.  For example, ADDBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT
+				parameterPattern = AddBaseParameterCommand.getParameterPattern(operation, true);
+				if (parameterPattern == -1) {
+					parameterPattern = AddBaseParameterCommand.getParameterPattern(operation);
+				}
 			}
-			AddInputParameterCommand command = new AddInputParameterCommand(operation, pattern);
+			
+			AddInputParameterCommand command = new AddInputParameterCommand(operation, parameterPattern);
 			command.run();
+			input = command.getNewlyAddedComponentPart();
 			
 			formatChild(operation.getEInput().getElement());
-			formatChild(command.getXSDElementDeclaration().getContainer().getContainer().getContainer().getElement());
-			
-			input = operation.getEInput();
+			if (command.getXSDElementDeclaration() != null) {
+				// Try to grab the "inner" XSDElement
+				input = getNewXSDElement(command.getXSDElementDeclaration());
+				formatChild(getXSDParent(command.getXSDElementDeclaration()).getElement());
+			}
 		}
 		finally {
 			endRecording(operation.getElement());
 		}
 	}
 	
+	protected XSDConcreteComponent getXSDParent(XSDConcreteComponent xsd) {
+		XSDConcreteComponent parent = xsd.getSchema();
+		return parent;
+	}
+	
 	public Object getNewlyAddedComponent() {
 		return input;
 	}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOperationCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOperationCommand.java
index 2c6c9af..62edaad 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOperationCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOperationCommand.java
@@ -12,7 +12,6 @@
 
 import javax.wsdl.OperationType;
 
-import org.eclipse.wst.wsdl.Message;
 import org.eclipse.wst.wsdl.MessageReference;
 import org.eclipse.wst.wsdl.Operation;
 import org.eclipse.wst.wsdl.Part;
@@ -25,7 +24,6 @@
 import org.eclipse.wst.wsdl.ui.internal.commands.AddFaultCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddInputCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddInputParameterCommand;
-import org.eclipse.wst.wsdl.ui.internal.commands.AddMessageCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddMessageReferenceCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddOperationCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddOutputCommand;
@@ -86,9 +84,9 @@
 	    messageRefCommand.run();
 	    messageRef = (MessageReference) messageRefCommand.getWSDLElement();
 	    
-	    AddMessageCommand command = new AddMessageCommand(messageRef.getEnclosingDefinition(), NameUtil.getMessageName(messageRef));
-	    command.run();
-	    messageRef.setEMessage((Message) command.getWSDLElement());
+//	    AddMessageCommand command = new AddMessageCommand(messageRef.getEnclosingDefinition(), NameUtil.getMessageName(messageRef));
+//	    command.run();
+//	    messageRef.setEMessage((Message) command.getWSDLElement());
 	    
 	    return messageRef;
 	}
@@ -102,7 +100,7 @@
 			  if (parameterPattern == -1) {
 				  parameterPattern = AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT;
 			  }
-			  addParameterCommand = new AddInputParameterCommand(operation, parameterPattern);
+			  addParameterCommand = new AddInputParameterCommand(operation, parameterPattern, true);
 		  }
 		  else if (kind == IMessageReference.KIND_OUTPUT) {
 			  int parameterPattern = AddBaseParameterCommand.getParameterPattern(portType, false);
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOutputParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOutputParameterCommand.java
index 43af5b1..1f14d56 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOutputParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11AddOutputParameterCommand.java
@@ -15,36 +15,65 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.IASDAddCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddBaseParameterCommand;
 import org.eclipse.wst.wsdl.ui.internal.commands.AddOutputParameterCommand;
+import org.eclipse.xsd.XSDConcreteComponent;
 
 public class W11AddOutputParameterCommand extends W11TopLevelElementCommand implements IASDAddCommand {
 	protected Operation operation;
 	private Object output;
+	private int parameterPattern = -1;
 	
 	public W11AddOutputParameterCommand(Operation operation) {
         super(Messages._UI_ACTION_ADD_OUTPUT, operation.getEnclosingDefinition());
 		this.operation = operation;
 	}
 	
+	public void setParameterPattern(int pattern) {
+		parameterPattern = pattern;
+	}
+	
 	public void execute() {
 		try {
 			beginRecording(operation.getElement());
 
-			// Determine which Pattern we should use.  For example, ADDBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT
-			int pattern = AddBaseParameterCommand.getParameterPattern(operation, false);
-			if (pattern == -1) {
-				pattern = AddBaseParameterCommand.getParameterPattern(operation);
+			if (parameterPattern == -1) {
+				// Determine which Pattern we should use.  For example, ADDBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT
+				parameterPattern = AddBaseParameterCommand.getParameterPattern(operation, false);
+				if (parameterPattern == -1) {
+					parameterPattern = AddBaseParameterCommand.getParameterPattern(operation);
+				}
 			}
-			AddOutputParameterCommand command = new AddOutputParameterCommand(operation, pattern);
+			
+			AddOutputParameterCommand command = new AddOutputParameterCommand(operation, parameterPattern);
 			command.run();
+			output = command.getNewlyAddedComponentPart();
+			
 			formatChild(operation.getEOutput().getElement());
-			formatChild(command.getXSDElementDeclaration().getContainer().getContainer().getContainer().getElement());
-			output = operation.getEOutput();
+			if (command.getXSDElementDeclaration() != null) {
+				// Try to grab the "inner" XSDElement
+				output = getNewXSDElement(command.getXSDElementDeclaration());
+				formatChild(getXSDParent(command.getXSDElementDeclaration()).getElement());
+			}
 		}
 		finally {
 			endRecording(operation.getElement());
 		}
 	}
 	
+	protected XSDConcreteComponent getXSDParent(XSDConcreteComponent xsd) {
+		XSDConcreteComponent parent = xsd;
+		
+		for (int index = 0; index < 4; index++) {
+			XSDConcreteComponent previous = parent;
+			parent = parent.getContainer();
+			if (parent == null) {
+				parent = previous;
+				break;
+			}
+		}
+		
+		return parent;
+	}
+	
 	public Object getNewlyAddedComponent() {
 		return output;
 	}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11TopLevelElementCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11TopLevelElementCommand.java
index fcb3f2c..69f6e19 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11TopLevelElementCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/commands/W11TopLevelElementCommand.java
@@ -22,11 +22,13 @@
 import org.eclipse.wst.wsdl.Definition;
 import org.eclipse.wst.wsdl.ui.internal.Messages;
 import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
+import org.eclipse.wst.wsdl.ui.internal.adapters.visitor.W11FindInnerElementVisitor;
 import org.eclipse.wst.wsdl.util.WSDLConstants;
 import org.eclipse.wst.xml.core.internal.XMLCorePlugin;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 import org.eclipse.wst.xml.core.internal.provisional.format.FormatProcessorXML;
+import org.eclipse.xsd.XSDElementDeclaration;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -84,6 +86,11 @@
   {
     ensureDefinition(definition);
   }
+  
+  protected XSDElementDeclaration getNewXSDElement(XSDElementDeclaration xsdElement) { 
+	  W11FindInnerElementVisitor visitor = new W11FindInnerElementVisitor();
+	  return visitor.getInnerXSDElement(xsdElement);
+  }
 
   public static void ensureDefinition(Definition definition)
   {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/visitor/W11FindInnerElementVisitor.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/visitor/W11FindInnerElementVisitor.java
new file mode 100644
index 0000000..c961ea3
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/visitor/W11FindInnerElementVisitor.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.wsdl.ui.internal.adapters.visitor;
+
+import org.eclipse.xsd.XSDElementDeclaration;
+
+/*
+ * Class used to find and return the "inner" XSDElement when given an XSDElement.
+ * This class extends W11XSDVisitor which removes the need for this class to reimplement
+ * the actual traversal of the XSD Model to locate the inner XSDElement.
+ * 
+ * By default, this class will locate the inner XSDElement at depth 2.  However, this depth
+ * can be changed by calling setElementDepth(newDepth).
+ */
+public class W11FindInnerElementVisitor extends W11XSDVisitor {
+	  protected XSDElementDeclaration elementAtDepth;
+	  protected int elementDepth = 2;
+	  protected int depth = 1;
+	  
+	  public XSDElementDeclaration getInnerXSDElement(XSDElementDeclaration xsdElement) {
+		  elementAtDepth = xsdElement;
+		  depth = 1;
+		  visitElementDeclaration(xsdElement);
+		  
+		  return elementAtDepth;
+	  }
+	  
+	  public void visitElementDeclaration(XSDElementDeclaration element) {
+		  if (depth == elementDepth) {
+			  elementAtDepth = element;
+		  }
+		  depth++;
+		  
+		  super.visitElementDeclaration(element);
+	  }
+	  
+	  public void setElementDepth(int elementDepth) {
+		  this.elementDepth = elementDepth; 
+	  }
+}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddBaseParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddBaseParameterCommand.java
index 7c0d78b..277a995 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddBaseParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddBaseParameterCommand.java
@@ -52,6 +52,7 @@
 	protected int style = 0;
 	protected Operation operation;
 	protected XSDElementDeclaration newXSDElement;
+	protected Part newPart;
 	
 	protected String newAnonymousXSDElementName;
 	protected String newXSDElementName;
@@ -88,14 +89,14 @@
 		XSDElementDeclaration anonXSDElement = null;
 		
 		// Create the XSDElement (anonymous) referenced by the Part if necessary
-		if (partElement == null || partElement.getAnonymousTypeDefinition() == null) {
+		if (partElement == null || partElement.getAnonymousTypeDefinition() == null || partElement.getSchema() == null) {
 			anonXSDElement = XSDComponentHelper.createAnonymousXSDElementDefinition(getAnonymousXSDElementBaseName(), part);
 //			part.setElementDeclaration(anonXSDElement);
 			String prefixedName = getPrefixedComponentName(part.getEnclosingDefinition(), anonXSDElement);
 			ComponentReferenceUtil.setComponentReference(part, false, prefixedName);
 			part.setTypeDefinition(null);
 			
-			if (partElement != null) {
+			if (partElement != null && partElement.getSchema() != null) {
 				originalElement = partElement;
 				// Remove the 'original' XSDElement as a Global Element
 				partElement.getSchema().getContents().remove(partElement);
@@ -105,17 +106,18 @@
 			anonXSDElement = partElement;
 		}
 		
+		// Add the 'original' XSDElement if it's type wasn't anonymous
+		if (originalElement != null) {
+			XSDComponentHelper.addXSDElementToModelGroup(anonXSDElement, originalElement);
+		}
+		
 		// Create a new XSDElement
 		XSDModelGroup modelGroup = XSDComponentHelper.getXSDModelGroup(anonXSDElement, part.getEnclosingDefinition());
 		returnedXSDElement = XSDComponentHelper.createXSDElementDeclarationCommand(null, getNewXSDElementBaseName(), modelGroup);
 		
 		// Add the newly created XSDElement to the ModelGroup
 		XSDComponentHelper.addXSDElementToModelGroup(anonXSDElement, returnedXSDElement);
-		
-		// Add the 'original' XSDElement if it's type wasn't anonymous
-		if (originalElement != null) {
-			XSDComponentHelper.addXSDElementToModelGroup(anonXSDElement, originalElement);
-		}
+
 		formatChild(anonXSDElement.getElement());
 		return returnedXSDElement;
 	}
@@ -218,7 +220,7 @@
 		Message message = messageRef.getEMessage();
 		Part part = null;
 		
-		if (message == null) {
+		if (message == null || message.eContainer() == null) {
 			// Create Message
 			AddMessageCommand command = new AddMessageCommand(messageRef.getEnclosingDefinition(), getWSDLMessageName());
 			command.run();
@@ -237,32 +239,59 @@
 			part = (Part) command.getWSDLElement();
 		}
 		else {
-			part = (Part) message.getEParts().get(0);
+			// there is an existing Part
+//			part = (Part) message.getEParts().get(0);
 		}
 		formatChild(message.getElement());
 		
 		return part;
 	}
 	
-	private String getDocLitWrappedPartName() {
+	protected String getDocLitWrappedPartName() {
 		return "parameters";
 	}
-	
+
 	protected XSDElementDeclaration createXSDObjects(Part part) {
 		XSDElementDeclaration returnedXSDElement = null;
 		if (isPartElementReference()) {
 			// Is a Part --> Element reference
+			if (part == null && getMessageReference() != null && getMessageReference().getEMessage() != null) {
+				part = (Part) getMessageReference().getEMessage().getEParts().get(0);
+			}
+			
 			returnedXSDElement = createPartElementReferenceComponents(part);
 		}
 		else {
 			// Is a Part --> Complex Type reference
-			returnedXSDElement = createPartComplexTypeReference(part);
+//			returnedXSDElement = createPartComplexTypeReference(part);
+			
+			// If it's a Part --> Type reference, adding a new parameter always means adding a new Part
+			// with a string reference.  Because of this case, we should really rename this method instead
+			// of createXSDObjects() since we may end up creating a Part.
+			if (part == null && getMessageReference() != null && getMessageReference().getEMessage() != null) {
+				List partNames = new ArrayList();
+				Message message = getMessageReference().getEMessage();
+				Iterator it = message.getEParts().iterator();
+				while (it.hasNext()) {
+					Part item = (Part) it.next();
+					partNames.add(item.getName());
+				}
+				String partName = NameUtil.getUniqueNameHelper(getWSDLPartName(), partNames);
+				AddPartCommand command = new AddPartCommand(message, partName);
+				command.run();
+				newPart = (Part) command.getWSDLElement();
+			}
 		}
 		
 		return returnedXSDElement;
 	}
 	
-    private String getPrefixedComponentName(Definition definition, XSDNamedComponent component) {
+	// TODO: rmah: Post WTP 1.5, this method should be made abstract
+	public MessageReference getMessageReference() {
+		return null;
+	}
+	
+    protected String getPrefixedComponentName(Definition definition, XSDNamedComponent component) {
     	String name = component.getName();
     	String tns = component.getTargetNamespace();
         List prefixes = getPrefixes(definition, tns);
@@ -521,6 +550,10 @@
         }
       }
     }
+    
+    public Part getNewlyAddedComponentPart() {
+    	return newPart;
+    }
 
 	protected abstract String getAnonymousXSDElementBaseName();
 	protected abstract String getNewXSDElementBaseName();
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddFaultParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddFaultParameterCommand.java
index 3921463..928aec5 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddFaultParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddFaultParameterCommand.java
@@ -10,15 +10,88 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.commands;
 
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.wst.wsdl.Fault;
+import org.eclipse.wst.wsdl.Message;
+import org.eclipse.wst.wsdl.MessageReference;
 import org.eclipse.wst.wsdl.Operation;
 import org.eclipse.wst.wsdl.Part;
 import org.eclipse.wst.wsdl.ui.internal.util.NameUtil;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDModelGroup;
+import org.eclipse.xsd.XSDParticle;
+import org.eclipse.xsd.XSDTypeDefinition;
 
 public class AddFaultParameterCommand extends AddBaseParameterCommand {
 	protected Fault fault;
 	private String faultName;
 	
+    public static int getParameterPatternForFault(Operation operation, Fault fault) {
+    	int pattern = -1;
+    	if (fault != null) {
+    		pattern = getPattern(fault.getEMessage());
+    	}
+		if (pattern == -1) {
+			pattern = AddBaseParameterCommand.getParameterPattern(operation);
+		}
+		
+		return pattern;
+    }
+    
+    private static int getPattern(Message message) {
+    	int pattern = -1;
+		if (message != null) {
+			Iterator parts = message.getEParts().iterator();
+			while (parts.hasNext()) {
+				Part part = (Part) parts.next();
+				if (part.getElementDeclaration() != null) {
+					pattern = AddBaseParameterCommand.PART_ELEMENT;
+
+					XSDElementDeclaration xsdElement = part.getElementDeclaration();
+					if (isSequencePattern(xsdElement.getTypeDefinition())) {
+						pattern = AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT;	
+					}					
+					break;
+				}
+				else if (part.getTypeDefinition() != null) {
+					pattern = AddBaseParameterCommand.PART_SIMPLETYPE;
+					
+					if (part.getTypeDefinition() instanceof XSDComplexTypeDefinition) {
+						pattern = AddBaseParameterCommand.PART_COMPLEXTYPE;
+						
+						XSDComplexTypeDefinition xsdType = (XSDComplexTypeDefinition) part.getTypeDefinition();
+						if (isSequencePattern(xsdType)) {
+							pattern = AddBaseParameterCommand.PART_COMPLEXTYPE_SEQ_ELEMENT; 
+						}
+					}
+					break;
+				}
+			}
+		}
+		
+		return pattern;
+    }
+    
+    private static boolean isSequencePattern(XSDTypeDefinition type) {
+    	boolean isSequencePattern = false;
+    	
+    	if (type instanceof XSDComplexTypeDefinition) {
+    		XSDComplexTypeDefinition complexType = (XSDComplexTypeDefinition) type;
+
+	    	if (complexType.getContent() instanceof XSDParticle) {
+				XSDParticle particle = (XSDParticle) complexType.getContent();
+				if (particle.getContent() instanceof XSDModelGroup) {
+					isSequencePattern = true;
+				}
+			}
+    	}
+    	
+    	return isSequencePattern;
+    }
+	
 	public AddFaultParameterCommand(Operation operation, Fault fault) {
 		super(operation, AddBaseParameterCommand.PART_ELEMENT);
 		this.fault = fault;
@@ -35,6 +108,7 @@
 		}
 		
 		Part part = createWSDLComponents(fault);
+		newPart = part;
 		
 		// Create necessary XSD Objects starting with the Part reference
 		newXSDElement = createXSDObjects(part);
@@ -59,6 +133,8 @@
 	protected String getWSDLMessageName() {
 		if (newWSDLMessageName == null) {
 			newWSDLMessageName = operation.getName() + "_" + getFaultName() + "Msg"; //$NON-NLS-1$ //$NON-NLS-2$
+			List usedNames = NameUtil.getUsedMessageNames(operation.getEnclosingDefinition());
+			newWSDLMessageName = NameUtil.getUniqueNameHelper(newWSDLMessageName, usedNames);
 		}
 		
 		return newWSDLMessageName;
@@ -85,7 +161,12 @@
 		return faultName;
 	}
 	
+	// TODO: remove this method and use getMessageReference() instead
 	public Fault getFault() {
 		return fault;
 	}
+	
+	public MessageReference getMessageReference() {
+		return fault;
+	}
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddInputParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddInputParameterCommand.java
index 4dea1bc..2723f2f 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddInputParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddInputParameterCommand.java
@@ -10,16 +10,38 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.commands;
 
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
 import org.eclipse.wst.wsdl.Input;
+import org.eclipse.wst.wsdl.Message;
+import org.eclipse.wst.wsdl.MessageReference;
 import org.eclipse.wst.wsdl.Operation;
 import org.eclipse.wst.wsdl.Part;
+import org.eclipse.wst.wsdl.ui.internal.adapters.visitor.W11FindInnerElementVisitor;
+import org.eclipse.wst.wsdl.ui.internal.util.ComponentReferenceUtil;
 import org.eclipse.wst.wsdl.ui.internal.util.NameUtil;
+import org.eclipse.wst.wsdl.ui.internal.util.XSDComponentHelper;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDModelGroup;
+import org.eclipse.xsd.XSDParticle;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDTypeDefinition;
 
 public class AddInputParameterCommand extends AddBaseParameterCommand {
+	protected boolean createXSDObjects = true;
+	protected boolean reuseExistingMessage = false;
 	private Input input;
 	public AddInputParameterCommand(Operation operation, int style) {
 		super(operation, style);
 	}
+
+	public AddInputParameterCommand(Operation operation, int style, boolean reuseMessage) {
+		super(operation, style);
+		reuseExistingMessage = reuseMessage;
+	}
 	
 	/*
 	 * 
@@ -28,17 +50,94 @@
 		Part part = null;
 		if (operation.getEInput() != null) {
 			input = operation.getEInput();
-			part = createWSDLComponents(operation.getEInput());
 		}
 		else {
 			AddInputCommand command = new AddInputCommand(operation, null);
 			command.run();
 			input = (Input) command.getWSDLElement();
+		}
+		
+		if (style == AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT) {
+			part = createDocLitWrappedWSDLComponents(input);
+		}
+		else {
 			part = createWSDLComponents(input);
 		}
 		
+		newPart = part;
 		// Create necessary XSD Objects starting with the Part reference
-		newXSDElement = createXSDObjects(part);
+		if (createXSDObjects)
+			newXSDElement = createXSDObjects(part);
+	}
+	
+	protected Part createDocLitWrappedWSDLComponents(MessageReference messageRef) {
+		Message message = messageRef.getEMessage();
+		Part part = null;
+
+		if (reuseExistingMessage && message == null) {
+			// See if we can use an existing Message
+			Message existingMessage = null;
+			String messageName = getIdealMessageName(messageRef);
+			Iterator messages = messageRef.getEnclosingDefinition().getEMessages().iterator();
+			while (messages.hasNext()) {
+				Message item = (Message) messages.next();
+				QName itemName = item.getQName();
+				if (itemName != null && itemName.getLocalPart() != null && messageName.equals(itemName.getLocalPart())) {
+					existingMessage = item;
+					break;
+				}
+			}
+
+			if (existingMessage != null) {
+				if (existingMessage.getEParts().size() > 0) {
+					// See if existing Message has a Part referencing an XSD Element with the proper name
+					Part existingPart = (Part) existingMessage.getEParts().get(0);
+					if (!(existingPart.getName().equals(getDocLitWrappedPartName()))) {
+						message = null;
+					}
+					else {
+						XSDElementDeclaration existingElement = existingPart.getElementDeclaration();
+						if (existingElement != null && existingElement.getName().equals(operation.getName())) {
+							// There is an existing XSD Element with the proper name
+							// See if the XSD Element has an anonymous type with a sequence and an XSD Element
+							W11FindInnerElementVisitor visitor = new W11FindInnerElementVisitor();
+							XSDElementDeclaration innerElement = visitor.getInnerXSDElement(existingElement);
+							if (!innerElement.equals(existingElement)) {
+								// Found an existing inner XSD Element
+								createXSDObjects = false;
+
+								// set the MessageReference --> Message reference
+								messageRef.setEMessage(existingMessage);
+								message = existingMessage;
+							}
+						}
+					}
+				}
+			}
+		}
+
+		if (message == null || message.eContainer() == null) {
+			// Create Message
+			AddMessageCommand command = new AddMessageCommand(messageRef.getEnclosingDefinition(), getWSDLMessageName());
+			command.run();
+			message = (Message) command.getWSDLElement();
+			messageRef.setEMessage(message);
+		}
+
+
+		if (message.getEParts().size() == 0) {
+			// Create Part
+			String partName = getDocLitWrappedPartName();
+			AddPartCommand command = new AddPartCommand(message, partName);
+			command.run();
+			part = (Part) command.getWSDLElement();
+		}
+		else {
+			part = (Part) message.getEParts().get(0);
+		}
+		formatChild(message.getElement());
+
+		return part;
 	}
 	
 	protected String getAnonymousXSDElementBaseName() {
@@ -81,7 +180,106 @@
 		return newWSDLPartName;
 	}
 	
+	// TODO: remove this method and use getMessageReference() instead
 	public Input getInput() {
 		return input;
 	}
+
+	protected XSDElementDeclaration createPartElementSeqElementPattern(Part part, XSDElementDeclaration partElement) {
+		XSDElementDeclaration returnedXSDElement = null;
+
+		XSDElementDeclaration originalElement = null;
+		XSDElementDeclaration anonXSDElement = null;
+
+		// Create the XSDElement (anonymous) referenced by the Part if necessary
+		if (partElement == null || partElement.getAnonymousTypeDefinition() == null) {
+			//Find an existing XSDElement to use if possible
+			XSDElementDeclaration existingElement = null;
+			String idealElementName = getAnonymousXSDElementBaseName();
+			XSDSchema schema = XSDComponentHelper.getXSDSchema(part.getEnclosingDefinition());
+			if (schema != null) {
+				Iterator it = schema.getElementDeclarations().iterator();
+				while (existingElement == null && it.hasNext()) {
+					XSDElementDeclaration item = (XSDElementDeclaration) it.next();
+					if (item.getName().equals(idealElementName)) {
+						// found an element we can use.  Confirm it has a doc-lit-wrapped pattern
+						// See if the XSD Element has an anonymous type with a sequence and an XSD Element
+						existingElement = item;
+
+						XSDTypeDefinition xsdType = item.getAnonymousTypeDefinition();
+						if (xsdType != null) {
+							List contents = xsdType.eContents();
+							if (contents.size() > 0 && contents.get(0) instanceof XSDParticle) {
+								XSDParticle particle = (XSDParticle) contents.get(0);
+								List particleContents = particle.eContents();
+								if (particleContents.size() > 0 && particleContents.get(0) instanceof XSDModelGroup) {
+									XSDModelGroup modelGroup = (XSDModelGroup) particleContents.get(0);
+									List modelContents = modelGroup.eContents();
+									if (modelContents.size() > 0 && modelContents.get(0) instanceof XSDParticle) {
+										XSDParticle innerParticle = (XSDParticle) modelContents.get(0);
+										List innerContents = innerParticle.eContents();
+										if (innerContents.size() > 0 && innerContents.get(0) instanceof XSDElementDeclaration) {
+											// inner XSD Element exists
+											// reuse existing element
+											String prefixedName = getPrefixedComponentName(part.getEnclosingDefinition(), existingElement);
+											ComponentReferenceUtil.setComponentReference(part, false, prefixedName);
+											return existingElement;
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+
+			if (existingElement == null) {
+				anonXSDElement = XSDComponentHelper.createAnonymousXSDElementDefinition(getAnonymousXSDElementBaseName(), part);
+//				part.setElementDeclaration(anonXSDElement);
+				String prefixedName = getPrefixedComponentName(part.getEnclosingDefinition(), anonXSDElement);
+				ComponentReferenceUtil.setComponentReference(part, false, prefixedName);
+				part.setTypeDefinition(null);
+
+				if (partElement != null && partElement.getSchema() != null) {
+					originalElement = partElement;
+					// Remove the 'original' XSDElement as a Global Element
+					partElement.getSchema().getContents().remove(partElement);
+				}
+			}
+			else {
+				anonXSDElement = existingElement;
+				// reuse existing element
+				String prefixedName = getPrefixedComponentName(part.getEnclosingDefinition(), existingElement);
+				ComponentReferenceUtil.setComponentReference(part, false, prefixedName);
+			}
+		}
+		else {
+			anonXSDElement = partElement;
+		}
+
+		// Create a new XSDElement
+		XSDModelGroup modelGroup = XSDComponentHelper.getXSDModelGroup(anonXSDElement, part.getEnclosingDefinition());
+		returnedXSDElement = XSDComponentHelper.createXSDElementDeclarationCommand(null, getNewXSDElementBaseName(), modelGroup);
+
+		// Add the newly created XSDElement to the ModelGroup
+		XSDComponentHelper.addXSDElementToModelGroup(anonXSDElement, returnedXSDElement);
+
+		// Add the 'original' XSDElement if it's type wasn't anonymous
+		if (originalElement != null) {
+			XSDComponentHelper.addXSDElementToModelGroup(anonXSDElement, originalElement);
+		}
+		formatChild(anonXSDElement.getElement());
+		return returnedXSDElement;
+	}
+	
+	private String getIdealMessageName(MessageReference messageRef) {	    
+		String messageName = "NewMessage"; //$NON-NLS-1$
+		messageName = operation.getName() + "Request";
+		
+		return messageName;
+	}
+	
+	public MessageReference getMessageReference() {
+		return input;
+	}
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddOutputParameterCommand.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddOutputParameterCommand.java
index be51757..664c7f2 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddOutputParameterCommand.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/commands/AddOutputParameterCommand.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.commands;
 
+import org.eclipse.wst.wsdl.MessageReference;
 import org.eclipse.wst.wsdl.Operation;
 import org.eclipse.wst.wsdl.Output;
 import org.eclipse.wst.wsdl.Part;
@@ -38,13 +39,19 @@
 			part = createWSDLComponents(output);
 		}
 		
+		newPart = part;
 		// Create necessary XSD Objects starting with the Part reference
 		newXSDElement = createXSDObjects(part);
 	}
 	
 	protected String getAnonymousXSDElementBaseName() {
 		if (newAnonymousXSDElementName == null) {
-			newAnonymousXSDElementName = getWSDLPartName();
+			if (this.style == AddBaseParameterCommand.PART_ELEMENT_SEQ_ELEMENT) {
+				newAnonymousXSDElementName = operation.getName() + "Response"; //$NON-NLS-1$;
+			}
+			else {
+				newAnonymousXSDElementName = getWSDLPartName();
+			}
 		}
 		
 		return newAnonymousXSDElementName;
@@ -77,7 +84,12 @@
 		return newWSDLPartName;
 	}
 	
+	// TODO: remove this method and use getMessageReference() instead
 	public Output getOutput() {
 		return output;
 	}
+	
+	public MessageReference getMessageReference() {
+		return output;
+	}
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBaseSearchListProvider.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBaseSearchListProvider.java
index ca043c6..94fe343 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBaseSearchListProvider.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBaseSearchListProvider.java
@@ -11,20 +11,29 @@
 package org.eclipse.wst.wsdl.ui.internal.edit;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.wst.common.core.search.pattern.QualifiedName;
+import org.eclipse.wst.common.core.search.scope.SearchScope;
 import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification;
 import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentList;
 import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentSearchListProvider;
+import org.eclipse.wst.common.uriresolver.internal.util.URIHelper;
+import org.eclipse.wst.wsdl.Definition;
+import org.eclipse.wst.wsdl.Import;
 import org.eclipse.wst.wsdl.WSDLElement;
 import org.eclipse.wst.wsdl.internal.impl.ImportImpl;
 
 public abstract class WSDLBaseSearchListProvider implements IComponentSearchListProvider {
+	
+	protected Definition definition;
+	
 	protected void createWSDLComponentObjects(IComponentList list, List inputComponents, QualifiedName metaName) {
 		Iterator it = inputComponents.iterator();
 		while (it.hasNext()) {
@@ -64,4 +73,38 @@
 		
 		return list;
 	}
+	
+	//TODO (trung) make this one abstract when we are in development phase again
+	protected List getSearchingComponents(Definition importDefinition) {
+		return new ArrayList();
+	}
+	
+	protected void getImportedComponents(IComponentList list, QualifiedName metaName, HashMap exclusions) {		
+		Iterator importsIt = getWSDLFileImports(definition.getEImports()).iterator();
+		while (importsIt.hasNext()) {
+			Import importItem = (Import) importsIt.next();
+			String location = importItem.getDefinition().getDocumentBaseURI();
+			exclusions.put(location, Boolean.TRUE );
+			Definition importDefinition = importItem.getEDefinition();
+			if (importDefinition != null)
+			{
+		  	  List importedComponents = getSearchingComponents(importDefinition);			
+			  createWSDLComponentObjects(list, importedComponents, metaName);
+			}
+		}
+	}
+	
+	protected void searchOutsideCurrentResource(IComponentList list, SearchScope scope, QualifiedName metaName, Map exclusions) {
+		if (scope != null) {
+			WSDLComponentFinder finder = new WSDLComponentFinder(metaName);
+			Iterator it = finder.getWorkbenchResourceComponents(scope).iterator(); 
+			while (it.hasNext()) {
+				ComponentSpecification item = (ComponentSpecification) it.next();
+				String itemURI = URIHelper.getPlatformURI(item.getFile());
+				if (exclusions.get(itemURI) == null){
+					list.add(item);
+				}
+			}
+		}
+	}
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBindingSearchListProvider.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBindingSearchListProvider.java
index 400fc55..a43c715 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBindingSearchListProvider.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLBindingSearchListProvider.java
@@ -10,19 +10,16 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.edit;
 
-import java.util.Iterator;
+import java.util.HashMap;
 import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.common.core.search.scope.SearchScope;
 import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentList;
 import org.eclipse.wst.wsdl.Definition;
-import org.eclipse.wst.wsdl.Import;
 import org.eclipse.wst.wsdl.ui.internal.search.IWSDLSearchConstants;
 
 public class WSDLBindingSearchListProvider extends WSDLBaseSearchListProvider {
-	private Definition definition;
-	
 	public WSDLBindingSearchListProvider(Definition definition) {
 		this.definition = definition;
 	}
@@ -30,25 +27,18 @@
 	public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm) {
 		// Grab explictly defined components
 		createWSDLComponentObjects(list, definition.getEBindings(), IWSDLSearchConstants.BINDING_META_NAME);
+
+		// Files excluded if we search with the search engine later
+		HashMap exclusions = new HashMap();	
+		exclusions.put(definition.getDocumentBaseURI(), Boolean.TRUE);		
 		
-		// Grab directly imported components
-		Iterator importsIt = getWSDLFileImports(definition.getEImports()).iterator();
-		while (importsIt.hasNext()) {
-			Import importItem = (Import) importsIt.next();
-			Definition importDefinition = importItem.getEDefinition();
-			if (importDefinition != null)
-			{		
-		  	  List importedComponents = importDefinition.getEBindings();			
-			  createWSDLComponentObjects(list, importedComponents, IWSDLSearchConstants.BINDING_META_NAME);
-			}  
-		}
-		
-		if (scope != null) {
-			WSDLComponentFinder finder = new WSDLComponentFinder(IWSDLSearchConstants.BINDING_META_NAME);
-			Iterator it = finder.getWorkbenchResourceComponents(scope).iterator();
-			while (it.hasNext()) {
-				list.add(it.next());
-			}
-		}
+		// Grab directly imported components and update the exclusions 'list'
+		getImportedComponents(list, IWSDLSearchConstants.BINDING_META_NAME, exclusions);
+
+		searchOutsideCurrentResource(list, scope, IWSDLSearchConstants.BINDING_META_NAME, exclusions);
+	}
+
+	protected List getSearchingComponents(Definition importDefinition) {
+		return importDefinition.getEBindings();
 	}
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLInterfaceSearchListProvider.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLInterfaceSearchListProvider.java
index 1412c0a..f3e8268 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLInterfaceSearchListProvider.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLInterfaceSearchListProvider.java
@@ -10,19 +10,16 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.edit;
 
-import java.util.Iterator;
+import java.util.HashMap;
 import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.common.core.search.scope.SearchScope;
 import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentList;
 import org.eclipse.wst.wsdl.Definition;
-import org.eclipse.wst.wsdl.Import;
 import org.eclipse.wst.wsdl.ui.internal.search.IWSDLSearchConstants;
 
 public class WSDLInterfaceSearchListProvider extends WSDLBaseSearchListProvider {
-	private Definition definition;
-	
 	public WSDLInterfaceSearchListProvider(Definition definition) {
 		this.definition = definition;
 	}
@@ -30,23 +27,18 @@
 	public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm) {
 		// Grab explictly defined components
 		createWSDLComponentObjects(list, definition.getEPortTypes(), IWSDLSearchConstants.PORT_TYPE_META_NAME);
+
+		// Files excluded if we search with the search engine later
+		HashMap exclusions = new HashMap();	
+		exclusions.put(definition.getDocumentBaseURI(), Boolean.TRUE);		
 		
-		// Grab directly imported components
-		Iterator importsIt = getWSDLFileImports(definition.getEImports()).iterator();
-		while (importsIt.hasNext()) {
-			Import importItem = (Import) importsIt.next();
-			Definition importDefinition = importItem.getEDefinition();
-			List importedComponents = importDefinition.getEPortTypes();
-			
-			createWSDLComponentObjects(list, importedComponents, IWSDLSearchConstants.PORT_TYPE_META_NAME);
-		}
-		
-		if (scope != null) {
-			WSDLComponentFinder finder = new WSDLComponentFinder(IWSDLSearchConstants.PORT_TYPE_META_NAME);
-			Iterator it = finder.getWorkbenchResourceComponents(scope).iterator();
-			while (it.hasNext()) {
-				list.add(it.next());
-			}
-		}
+		// Grab directly imported components and update the exclusions 'list'
+		getImportedComponents(list, IWSDLSearchConstants.PORT_TYPE_META_NAME, exclusions);
+
+		searchOutsideCurrentResource(list, scope, IWSDLSearchConstants.PORT_TYPE_META_NAME, exclusions);
 	}
+
+	protected List getSearchingComponents(Definition importDefinition) {
+		return importDefinition.getEPortTypes();
+	}	
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLMessageSearchListProvider.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLMessageSearchListProvider.java
index 0fa2855..c28d4ec 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLMessageSearchListProvider.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/edit/WSDLMessageSearchListProvider.java
@@ -10,42 +10,35 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.edit;
 
-import java.util.Iterator;
+import java.util.HashMap;
 import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.common.core.search.scope.SearchScope;
 import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentList;
 import org.eclipse.wst.wsdl.Definition;
-import org.eclipse.wst.wsdl.Import;
 import org.eclipse.wst.wsdl.ui.internal.search.IWSDLSearchConstants;
 
 public class WSDLMessageSearchListProvider extends WSDLBaseSearchListProvider {
-	private Definition definition;
-	
 	public WSDLMessageSearchListProvider(Definition definition) {
 		this.definition = definition;
 	}
+	
 	public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm) {
 		// Grab explictly defined components
 		createWSDLComponentObjects(list, definition.getEMessages(), IWSDLSearchConstants.MESSAGE_META_NAME);
+
+		// Files excluded if we search with the search engine later
+		HashMap exclusions = new HashMap();	
+		exclusions.put(definition.getDocumentBaseURI(), Boolean.TRUE);		
 		
-		// Grab directly imported components
-		Iterator importsIt = getWSDLFileImports(definition.getEImports()).iterator();
-		while (importsIt.hasNext()) {
-			Import importItem = (Import) importsIt.next();
-			Definition importDefinition = importItem.getEDefinition();
-			List importedComponents = importDefinition.getEMessages();
-			
-			createWSDLComponentObjects(list, importedComponents, IWSDLSearchConstants.MESSAGE_META_NAME);
-		}
+		// Grab directly imported components and update the exclusions 'list'
+		getImportedComponents(list, IWSDLSearchConstants.MESSAGE_META_NAME, exclusions);		
 		
-		if (scope != null) {
-			WSDLComponentFinder finder = new WSDLComponentFinder(IWSDLSearchConstants.MESSAGE_META_NAME);
-			Iterator it = finder.getWorkbenchResourceComponents(scope).iterator();
-			while (it.hasNext()) {
-				list.add(it.next());
-			}
-		}
+		searchOutsideCurrentResource(list, scope, IWSDLSearchConstants.MESSAGE_META_NAME, exclusions);
 	}
+
+	protected List getSearchingComponents(Definition importDefinition) {
+		return importDefinition.getEMessages();
+	}	
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/filter/HttpExtensiblityElementFilter.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/filter/HttpExtensiblityElementFilter.java
index 25142df..c608f66 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/filter/HttpExtensiblityElementFilter.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/filter/HttpExtensiblityElementFilter.java
@@ -21,7 +21,7 @@
 	
   public boolean isValidContext(Element parentElement, String localName)
   {
-  	boolean result = false;
+  	boolean result = true;   
     
     String parentElementName = parentElement.getLocalName();
 	if (parentElementName.equals("binding")) //$NON-NLS-1$
@@ -45,8 +45,7 @@
 	else if (parentElementName.equals("port")) //$NON-NLS-1$
 	{
 	  result = localName.equals("address"); 	   //$NON-NLS-1$
-	}	
-    
+	}	    
     return result;
   }     
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/messages.properties b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/messages.properties
index 15b35c6..c79360d 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/messages.properties
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/messages.properties
@@ -109,3 +109,10 @@
 _WARN_WSI_COMPLIANCE_RPC_ENCODING=WS-I compliance warning: binding should not be rpc encoded
 _ERROR_WSI_COMPLIANCE_RPC_ENCODING=WS-I compliance error: binding cannot be rpc encoded
 _WSI_COMPLIANCE_LINK_TEXT=Modify project compliance setting
+
+_UI_LABEL_UNDEFINED_ARG1={0} undefined
+_UI_LABEL_UNDEFINED_ARG2={0} undefined: '{1}'
+_UI_LABEL_OR_UNDEFINED_ARG2={0} or {1} undefined
+_UI_LABEL_OR_UNDEFINED_ARG3={0} or {1} undefined: '{2}'
+_UI_LABEL_NO_OBJECT_SPECIFIED_ARG1=no {0} specified
+_UI_LABEL_NO_PARAMETERS_SPECIFIED=no parameters specified
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11MessageReferenceSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11MessageReferenceSection.java
index 0ee92e5..3b08b38 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11MessageReferenceSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11MessageReferenceSection.java
@@ -144,6 +144,21 @@
 		return false;
 	}
 	
+	public void handleEvent(Event event)
+	{
+		if (event.widget == combo) {
+			if (isListenerEnabled() && !isInDoHandle) 
+			{
+				isInDoHandle = true;
+				startDelayedEvent(event);
+				isInDoHandle = false;
+			}
+		}
+		else {
+			super.handleEvent(event);
+		}
+	}
+	
 	public void doHandleEvent(Event event)
 	{
 		super.doHandleEvent(event);
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11ParameterSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11ParameterSection.java
index 7422432..8af01ab 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11ParameterSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/properties/sections/W11ParameterSection.java
@@ -114,6 +114,7 @@
 		}
 		
 		super.doHandleEvent(event);
+		refresh();
 	}
 	
 	protected void refreshElementCombo() {
@@ -173,6 +174,8 @@
 	}
 	
 	public void refresh() {
+		setListenerEnabled(false);
+		
 		Object model = getModel();
 		if (model instanceof W11ParameterForPart) {
 			W11ParameterForPart param = (W11ParameterForPart) model;
@@ -201,6 +204,7 @@
 		setControlForegroundColor(typeRadio);
 		
 		super.refresh();
+		setListenerEnabled(true);
 	}
 	
 	protected ComponentReferenceEditManager getElementComponentReferenceEditManager() {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/text/WSDLModelQueryExtension.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/text/WSDLModelQueryExtension.java
index 1f6006c..c92e4c1 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/text/WSDLModelQueryExtension.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/text/WSDLModelQueryExtension.java
@@ -103,6 +103,10 @@
           }
         }
       }
+      else
+      {
+        return super.isApplicableChildElement(parentNode, namespace, name);
+      }
     }
     return result;
   }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/NodeAssociationManager.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/NodeAssociationManager.java
index 4aa1637..01c0513 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/NodeAssociationManager.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/NodeAssociationManager.java
@@ -47,7 +47,14 @@
         
 
   public Object getModelObjectForNode(Object rootObject, Element targetNode)
-  {                                                                       
+  {                                
+    if (targetNode != null && targetNode.getParentNode() == null)
+    {
+      // The element was already removed from the DOM, common scenario during undo.
+      // The parent element's reconciliation will take care of reconciling it.
+      return null;
+    }
+    
     int currentIndex = 0;
 
     Element[] elementChain = getParentElementChain((Element)targetNode);
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/W11OpenExternalEditorHelper.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/W11OpenExternalEditorHelper.java
index 2834750..4ee22f8 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/W11OpenExternalEditorHelper.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/W11OpenExternalEditorHelper.java
@@ -149,7 +149,8 @@
 	
 	protected Object getModelToOpenOn(Object object) {
 		if (object instanceof XSDElementDeclaration) {
-			return ((XSDElementDeclaration) object).getTypeDefinition();
+			XSDElementDeclaration xsdElement = ((XSDElementDeclaration) object).getResolvedElementDeclaration();
+			return xsdElement.getTypeDefinition();
 		}
 		else if (object instanceof Part) {
 			Object elementOrType = ((Part) object).getElementDeclaration();
@@ -171,4 +172,29 @@
 		// Should there be a better test for this?  The IFiles are different so we can't use file == wsdlFile.
 		return file.getFullPath().equals(wsdlFile.getFullPath());
 	}
+	
+	public boolean isValid() {
+		if (object instanceof WSDLBaseAdapter) {
+			Object notifier = ((WSDLBaseAdapter) object).getTarget();
+			Object openOnModel = getModelToOpenOn(notifier);
+
+			// We check to ensure it's element != null.  If it does, then it's a sign of a
+			// bad reference (is invalid).
+			if (openOnModel instanceof XSDConcreteComponent && ((XSDConcreteComponent) openOnModel).getElement() != null) {
+				XSDConcreteComponent xsdComponent = (XSDConcreteComponent) openOnModel;
+
+				XSDSchema schema = getSchema(xsdComponent);
+				if (schema != null) {
+					String schemaLocation = URIHelper.removePlatformResourceProtocol(schema.getSchemaLocation());
+					IPath schemaPath = new Path(schemaLocation);
+					IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(schemaPath);
+					if (file != null && file.exists()) {
+						return true;
+					}
+				}
+			}
+		}
+
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/XSDComponentHelper.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/XSDComponentHelper.java
index f0bd784..a1f94d1 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/XSDComponentHelper.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/util/XSDComponentHelper.java
@@ -254,7 +254,8 @@
 				Object eeElement = eeIt.next();
 				if (eeElement instanceof XSDSchemaExtensibilityElement) {
 					XSDSchemaExtensibilityElement ee = (XSDSchemaExtensibilityElement) eeElement;
-					if (ee.getSchema().getTargetNamespace().equals(wsdlTargetNamespace)) {
+					if (ee.getSchema().getTargetNamespace() != null &&
+						ee.getSchema().getTargetNamespace().equals(wsdlTargetNamespace)) {
 						schema = ee.getSchema();
 						break;
 					}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/visitor/WSDLVisitorForParameters.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/visitor/WSDLVisitorForParameters.java
index a354538..6c4410b 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/visitor/WSDLVisitorForParameters.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/visitor/WSDLVisitorForParameters.java
@@ -63,7 +63,7 @@
         {
           concreteComponents.add(ed);
         }
-        else
+        else if (td instanceof XSDComplexTypeDefinition)
         {
           // we're dealing with an anonymous locally defined type
           // se we need to visit it's children
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/wizards/WSDLNewFileOptionsPage.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/wizards/WSDLNewFileOptionsPage.java
index 12ec224..4a6365b 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/wizards/WSDLNewFileOptionsPage.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/wizards/WSDLNewFileOptionsPage.java
@@ -244,8 +244,8 @@
 //   BindingProtocolComponentControl component = new BindingProtocolComponentControl(base, generator, false);
 //   component.initFields();
    
-   PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ASDEditorCSHelpIds.WSDL_WIZARD_OPTIONS_PAGE);
-   
+   PlatformUI.getWorkbench().getHelpSystem().setHelp(base, ASDEditorCSHelpIds.WSDL_WIZARD_OPTIONS_PAGE);
+
     setControl(base);
     
   }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/ASDMultiPageEditor.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/ASDMultiPageEditor.java
index 411e0c4..a4227af 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/ASDMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/ASDMultiPageEditor.java
@@ -29,6 +29,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.asd.actions.ASDAddBindingAction;
@@ -149,6 +150,8 @@
     setActivePage(getDefaultPageTypeIndex());
     
     getSelectionManager().setSelection(new StructuredSelection(getModel()));
+    
+    PlatformUI.getWorkbench().getHelpSystem().setHelp(graphicalViewer.getControl(), ASDEditorCSHelpIds.WSDL_DESIGN_VIEW);
   }
   
   protected int getDefaultPageTypeIndex() {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDAddParameterAction.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDAddParameterAction.java
index e782e18..5722bce 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDAddParameterAction.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDAddParameterAction.java
@@ -46,6 +46,11 @@
                 Command command = w11MessageReference.getAddParamterCommand();
                 CommandStack stack = (CommandStack) ASDEditorPlugin.getActiveEditor().getAdapter(CommandStack.class);
                 stack.execute(command);
+                
+			    if (command instanceof IASDAddCommand) {
+			    	Object object = ((IASDAddCommand) command).getNewlyAddedComponent();
+			    	selectAndDirectEdit(object);
+			    }
             }
         }  
     }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDDeleteAction.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDDeleteAction.java
index 104bf06..21c4573 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDDeleteAction.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/actions/ASDDeleteAction.java
@@ -15,6 +15,8 @@
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.commands.CommandStack;
 import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.wst.wsdl.WSDLElement;
+import org.eclipse.wst.wsdl.ui.internal.adapters.WSDLBaseAdapter;
 import org.eclipse.wst.wsdl.ui.internal.adapters.basic.W11Type;
 import org.eclipse.wst.wsdl.ui.internal.asd.ASDEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.asd.Messages;
@@ -79,6 +81,13 @@
 			if (command != null) {
 			    CommandStack stack = (CommandStack) ASDEditorPlugin.getActiveEditor().getAdapter(CommandStack.class);
 			    stack.execute(command);
+
+			    if (object instanceof WSDLBaseAdapter) {
+			    	Object target = ((WSDLBaseAdapter) object).getTarget();
+			    	if (target instanceof WSDLElement) {
+			    		performSelection(((WSDLElement) target).getEnclosingDefinition());
+			    	}
+			    }
 			}
 		}  
 	}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
index 16907f1..2196404 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
@@ -12,6 +12,7 @@
 
 import java.util.Iterator;
 import java.util.List;
+
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.IFigure;
@@ -20,13 +21,10 @@
 import org.eclipse.draw2d.RectangleFigure;
 import org.eclipse.draw2d.ToolbarLayout;
 import org.eclipse.draw2d.geometry.Dimension;
-import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.EditPart;
-import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.DesignViewGraphicsConstants;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.BoxComponentFigure;
-import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.LinkIconFigure;
+//import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.BaseLinkIconFigure;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.layouts.RowLayout;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IInterface;
 
@@ -44,86 +42,74 @@
   
   protected IFigure createFigure()
   {
-	IFigure outer = new Figure();
-	outer.setLayoutManager(new ToolbarLayout(true));
-    boxFigure = (BoxComponentFigure)super.createFigure();
-    boxFigure.getLabel().setIcon(((IInterface) getModel()).getImage());
-    boxFigure.setBackgroundColor(ColorConstants.orange);
-    boxFigure.setBorder(new LineBorder(1));
-    ToolbarLayout toolbarLayout = new ToolbarLayout(false);
-    toolbarLayout.setStretchMinorAxis(true);
-    boxFigure.setLayoutManager(toolbarLayout);
-    outer.add(boxFigure);
-    linkIconColumn = new RectangleFigure();
-    linkIconColumn.setOutline(false);
-    linkIconColumn.setLayoutManager(new ToolbarLayout() {
-		public void layout(IFigure parent) {
-			super.layout(parent);
-			
-			// We need to layout on the y-axis
-			Iterator children = parent.getChildren().iterator();
-			while (children.hasNext()) {
-				Object item = children.next();
-				if (item instanceof LinkIconFigure) {
-					LinkIconFigure linkFigure = (LinkIconFigure) item;
-					AbstractGraphicalEditPart ep = linkFigure.getAssociatedEditPart();
-					IFigure associatedFigure = ep.getFigure();
-					if (associatedFigure != null) {
-						// Update the bounds
-						Rectangle associatedBounds = associatedFigure.getBounds();
-						Rectangle linkFigureBounds = linkFigure.getBounds();
-						if (linkFigureBounds.y == associatedBounds.y) {
-							break;
-						}
-						
-						linkFigure.setFigureLocation(new Point(associatedBounds.x, associatedBounds.y));
+		IFigure outer = new Figure() {
+			public void validate() {
+				super.validate();
+				// If we don't layout our Link Icon Column at this point, the link icons
+				// will not be properly updated in the scenario where a porttype is added
+				// or removed.  The link icons of the existing porttypes will not be updated.
+				getLinkIconColumn().getLayoutManager().layout(getLinkIconColumn());
+			}
+		};
+		
+		outer.setLayoutManager(new ToolbarLayout(true));
+	    boxFigure = (BoxComponentFigure) super.createFigure();
+	    boxFigure.getLabel().setIcon(((IInterface) getModel()).getImage());
+	    boxFigure.setBackgroundColor(ColorConstants.orange);
+	    boxFigure.setBorder(new LineBorder(1));
+	    ToolbarLayout toolbarLayout = new ToolbarLayout(false);
+	    toolbarLayout.setStretchMinorAxis(true);
+	    boxFigure.setLayoutManager(toolbarLayout);
+	    outer.add(boxFigure);
+	    linkIconColumn = new RectangleFigure();
+	    linkIconColumn.setOutline(false);
+	    linkIconColumn.setLayoutManager(new ToolbarLayout() {
+			public void layout(IFigure parent) {
+				super.layout(parent);
+				
+				// We need to layout on the y-axis
+				Iterator children = parent.getChildren().iterator();
+				while (children.hasNext()) {
+					Object item = children.next();
+					if (item instanceof IFigure) {
+						IFigure figure = (IFigure) item;
+						figure.getLayoutManager().layout(figure);
 					}
 				}
 			}
-		}
-		
-		protected Dimension calculatePreferredSize(IFigure container, int wHint, int hHint) {
-			Dimension dimension = super.calculatePreferredSize(container, wHint, hHint);
 			
-			// Calculate the height
-			Iterator it = getFigure().getChildren().iterator();
-			while (it.hasNext()) {
-				Object item = it.next();
-				if (item instanceof BoxComponentFigure) {
-					dimension.height = ((IFigure) item).getPreferredSize().height;
-					break;
+			protected Dimension calculatePreferredSize(IFigure container, int wHint, int hHint) {
+				Dimension dimension = super.calculatePreferredSize(container, wHint, hHint);
+				
+				// Calculate the height
+				Iterator it = container.getParent().getChildren().iterator();
+				while (it.hasNext()) {
+					Object item = it.next();
+					if (item instanceof BoxComponentFigure) {
+						dimension.height = ((IFigure) item).getPreferredSize().height;
+						break;
+					}
 				}
-			}
 
-			// Calculate the width
-			it = container.getChildren().iterator();
-			while (it.hasNext()) {
-				Object item = it.next();
-				if (item instanceof LinkIconFigure) {
-					dimension.width = dimension.width + ((LinkIconFigure) item).horizontalBuffer;					
-					break;
-				}
+				return dimension;
 			}
-
-			return dimension;
-		}
-    });
-    
-    outer.add(linkIconColumn);
-    
-    // rmah: The block of code below has been moved from refreshVisuals().  We're
-    // assuming the read-only state of the EditPart will never change once the
-    // EditPart has been created.
-    if (isReadOnly()) 
-    {
-    	figure.getLabel().setForegroundColor(DesignViewGraphicsConstants.readOnlyLabelColor);
-    }
-    else
-    {
-    	figure.getLabel().setForegroundColor(ColorConstants.black);
-    }
-    
-    return outer;
+	    });
+	    
+	    outer.add(linkIconColumn);
+	    
+	    // rmah: The block of code below has been moved from refreshVisuals().  We're
+	    // assuming the read-only state of the EditPart will never change once the
+	    // EditPart has been created.
+	    if (isReadOnly()) 
+	    {
+	    	figure.getLabel().setForegroundColor(DesignViewGraphicsConstants.readOnlyLabelColor);
+	    }
+	    else
+	    {
+	    	figure.getLabel().setForegroundColor(ColorConstants.black);
+	    }
+	    
+	    return outer;
   }
   
   public static void attachToInterfaceEditPart(EditPart editPart, RowLayout rowLayout)
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java
index 336974a..b1339af 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.asd.design.editparts;
 
+import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.IFigure;
@@ -18,16 +20,19 @@
 import org.eclipse.draw2d.MarginBorder;
 import org.eclipse.draw2d.PositionConstants;
 import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Point;
 import org.eclipse.gef.DragTracker;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.GraphicalEditPart;
 import org.eclipse.gef.Request;
+import org.eclipse.wst.wsdl.ui.internal.adapters.basic.W11MessageReference;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.DesignViewGraphicsConstants;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.editpolicies.ASDDragAndDropEditPolicy;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.editpolicies.ASDGraphNodeDragTracker;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.editpolicies.ASDSelectionEditPolicy;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ListFigure;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ModelDiagnosticInfo;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.layouts.RowLayout;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IMessageReference;
 
@@ -37,6 +42,9 @@
   protected Label label;
   protected RowLayout rowLayout;
   
+  private Figure messageLabelWrapper;
+  private Label messageLabel;
+  
   protected ASDSelectionEditPolicy selectionHandlesEditPolicy = new ASDSelectionEditPolicy();
   
   protected IFigure createFigure()
@@ -131,7 +139,6 @@
   protected void refreshVisuals()
   {   
     super.refreshVisuals();
-    
     IMessageReference message = (IMessageReference)getModel();    
     label.setText(message.getText());
     label.setIcon(message.getImage()); 
@@ -147,6 +154,100 @@
       }
     }
   }
+  
+  protected void refreshChildren() {
+	  super.refreshChildren();
+      refreshMessage();
+  }
+  
+  protected void refreshMessage() {
+	  if (getModelChildren().size() > 0) {
+		  if (messageLabelWrapper != null) {
+			  contentPane.remove(messageLabelWrapper);
+			  messageLabelWrapper = null;
+		  }
+	  }
+	  else {
+		  if (messageLabelWrapper == null) {
+			  messageLabelWrapper = new Figure();
+			  messageLabel = new Label();
+			  
+			  ToolbarLayout toolbarLayout = new ToolbarLayout(false)
+			    {
+				  // We want to center the text
+			       public void layout(IFigure parent)
+			       {
+			         super.layout(parent);
+
+			         if (parent.getChildren().size() == 1 && parent.getChildren().get(0) instanceof Label)
+			         {
+			            parent.setSize(parent.getSize().width, parent.getSize().height + 3);
+			            Label child = (Label) parent.getChildren().get(0);
+			            int newXAmount = (parent.getSize().width - child.getSize().width) / 2;
+			            Point p = child.getLocation();
+			            child.setLocation(new Point(p.x + newXAmount, p.y + 3));
+			         }  
+			       }
+			    };     
+
+			  messageLabelWrapper.setLayoutManager(toolbarLayout);
+			  messageLabelWrapper.add(messageLabel);
+			  contentPane.add(messageLabelWrapper);
+		  }
+		  
+		  List errorList = getErrors();
+		  List warnList = getWarnings();
+
+		  if (errorList.size() > 0) {
+			  ModelDiagnosticInfo info = (ModelDiagnosticInfo) errorList.get(0);
+			  messageLabel.setText("  " + info.getDescriptionText() + "  "); 
+			  messageLabel.setForegroundColor(info.getDescriptionTextColor());
+		  }
+		  else if (warnList.size() > 0){
+			  ModelDiagnosticInfo info = (ModelDiagnosticInfo) warnList.get(0);
+			  messageLabel.setText("  " + info.getDescriptionText() + "  "); 
+			  messageLabel.setForegroundColor(info.getDescriptionTextColor());
+		  }
+		  else {
+			  messageLabel.setText("");
+			  messageLabel.setForegroundColor(ColorConstants.black);
+		  }
+	  }
+  }
+  
+  protected List getErrors() {
+	  // TODO: rmah: We should not know about W11MessageReference here.  Modify
+	  // MessageReference post WTP 1.5 to include the getDiagnosticMessages() method.
+	  if (getModel() instanceof W11MessageReference) {
+		  W11MessageReference messageRef = (W11MessageReference) getModel();
+		  return getDiagnosticMessageType(messageRef.getDiagnosticMessages(), ModelDiagnosticInfo.ERROR_TYPE);
+	  }
+	  
+	  return new ArrayList();
+  }
+  
+  protected List getWarnings() {
+	  // TODO: rmah: We should not know about W11MessageReference here.  Modify
+	  // MessageReference post WTP 1.5 to include the getDiagnosticMessages() method.
+	  if (getModel() instanceof W11MessageReference) {
+		  W11MessageReference messageRef = (W11MessageReference) getModel();
+		  return getDiagnosticMessageType(messageRef.getDiagnosticMessages(), ModelDiagnosticInfo.WARNING_TYPE);
+	  }
+	  
+	  return new ArrayList();
+  }
+  
+  protected List getDiagnosticMessageType(List diagnosticInfo, int type) {
+	  List listType = new ArrayList();
+	  for (int index = 0; index < diagnosticInfo.size(); index++) {
+		  ModelDiagnosticInfo info = (ModelDiagnosticInfo) diagnosticInfo.get(index);
+		  if (info.getType() == type) {
+			  listType.add(info);
+		  }
+	  }
+	  
+	  return listType;
+  }
 
   protected List getModelChildren()
   {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java
index a9e0f1e..ab6bff4 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java
@@ -133,7 +133,7 @@
   private DirectEditManager manager;
   
   public void performDirectEdit(Point cursorLocation){
-	  if (!isReadOnly() && (cursorLocation == null || hitTest(getFigure().getBounds(), cursorLocation))) {
+	  if (!isReadOnly() && (cursorLocation == null || hitTest(getLabelFigure().getBounds(), cursorLocation))) {
 		manager = new LabelEditManager(this, new LabelCellEditorLocator(this, cursorLocation));
 		manager.show();
 	  }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
index 09197d7..50ec186 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.asd.design.editparts;
 
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.Figure;
@@ -38,10 +40,12 @@
 import org.eclipse.wst.wsdl.ui.internal.asd.design.DesignViewGraphicsConstants;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.directedit.TypeReferenceDirectEditManager;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.editpolicies.ASDSelectionEditPolicy;
-import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.LinkIconFigure;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.BaseLinkIconFigure;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ModelDiagnosticInfo;
 import org.eclipse.wst.wsdl.ui.internal.asd.design.layouts.RowLayout;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter;
 import org.eclipse.wst.wsdl.ui.internal.asd.util.IOpenExternalEditorHelper;
+import org.eclipse.wst.wsdl.ui.internal.util.W11OpenExternalEditorHelper;
 
 import org.eclipse.draw2d.MouseMotionListener.Stub;
 
@@ -58,7 +62,7 @@
 	  }
 	  
 	protected MyMouseEventListener mouseEventListener;
-	private LinkIconFigure linkIconFigure;
+	private BaseLinkIconFigure linkIconFigure;
 
 	protected IFigure createFigure()
 	{
@@ -101,7 +105,33 @@
 			if (image != null)
 			{
 				parameterType.setIcon(image);
-			}            
+			}
+
+			parameterType.setForegroundColor(ColorConstants.black);
+
+			List diagnosticMessages = new ArrayList(); 
+			// TODO: rmah: We should not know about W11ParameterForPart here.  Modify
+			// IParameter post WTP 1.5 to include the getDiagnosticMessages() method.
+			if (getModel() instanceof W11ParameterForPart) {
+				W11ParameterForPart paramForPart = (W11ParameterForPart) getModel();
+				diagnosticMessages = paramForPart.getDiagnosticMessages();
+			}
+
+			Iterator it = diagnosticMessages.iterator();
+			ModelDiagnosticInfo errorInfo = null;
+			while (it.hasNext() && errorInfo == null) {
+				ModelDiagnosticInfo temp = (ModelDiagnosticInfo) it.next();
+				if (temp.getType() == ModelDiagnosticInfo.ERROR_TYPE) {
+					errorInfo = temp;
+					break;
+				}
+			}
+
+			if (errorInfo != null) {
+				parameterType.setText(errorInfo.getDescriptionText());
+				parameterType.setForegroundColor(errorInfo.getDescriptionTextColor());
+				parameterType.setIcon(null);
+			}
 		}
 
 		// Force the LinkIconColumn to resize and relayout itself.
@@ -255,13 +285,11 @@
 
 	// Methods below handle the Link Figure.....
 	private void emphasizeLinkFigure() {
-		linkIconFigure.setForegroundColor(ColorConstants.blue);
-		linkIconFigure.setBackgroundColor(ColorConstants.blue);
+		linkIconFigure.setColor(ColorConstants.blue);
 	}
 
 	private void unemphasizeLinkFigure() {
-		linkIconFigure.setForegroundColor(ColorConstants.lightGray);
-		linkIconFigure.setBackgroundColor(ColorConstants.lightGray);
+		linkIconFigure.setColor(ColorConstants.lightGray);
 	}
 
 	private boolean pointerInRange(Rectangle figBounds, Point pointer) {
@@ -269,7 +297,7 @@
 
 		int entireX = figBounds.x;
 		int entireY = figBounds.y;
-		int entireWidth = figBounds.width + linkBounds.width + linkIconFigure.horizontalBuffer;
+		int entireWidth = figBounds.width + linkBounds.width;
 		int entireHeight = figBounds.height;
 		Rectangle entireBounds = new Rectangle(entireX, entireY, entireWidth, entireHeight);
 
@@ -315,19 +343,31 @@
 
 	private void refreshLinkFigure(Point point) {
 		Rectangle figBounds = getFigure().getParent().getParent().getBounds();
-		if (getExternalEditorOpener() != null) {
-			if (getExternalEditorOpener().linkApplicable()) {
+		// TODO: rmah:  We should not know about W11OpenExternalEditorHelper here.  Post WTP 1.5, we should add the
+		// isValid() method to interface IOpenExternalEditorHelper.java
+		if (getExternalEditorOpener() instanceof W11OpenExternalEditorHelper) {
+			W11OpenExternalEditorHelper openHelper = (W11OpenExternalEditorHelper) getExternalEditorOpener();
+
+			if (openHelper.linkApplicable()) {
 				if (!figureContainsLinkFigure(getInterfaceEditPart().getLinkIconColumn())) {
-					linkIconFigure = new LinkIconFigure(this);
+					linkIconFigure = new BaseLinkIconFigure(this);
 					getInterfaceEditPart().getLinkIconColumn().add(linkIconFigure);
 				}
-
-				if (pointerInRange(figBounds, point)) {
-					emphasizeLinkFigure();
+				
+				if (openHelper.isValid()) {
+					linkIconFigure.setLinkIconStyle(BaseLinkIconFigure.VALID_SCHEMA_LINK_STYLE);
+					
+					if (pointerInRange(figBounds, point)) {
+						emphasizeLinkFigure();
+					}
+					else {
+						unemphasizeLinkFigure();
+					}
 				}
 				else {
-					unemphasizeLinkFigure();
+					linkIconFigure.setLinkIconStyle(BaseLinkIconFigure.INVALID_SCHEMA_LINK_STYLE);
 				}
+					
 			}
 			else {
 				if (containsLinkFigure()) {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/BaseLinkIconFigure.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/BaseLinkIconFigure.java
new file mode 100644
index 0000000..2491215
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/BaseLinkIconFigure.java
@@ -0,0 +1,216 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.wsdl.ui.internal.asd.design.figures;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.swt.graphics.Color;
+
+public class BaseLinkIconFigure extends Figure {
+	public static int VALID_SCHEMA_LINK_STYLE = 1;
+	public static int INVALID_SCHEMA_LINK_STYLE = 2;
+
+	private int linkIconStyle = VALID_SCHEMA_LINK_STYLE;	
+	private AbstractGraphicalEditPart editPart;
+	private List childFigures = new ArrayList();
+	public int figureSpacing = 7;
+
+	public BaseLinkIconFigure(AbstractGraphicalEditPart ep) {
+		editPart = ep;
+
+		ToolbarLayout layout = new ToolbarLayout(true) {
+			public void layout(IFigure parent) {
+				super.layout(parent);
+
+				AbstractGraphicalEditPart ep = getAssociatedEditPart();
+				IFigure associatedFigure = ep.getFigure();
+				if (associatedFigure != null) {
+					// Update the bounds
+					Rectangle associatedBounds = associatedFigure.getBounds();
+					int x = associatedBounds.x + associatedBounds.width;
+					int y = associatedBounds.y;
+					int width = getSize().width;
+					int height = associatedBounds.height;
+
+					Rectangle newFigBounds = new Rectangle(x, y, width, height);
+					// Set my bounds based on my associated editpart
+					setBounds(newFigBounds);
+
+					// Layout the children
+					Iterator it = parent.getChildren().iterator();
+					while (it.hasNext()) {
+						IFigure fig = (IFigure) it.next();
+						Point newPoint = new Point(x, y);
+
+						// Indent the figure to the right to show the "broken" schema link figure
+						if (fig instanceof RightInvalidIconFigure) {
+							newPoint.x = newPoint.x + figureSpacing;
+						}
+
+						fig.setLocation(newPoint);
+					}
+				}
+			}
+		};
+		setLayoutManager(layout);
+
+		// Default to a ValidLinkIconFigure
+		linkIconStyle = VALID_SCHEMA_LINK_STYLE;
+		addChildFigure(new ValidLinkIconFigure());
+	}
+
+	private void removeChildFigures() {
+		Iterator it = childFigures.iterator();
+		while (it.hasNext()) {
+			remove((IFigure) it.next());
+		}
+
+		childFigures.clear();
+	}
+
+	private void addChildFigure(IFigure fig) {
+		childFigures.add(fig);
+		add(fig);
+	}
+
+	public void setLinkIconStyle(int style) {
+		if (style == VALID_SCHEMA_LINK_STYLE && linkIconStyle != VALID_SCHEMA_LINK_STYLE) {
+			removeChildFigures();
+			addChildFigure(new ValidLinkIconFigure());
+		}
+		else if (style == INVALID_SCHEMA_LINK_STYLE && linkIconStyle != INVALID_SCHEMA_LINK_STYLE) {
+			removeChildFigures();
+			addChildFigure(new LeftInvalidIconFigure());
+			addChildFigure(new RightInvalidIconFigure());
+		}
+
+		linkIconStyle = style;
+	}
+
+	public int getLinkIconStyle() {
+		return linkIconStyle;
+	}
+
+	public void setColor(Color color) {
+		Iterator it = childFigures.iterator();
+		while (it.hasNext()) {
+			IFigure fig = (IFigure) it.next();
+			fig.setBackgroundColor(color);
+			fig.setForegroundColor(color);
+		}
+	}
+
+	public AbstractGraphicalEditPart getAssociatedEditPart() {
+		return editPart;
+	}
+
+	private class LeftInvalidIconFigure extends LinkIconFigure {
+		public LeftInvalidIconFigure() {
+			super(null);
+			PointList points = new PointList();
+			
+			// Draw the arrow
+			points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 5, 4 + verticalBuffer));
+
+			points.addPoint(new Point(horizontalBuffer + 7, 0 + verticalBuffer));	// top slash
+			points.addPoint(new Point(horizontalBuffer + 5, 4 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 2, 10 + verticalBuffer));	// bottom slash
+
+			points.addPoint(new Point(horizontalBuffer + 4, 6 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 0, 6 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
+
+			setForegroundColor(ColorConstants.lightGray);
+			setBackgroundColor(ColorConstants.lightGray);
+			setFill(true);
+			setPoints(points);
+		}
+
+		// We increase the size of the width because we indent the figure towards the right.
+		// So we indent by that same amount stored in horizontalBuffer
+		public Dimension getPreferredSize(int wHint, int hHint) {
+			Dimension dimension = super.getPreferredSize(wHint, hHint);
+			dimension.width = dimension.width + horizontalBuffer;
+
+			return dimension;
+		}
+
+		public void setLocation(Point point) {
+			super.setLocation(point);
+			// Update the points with the following method call
+			setFigureLocation(point);
+		}
+	}
+
+	private class RightInvalidIconFigure extends LinkIconFigure {
+		public RightInvalidIconFigure() {
+			super(null);
+			PointList points = new PointList();
+
+			points.addPoint(new Point(horizontalBuffer + 5, 4 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 7, 0 + verticalBuffer));	// top slash
+			points.addPoint(new Point(horizontalBuffer + 5, 4 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 10, 4 + verticalBuffer));
+
+			points.addPoint(new Point(horizontalBuffer + 10, 0 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 15, 5 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 10, 10 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 10, 6 + verticalBuffer));
+
+			points.addPoint(new Point(horizontalBuffer + 4, 6 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 2, 10 + verticalBuffer));	// bottom slash
+			points.addPoint(new Point(horizontalBuffer + 5, 4 + verticalBuffer));
+
+			setForegroundColor(ColorConstants.lightGray);
+			setBackgroundColor(ColorConstants.lightGray);
+			setFill(true);
+			setPoints(points);
+		}
+
+		public void setLocation(Point point) {
+			super.setLocation(point);
+			setFigureLocation(point);
+		}
+	}
+
+	private class ValidLinkIconFigure extends LeftInvalidIconFigure {
+		public ValidLinkIconFigure() {
+			PointList points = new PointList();
+
+			// Draw the arrow
+			points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 15, 4 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 15, 0 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 20, 5 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 15, 10 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 15, 6 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 0, 6 + verticalBuffer));
+			points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
+
+			setForegroundColor(ColorConstants.lightGray);
+			setBackgroundColor(ColorConstants.lightGray);
+			setFill(true);
+			setPoints(points);
+		}
+	}
+}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/ModelDiagnosticInfo.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/ModelDiagnosticInfo.java
new file mode 100644
index 0000000..2a60e23
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/ModelDiagnosticInfo.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.wsdl.ui.internal.asd.design.figures;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.swt.graphics.Color;
+
+/*
+ * A ModelDiagnosticInfo object contains "additional" information about a model object.
+ * It is passed from a model (facade) object to an EditPart.  The EditPart uses the ModelDiagnosticInfo
+ * object to display any additional information necessary (for example, an error message when the model
+ * object is in some way invalid.
+ */
+public class ModelDiagnosticInfo {
+	public static int INFORMATIONAL_TYPE = 0;
+	public static int ERROR_TYPE = 1;
+	public static int WARNING_TYPE = 2;
+	
+	private int type = 1;
+	private String text = "";
+	private Color textColor;
+	
+	public ModelDiagnosticInfo(String txt, int infoType, Color color) {
+		text = txt;
+		type = infoType;
+		textColor = color;
+	}
+	
+	public void setDescriptionText(String txt) {
+		text = txt;
+	}
+	
+	public void setDescriptionTextColor(Color color) {
+		textColor = color;
+	}
+	
+	public void setType(int infoType) {
+		type = infoType;
+	}
+	
+	public String getDescriptionText() {
+		return text;
+	}
+	
+	public int getType() {
+		return type;
+	}
+	
+	public Color getDescriptionTextColor() {
+		if (textColor != null) {
+			return textColor;
+		}
+		
+		if (type == ERROR_TYPE) {
+			return ColorConstants.red;
+		}
+		else if (type == WARNING_TYPE) {
+			return ColorConstants.lightGray;
+		}
+		
+		return ColorConstants.black;
+	}
+}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/outline/ASDContentOutlinePage.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/outline/ASDContentOutlinePage.java
index 9cc7d94..91dfab8 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/outline/ASDContentOutlinePage.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/outline/ASDContentOutlinePage.java
@@ -21,7 +21,9 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.wst.wsdl.ui.internal.asd.ASDEditorCSHelpIds;
 import org.eclipse.wst.wsdl.ui.internal.asd.ASDMultiPageEditor;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IDescription;
 
@@ -68,6 +70,7 @@
 		menuManager.addMenuListener(menuListener);
 		
 	    getSite().registerContextMenu("org.eclipse.wst.wsdl.wsdleditor", menuManager, wsdlEditor.getSelectionManager()); //$NON-NLS-1$
+		  PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),ASDEditorCSHelpIds.WSDL_OUTLINE_VIEW); 
 	}
 	
 	protected boolean processingSelectionChange = false;
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ASDAbstractSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ASDAbstractSection.java
index 7f7e11d..7ebc009 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ASDAbstractSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ASDAbstractSection.java
@@ -342,7 +342,7 @@
       }
     }
 	
-	boolean isInDoHandle;
+	protected boolean isInDoHandle;
 	/**
 	 * Get the value of isInDoHandle.
 	 * @return value of isInDoHandle.
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/EndPointSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/EndPointSection.java
index fee7e3f..b88d8ed 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/EndPointSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/EndPointSection.java
@@ -208,6 +208,10 @@
 			  newAddress = ""; //$NON-NLS-1$
 		  }
 		  
+		  String oldAddress = getOldAddress();
+		  if (oldAddress.equals(newAddress))
+			  return;
+		  
 		  IEndPoint endPoint = (IEndPoint) getModel();
 		  Command command = endPoint.getSetAddressCommand(newAddress);
 		  executeCommand(command);
@@ -216,4 +220,16 @@
 		  super.doHandleEvent(event);
 	  }
   }
+
+  private String getOldAddress() {
+	  String value = null;
+	  if (getModel() instanceof W11EndPoint) {
+		  value = ((W11EndPoint) getModel()).getAddress();
+	  }
+
+	  if (value == null) {
+		  value = ""; //$NON-NLS-1$
+	  }
+	  return value;
+  }
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ImportSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ImportSection.java
index 5a5661a..fef304f 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ImportSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ImportSection.java
@@ -181,6 +181,9 @@
 	public void doHandleEvent(Event event) {
 		// TODO: We have some WSDL11 Impl specific knowledge below... We should try to remove this...
 		if (event.widget == prefixText && locationText.getText().length() > 0 && namespaceText.getText().length() > 0 && getModel() instanceof W11Import) {
+			if (oldPrefixValue.equals(prefixText.getText()))
+			  return;
+			
 			W11Import w11Import = (W11Import) getModel();
 			Import importObj = (Import) w11Import.getTarget();
 //			org.w3c.dom.Element importElement = WSDLEditorUtil.getInstance().getElementForObject(importObj);
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NameSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NameSection.java
index 15d2161..ffaa41f 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NameSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NameSection.java
@@ -171,8 +171,10 @@
 			}
 			
 			if (namedObject != null) {
-				Command command = namedObject.getSetNameCommand(newValue);
-				executeCommand(command);
+				if ( !newValue.equals( namedObject.getName() ) ){
+				  Command command = namedObject.getSetNameCommand(newValue);
+				  executeCommand(command);
+				}
 			}
 		}
 	}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NamespaceSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NamespaceSection.java
index 030d9f1..2fcc05c 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NamespaceSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/NamespaceSection.java
@@ -150,16 +150,29 @@
 			IDescription description = (IDescription) obj;
 
 			if (event.widget == nameText) {
-				Command command = description.getSetNameCommand(nameText.getText());
-				executeCommand(command);
+				String newName = nameText.getText();
+				if (!newName.equals(description.getName())) {
+					Command command = description.getSetNameCommand(newName);
+					executeCommand(command);
+				}
 			}
 			else if (event.widget == prefixText || event.widget == targetNamespaceText) {
-				// TODO: The code below is not generic.  We need to revisit this to ensure it is
-				// generic.  IDescription needs a getNamespacesInfo() and getEditNamespacesCommand()...
-				W11EditNamespacesCommand command = (W11EditNamespacesCommand) ((W11Description) description).getEditNamespacesCommand();
-				command.setTargetNamespace(targetNamespaceText.getText());
-				command.setTargetNamespacePrefix(prefixText.getText());
-				executeCommand(command);
+				String newTargetNS = targetNamespaceText.getText();				
+				String newPrefix = prefixText.getText();
+				
+				boolean targetNSdiff = !newTargetNS.equals(description.getTargetNamespace());
+				boolean prefixDiff = !newPrefix.equals(description.getTargetNamespacePrefix());
+				if (targetNSdiff || prefixDiff ) {
+					// TODO: The code below is not generic.  We need to revisit this to ensure it is
+					// generic.  IDescription needs a getNamespacesInfo() and getEditNamespacesCommand()...
+					W11EditNamespacesCommand command = 
+						(W11EditNamespacesCommand) ((W11Description) description).getEditNamespacesCommand();
+					if (targetNSdiff)
+					  command.setTargetNamespace(newTargetNS);
+					if (prefixDiff)
+					  command.setTargetNamespacePrefix(newPrefix);
+					executeCommand(command);
+				}
 			}
 		}
 
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ParameterSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ParameterSection.java
index 69a6297..77384c0 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ParameterSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ParameterSection.java
@@ -86,6 +86,8 @@
 			return;
 		}
 		
+		setListenerEnabled(false);
+		
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(combo, ASDEditorCSHelpIds.PROPERTIES_PART_ELEMENT_COMBO);
 
 		if (handleTypeScenario) {
@@ -94,6 +96,8 @@
 		}
 		
 		setControlForegroundColor(combo);
+		
+		setListenerEnabled(true);
 	}
 	
 	protected void refreshCombo() {
@@ -159,11 +163,27 @@
 		return false;
 	}
 	
+	public void handleEvent(Event event)
+	{
+		if (event.widget == combo) {
+			if (isListenerEnabled() && !isInDoHandle) 
+			{
+				isInDoHandle = true;
+				startDelayedEvent(event);
+				isInDoHandle = false;
+			}
+		}
+		else {
+			super.handleEvent(event);
+		}
+	}
+	
 	public void doHandleEvent(Event event)
 	{
 		super.doHandleEvent(event);
 		if (event.widget == combo && handleTypeScenario) {
 			handleComboSelection();
+			refresh();
 		}
 	}
 	
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ReferenceSection.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ReferenceSection.java
index 5b0594e..1722ddf 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ReferenceSection.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/properties/sections/ReferenceSection.java
@@ -61,6 +61,21 @@
 		
 		combo.addListener(SWT.Modify, this);
 	}
+	
+	public void handleEvent(Event event)
+	{
+		if (event.widget == combo) {
+			if (isListenerEnabled() && !isInDoHandle) 
+			{
+				isInDoHandle = true;
+				startDelayedEvent(event);
+				isInDoHandle = false;
+			}
+		}
+		else {
+			super.handleEvent(event);
+		}
+	}
 
 	/*
 	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.view.ITabbedPropertySection#refresh()
diff --git a/bundles/org.eclipse.wst.wsdl.validation/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.wsdl.validation/META-INF/MANIFEST.MF
index d9c4441..7e0f2ed 100644
--- a/bundles/org.eclipse.wst.wsdl.validation/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.wsdl.validation/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %_PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.wsdl.validation; singleton:=true
-Bundle-Version: 1.1.200.qualifier
+Bundle-Version: 1.1.101.qualifier
 Bundle-Activator: org.eclipse.wst.wsdl.validation.internal.eclipse.ValidateWSDLPlugin
 Bundle-Vendor: %_PROVIDER_NAME
 Bundle-Localization: plugin
@@ -20,12 +20,12 @@
  org.eclipse.wst.wsdl.validation.internal.wsdl11.soap;x-friends:="org.eclipse.wst.wsdl.validation.tests,org.eclipse.wst.wsi",
  org.eclipse.wst.wsdl.validation.internal.wsdl11.xsd;x-friends:="org.eclipse.wst.wsdl.validation.tests,org.eclipse.wst.wsi",
  org.eclipse.wst.wsdl.validation.internal.xml;x-friends:="org.eclipse.wst.wsdl.validation.tests,org.eclipse.wst.wsi"
-Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,3.3.0)",
  org.apache.ant;bundle-version="[1.6.5,1.7.0)",
  org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)",
  org.wsdl4j;bundle-version="[1.4.0,1.5.0)",
- org.apache.xerces;bundle-version="[2.8.0,2.9.0)";visibility:=reexport,
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.apache.xerces;visibility:=reexport;bundle-version="[2.8.0,2.9.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,3.3.0)",
  org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/URIResolverWrapper.java b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/URIResolverWrapper.java
index c6b4830..622c9c6 100644
--- a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/URIResolverWrapper.java
+++ b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/URIResolverWrapper.java
@@ -11,6 +11,9 @@
 
 package org.eclipse.wst.wsdl.validation.internal.eclipse;
 
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver;
 import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin;
 import org.eclipse.wst.wsdl.validation.internal.resolver.IExtensibleURIResolver;
@@ -35,10 +38,11 @@
   public void resolve(String baseLocation, String publicId, String systemId, IURIResolutionResult result)
   {
     URIResolver resolver = URIResolverPlugin.createResolver();
+    String resolvedSystemId = resolvePlatformURL(systemId);
     String location = null;
-    if (publicId != null || systemId != null)
+    if (publicId != null || resolvedSystemId != null)
     {  
-      location = resolver.resolve(baseLocation, publicId, systemId);
+      location = resolver.resolve(baseLocation, publicId, resolvedSystemId);
     }  
     
     if (location != null)
@@ -55,4 +59,33 @@
       }
     }
   }
+  
+  /**
+   * Resolve platform URLs to standard URLs. This method has the
+   * practical effect of transforming a URL such as
+   * platform:/test/test.wsdl
+   * into
+   * file:/c:/wtp/workspace/test/test.wsdl
+   * 
+   * @param url The URL that may contain the platform scheme.
+   * @return A resolved URL that does not contain the platform scheme.
+   */
+  protected String resolvePlatformURL(String url)
+  {
+	  String result = url;
+	  if(url != null && url.startsWith("platform:"))
+      {
+    	  try
+    	  {
+    		  URL fileURL = FileLocator.toFileURL(new URL(url));
+    		  result = fileURL.toExternalForm();
+    	  }
+    	  catch(Exception e)
+    	  {
+    		  // Can't resolve using the FileLocator in this
+    		  // case so do nothing.
+    	  }
+      }
+	  return result;
+  }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/Validator.java b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/Validator.java
index d2c098e..99fdeea 100644
--- a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/Validator.java
+++ b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/Validator.java
@@ -23,6 +23,14 @@
 {
   protected HashMap xsdGrammarPools = new HashMap();
   protected HashMap xmlGrammarPools = new HashMap();
+  
+  /* (non-Javadoc)
+   * @see org.eclipse.wst.xml.core.internal.validation.core.AbstractNestedValidator#getValidatorName()
+   */
+  protected String getValidatorName() 
+  {
+	return WSDLValidationMessages.Message_WSDL_validation_message_ui;
+  }
 
   /** 
    * Create and configure the two grammar pools for this WSDL validation context.
diff --git a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/WSDLValidationMessages.java b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/WSDLValidationMessages.java
new file mode 100644
index 0000000..38ac09b
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/WSDLValidationMessages.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *   IBM - Initial API and implementation
+ * 
+ */
+package org.eclipse.wst.wsdl.validation.internal.eclipse;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Strings used by WSDL Validation
+ */
+public class WSDLValidationMessages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.wst.wsdl.validation.internal.eclipse.wsdlvalidation";//$NON-NLS-1$
+
+	public static String Message_WSDL_validation_message_ui;
+
+	static {
+		// load message values from bundle file
+		NLS.initializeMessages(BUNDLE_NAME, WSDLValidationMessages.class);
+	}
+
+	private WSDLValidationMessages() {
+		// cannot create new instance
+	}
+}
diff --git a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/wsdlvalidation.properties b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/wsdlvalidation.properties
new file mode 100644
index 0000000..3adb534
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/eclipse/wsdlvalidation.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2001, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+!-- Constants for strings  
+
+# validation strings
+Message_WSDL_validation_message_ui=WSDL Validator validating {0}
diff --git a/bundles/org.eclipse.wst.wsdl/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.wsdl/META-INF/MANIFEST.MF
index 2702e58..ed59a96 100644
--- a/bundles/org.eclipse.wst.wsdl/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.wsdl/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.wsdl; singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.103.qualifier
 Bundle-Activator: org.eclipse.wst.wsdl.WSDLPluginImplementation
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -26,11 +26,11 @@
  org.eclipse.wst.wsdl.internal.impl.wsdl4j;x-internal:=true,
  org.eclipse.wst.wsdl.internal.util;x-internal:=true,
  org.eclipse.wst.wsdl.util
-Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.2.0,2.3.0)",
- org.eclipse.xsd;bundle-version="[2.2.0,2.3.0)",
+Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.xsd;bundle-version="[2.2.0,2.4.0)",
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
  org.wsdl4j;bundle-version="[1.4.0,1.5.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.apache.xerces;bundle-version="[2.8.0,2.9.0)",
- com.ibm.icu;bundle-version="[3.4.4,3.5.0)"
+ com.ibm.icu;bundle-version="[3.4.4,4.0.0)"
 Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.wst.wsdl/src-http/org/eclipse/wst/wsdl/binding/http/internal/generator/HTTPContentGenerator.java b/bundles/org.eclipse.wst.wsdl/src-http/org/eclipse/wst/wsdl/binding/http/internal/generator/HTTPContentGenerator.java
index eb8e510..caa88ca 100644
--- a/bundles/org.eclipse.wst.wsdl/src-http/org/eclipse/wst/wsdl/binding/http/internal/generator/HTTPContentGenerator.java
+++ b/bundles/org.eclipse.wst.wsdl/src-http/org/eclipse/wst/wsdl/binding/http/internal/generator/HTTPContentGenerator.java
@@ -225,24 +225,6 @@
 	  return (parent instanceof Binding)? (Binding) parent : null;
   }
   
-  private List getMessageReferenceBindingObjects(Object genericBindingObject) {
-	  List list = new ArrayList();
-	  Binding binding = getBindingObject(genericBindingObject);
-	  
-	  if (binding != null) {
-		  Iterator operationsIt = binding.getEBindingOperations().iterator();
-	  
-		  while (operationsIt.hasNext()) {
-			  BindingOperation op = (BindingOperation) operationsIt.next();
-			  list.add(op.getEBindingInput());
-			  list.add(op.getEBindingOutput());
-			  list.addAll(op.getEBindingFaults());
-		  }	  
-	  }
-	  
-	  return list;
-  }
-  
   private Object getGenericBindingObjectParent(Object genericBindingObject) {
 	  Object parent = null;
 	  
diff --git a/bundles/org.eclipse.wst.wsdl/src-soap/org/eclipse/wst/wsdl/binding/soap/internal/impl/SOAPBodyImpl.java b/bundles/org.eclipse.wst.wsdl/src-soap/org/eclipse/wst/wsdl/binding/soap/internal/impl/SOAPBodyImpl.java
index cde3b5e..02ed48d 100644
--- a/bundles/org.eclipse.wst.wsdl/src-soap/org/eclipse/wst/wsdl/binding/soap/internal/impl/SOAPBodyImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-soap/org/eclipse/wst/wsdl/binding/soap/internal/impl/SOAPBodyImpl.java
@@ -514,35 +514,6 @@
     }
   } 
   
-  // KB: Workaround the problem in Message.addPart(Part)
-  // After adding a part to a message 
-  // Part.getMessage() returns null.
-  private Message getMessage(Part part)
-  {
-	  Message message = null;
-	  Object obj = part.eContainer();
-	  if (obj instanceof Message)
-		  message = (Message)obj;
-	  return message;	  
-  } 
-  
-  /*
-  public void handleUnreconciledElement(Element child, Collection remainingModelObjects)
-  {
-    switch (WSDLUtil.getInstance().getWSDLType(child))
-    {
-      case WSDLConstants.PART :
-        Part part = WSDLFactory.eINSTANCE.createPart();
-        part.setEnclosingDefinition(getEnclosingDefinition());
-        part.setElement(child);
-        getParts().add(part);
-        break;
-      default :
-        break;
-    }
-  }
-  */
-  
   public QName getElementType()
   {
     if (elementType == null)
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingFaultImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingFaultImpl.java
index ce72c47..9801204 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingFaultImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingFaultImpl.java
@@ -406,12 +406,18 @@
   {
     if (element != null)
     {
-      BindingOperation bop = (BindingOperation)getContainer();
-      Operation op = bop.getEOperation();
-      if (op != null)
+      BindingOperation bindingOperation = (BindingOperation)getContainer();
+      Operation operation = bindingOperation.getEOperation();
+      String faultName = getName();
+      
+      if (operation != null && faultName != null)
       {
-      	// TBD - Revisit API. Get the first Fault.
-        setFault((Fault)op.getEFaults().get(0));
+        javax.wsdl.Fault fault = operation.getFault(faultName);
+
+        if (fault != getFault())
+        {
+          setFault(fault);
+        }
       }
     }
     super.reconcileReferences(deep);
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java
index 4fca0c0..a1efb06 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java
@@ -642,8 +642,8 @@
   public void reconcileAttributes(Element changedElement)
   {
     Definition definition = getEnclosingDefinition();
-
-    QName qname = new QName(definition.getTargetNamespace(), changedElement.getAttribute("name"));
+    String name = changedElement.getAttribute(WSDLConstants.NAME_ATTRIBUTE);
+    QName qname = new QName(definition.getTargetNamespace(), name == null ? "" : name); //$NON-NLS-1$
     setQName(qname);
     reconcileReferences(false);
   }
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java
index b63c8c6..f81095a 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java
@@ -130,8 +130,6 @@
    */
   protected EList eBindingFaults = null;
 
-  private Map bindingFaults;
-
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -789,7 +787,13 @@
       PortType portType = binding.getEPortType();
       if (portType != null)
       {
-        setOperation(portType.getOperation(getName(),null,null));
+        BindingInput input = getEBindingInput();
+        BindingOutput output = getEBindingOutput();
+        
+        String inputName = input != null ? input.getName() : null;
+        String outputName = output != null ? output.getName() : null;
+
+        setOperation(portType.getOperation(getName(), inputName, outputName));
       }
     }
     super.reconcileReferences(deep);
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/MessageImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/MessageImpl.java
index 66ef43c..a0acc63 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/MessageImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/MessageImpl.java
@@ -155,8 +155,6 @@
    */
   protected EList eParts = null;
 
-  private Map parts;
-
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -534,16 +532,9 @@
   public void reconcileAttributes(Element changedElement)
   {
     Definition definition = getEnclosingDefinition();
-    String newName = null;
-    if (changedElement.hasAttribute("name"))
-    {
-      newName = changedElement.getAttribute("name");
-    }
-    if (newName != null)
-    {
-      QName qname = new QName(definition.getTargetNamespace(), newName);
-      setQName(qname);
-    }
+    String name = changedElement.getAttribute(WSDLConstants.NAME_ATTRIBUTE);
+    QName qname = new QName(definition.getTargetNamespace(), name == null ? "" : name); //$NON-NLS-1$
+    setQName(qname);
   }
 
   public void handleUnreconciledElement(Element child, Collection remainingModelObjects)
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java
index b0235fc..e81d6d9 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -219,8 +219,6 @@
   
   private List parameterOrdering = null; // a list of part names (WSDL4J)
 
-  private Map faults;
-
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -274,9 +272,20 @@
       if (child.getNodeType() != Node.ELEMENT_NODE)
         continue;
       
+      String nsURI = child.getNamespaceURI();
+      
+      if (!WSDLConstants.WSDL_NAMESPACE_URI.equals(nsURI) )
+      {
+        // Skip over any non-WSDL elements. For example, to support new WSDL 
+        // use cases we have to tolerate extensibility elements at the operation level.
+        
+        continue;
+      }
+
       messageRefType = WSDLUtil.getInstance().getWSDLType((Element)child);
+      
       switch (state)
-	  {
+      {
         case 0: // initial state     
           if (WSDLConstants.INPUT == messageRefType)
             state = 1; 
@@ -329,12 +338,12 @@
           break;
         default: // cannot happen (-1)
           break;
-	  }
+      }
     }
     
     OperationType opType = null;
     switch (state)
-	{
+    {
       case 1:
       case 11:
       	opType = OperationType.ONE_WAY;
@@ -351,7 +360,7 @@
         break;
       default: // invalid
         break;
-	}
+    }
     return opType;    
   }
   /**
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/PortTypeImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/PortTypeImpl.java
index e37cfd8..b70890b 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/PortTypeImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/PortTypeImpl.java
@@ -544,7 +544,8 @@
   public void reconcileAttributes(Element changedElement)
   {
     Definition definition = getEnclosingDefinition();
-    QName qname = new QName(definition.getTargetNamespace(), changedElement.getAttribute("name"));
+    String name = changedElement.getAttribute(WSDLConstants.NAME_ATTRIBUTE);
+    QName qname = new QName(definition.getTargetNamespace(), name == null ? "" : name); //$NON-NLS-1$
     setQName(qname);
   }
 
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java
index bf38f3c..75f9aa2 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java
@@ -145,8 +145,6 @@
    */
   protected String resourceURI = RESOURCE_URI_EDEFAULT;
 
-  private Map ports;
-
   /**
    * The cached value of the '{@link #getEPorts() <em>EPorts</em>}' containment reference list.
    * <!-- begin-user-doc -->
@@ -522,8 +520,8 @@
   public void reconcileAttributes(Element changedElement)
   {
     Definition definition = getEnclosingDefinition();
-
-    QName qname = new QName(definition.getTargetNamespace(), changedElement.getAttribute("name"));
+    String name = changedElement.getAttribute(WSDLConstants.NAME_ATTRIBUTE);
+    QName qname = new QName(definition.getTargetNamespace(), name == null ? "" : name); //$NON-NLS-1$
     setQName(qname);
   }
 
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/util/WSDLParser.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/util/WSDLParser.java
index 079e3b2..b736529 100644
--- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/util/WSDLParser.java
+++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/util/WSDLParser.java
@@ -443,7 +443,10 @@
     }
     catch (SAXException exception)
     {
-      fatalError(exception);
+      if (diagnostics.isEmpty())
+      {
+        fatalError(exception);
+      }
     }
   }
 
@@ -465,7 +468,10 @@
     }
     catch (SAXException exception)
     {
-      fatalError(exception);
+      if (diagnostics.isEmpty())
+      {
+        fatalError(exception);
+      }
     }
   }
 
diff --git a/bundles/org.eclipse.wst.wsi.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.wsi.ui/META-INF/MANIFEST.MF
index c50a4f5..989040d 100644
--- a/bundles/org.eclipse.wst.wsi.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.wsi.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %_PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.wsi.ui; singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.101.qualifier
 Bundle-Activator: org.eclipse.wst.wsi.ui.internal.WSIUIPlugin
 Bundle-Vendor: %_PROVIDER_NAME
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.wsi.ui/plugin.properties b/bundles/org.eclipse.wst.wsi.ui/plugin.properties
index 1b442fd..6f127ed 100644
--- a/bundles/org.eclipse.wst.wsi.ui/plugin.properties
+++ b/bundles/org.eclipse.wst.wsi.ui/plugin.properties
@@ -15,4 +15,4 @@
 _UI_WSI_VALIDATOR             = WS-I Message Validator
 _UI_ACTION_VALIDATE           = Validate WS-I Log File
 _UI_WIZARD_VALIDATE_LOG_TITLE = Validate WS-I Message Log File
-_UI_LOG_EDITOR                = XML Editor
+_UI_LOG_EDITOR                = WS-I Message Log Viewer
diff --git a/bundles/org.eclipse.wst.wsi.ui/plugin.xml b/bundles/org.eclipse.wst.wsi.ui/plugin.xml
index 61a9c62..f9b311e 100644
--- a/bundles/org.eclipse.wst.wsi.ui/plugin.xml
+++ b/bundles/org.eclipse.wst.wsi.ui/plugin.xml
@@ -58,6 +58,21 @@
       </validator>
    </extension>
    
+<!-- ======================================================= -->
+<!-- Extension point: org.eclipse.ui.editors                 -->
+<!-- Purpose: Specify editor for file with extension wsimsg. -->
+<!-- ======================================================= -->
+   <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            name="%_UI_LOG_EDITOR"
+            extensions="wsimsg"
+            icon="icons/wsi_logfile_obj.gif"
+            class="org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorPart"
+            id="org.eclipse.wst.wsi.ui.internal.WSILogEditor">
+      </editor>
+   </extension>
+   
    <!-- ======================================================= -->
    <!-- Extension point: org.eclipse.core.runtime.contentTypes  --> 
    <!-- Purpose: Specify file association for wsimsg.           -->
diff --git a/bundles/org.eclipse.wst.wsi/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.wsi/META-INF/MANIFEST.MF
index 7819fd8..04e8827 100644
--- a/bundles/org.eclipse.wst.wsi/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.wsi/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %_PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.wsi; singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.wst.wsi.internal.WSITestToolsPlugin
 Bundle-Vendor: %_PROVIDER_NAME
 Bundle-Localization: plugin
@@ -42,16 +42,16 @@
  org.eclipse.wst.wsi.internal.document;x-internal:=true,
  org.eclipse.wst.wsi.internal.report;x-internal:=true,
  org.eclipse.wst.wsi.internal.validate.wsdl;x-internal:=true
-Require-Bundle:  org.eclipse.core.runtime; bundle-version="[3.2.0,3.3.0)",
+Require-Bundle:  org.eclipse.core.runtime; bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.command.env;bundle-version="[1.0.101,1.1.0)",
  org.eclipse.wst.command.env.core;bundle-version="[1.0.101,1.1.0)",
  org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,3.3.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,3.4.0)",
  org.eclipse.wst.wsdl.validation;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.ws;bundle-version="[1.0.100,1.1.0)",
  org.wsdl4j;bundle-version="[1.4.0,1.5.0)",
  org.uddi4j;bundle-version="[2.0.4,2.1.0)",
  org.apache.axis;bundle-version="[1.3.0,1.4.0)",
- com.ibm.icu;bundle-version="[3.4.4,3.5.0)",
+ com.ibm.icu;bundle-version="[3.4.4,4.0.0)",
  org.apache.xerces;bundle-version="[2.8.0,2.9.0)"
 Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.wst.wsi/plugin.properties b/bundles/org.eclipse.wst.wsi/plugin.properties
index 2c65e29..e12e96b 100644
--- a/bundles/org.eclipse.wst.wsi/plugin.properties
+++ b/bundles/org.eclipse.wst.wsi/plugin.properties
@@ -9,5 +9,14 @@
 #  *   IBM - Initial API and implementation
 #  *******************************************************************************/
 _PLUGIN_NAME   = WSI Conformance Tools
-_UI_WSDL_WSI_VALIDATOR = WSDL WS-I Validator
 _PROVIDER_NAME = Eclipse.org
+_WSI_VALIDATOE_NAME = WS-I Validator
+_TEST_ASSERTION_DOCUMENTS_NAME = Test Assertion Documents
+_REPORT_ARTIFACT_TYPES_NAME = Report Artifact Types
+_UI_WSDL_WSI_VALIDATOR = WSDL WS-I Validator
+_UI_WSI_FRAMEWORK_UDDI_VALIDATOR = WS-I Framework UDDI Validator
+_UI_WSI_FRAMEWORK_WSDL_VALIDATOR = WS-I Framework WSDLValidator
+_UI_WSI_FRAMEWORK_MESSAGE_VALIDATOR = WS-I Framework Message Validator
+_UI_WSI_FRAMEWORK_ENVELOPE_VALIDATOR = WS-I Framework Envelope Validator
+_UI_WSI_BP_TAD_VERSIONS = WS-I Basic Profile TAD Versions
+_UI_WSI_BP_REPORT_ARTIFACTS = WS-I Basic Profile Report Artifacts
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/plugin.xml b/bundles/org.eclipse.wst.wsi/plugin.xml
index 7e80a2b..c23e2ec 100644
--- a/bundles/org.eclipse.wst.wsi/plugin.xml
+++ b/bundles/org.eclipse.wst.wsi/plugin.xml
@@ -13,8 +13,11 @@
 --> 
 
 <plugin>
-
-     <extension
+   <extension-point id="wsivalidator" name="%_WSI_VALIDATOE_NAME" schema="schema/wsivalidator.exsd"/>
+   <extension-point id="tads" name="%_TEST_ASSERTION_DOCUMENTS_NAME" schema="schema/tads.exsd"/>
+   <extension-point id="reportArtifactTypes" name="%_REPORT_ARTIFACT_TYPES_NAME" schema="schema/reportArtifactTypes.exsd"/>
+     
+   <extension
          id="wsdlWSIValidator"
          name="%_UI_WSDL_WSI_VALIDATOR"
          point="org.eclipse.wst.wsdl.validation.extvalidator">
@@ -23,5 +26,56 @@
             class="org.eclipse.wst.wsi.internal.validate.wsdl.WSDLValidator">
       </extvalidator>
    </extension>
-  
+   <extension
+           id="uddiValidator"
+           name="%_UI_WSI_FRAMEWORK_UDDI_VALIDATOR"
+           point="org.eclipse.wst.wsi.wsivalidator">
+        <wsivalidator
+           class="org.eclipse.wst.wsi.internal.core.profile.validator.impl.uddi.UDDIValidatorImpl"/>
+   </extension>
+   <extension
+           id="wsdlValidator"
+           name="%_UI_WSI_FRAMEWORK_WSDL_VALIDATOR"
+           point="org.eclipse.wst.wsi.wsivalidator">
+        <wsivalidator
+           class="org.eclipse.wst.wsi.internal.core.profile.validator.impl.wsdl.WSDLValidatorImpl"/>
+   </extension>
+   <extension
+           id="messageValidator"
+           name="%_UI_WSI_FRAMEWORK_MESSAGE_VALIDATOR"
+           point="org.eclipse.wst.wsi.wsivalidator">
+        <wsivalidator
+           class="org.eclipse.wst.wsi.internal.core.profile.validator.impl.message.MessageValidatorImpl"/>
+   </extension>
+   <extension
+           id="envelopeValidator"
+           name="%_UI_WSI_FRAMEWORK_ENVELOPE_VALIDATOR"
+           point="org.eclipse.wst.wsi.wsivalidator">
+        <wsivalidator
+           class="org.eclipse.wst.wsi.internal.core.profile.validator.impl.envelope.EnvelopeValidatorImpl"/>
+   </extension>
+   <extension
+           id="bpTads"
+           name="%_UI_WSI_BP_TADS"
+           point="org.eclipse.wst.wsi.tads">
+        <tad
+           name="Basic Profile Test Assertions"
+           version="1.1.0"/>
+        <tad
+           name="Basic Profile 1.1 Test Assertions"
+           version="1.1.0"/>
+        <tad
+           name="Simple Soap Binding Profile [1.0] (with Basic Profile [1.1]) Test Assertions"
+           version="1.0.0"/>
+        <tad
+           name="Attachments Profile [1.0] (with Basic Profile [1.1] and Simple Soap Binding Profile [1.0]) Test Assertions"
+           version="1.0.0"/>
+   </extension>
+   <extension
+           id="bpReportArtifacts"
+           name="%_UI_WSI_BP_REPORT_ARTIFACTS"
+           point="org.eclipse.wst.wsi.reportArtifactTypes">
+        <reportArtifactType
+           artifactType="message"/>
+   </extension> 
 </plugin>
diff --git a/bundles/org.eclipse.wst.wsi/schema/reportArtifactTypes.exsd b/bundles/org.eclipse.wst.wsi/schema/reportArtifactTypes.exsd
new file mode 100644
index 0000000..3bb1288
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsi/schema/reportArtifactTypes.exsd
@@ -0,0 +1,111 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.wsi">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.wsi" id="reportArtifactTypes" name="Report Artifact Types"/>
+      </appInfo>
+      <documentation>
+         The report artifact type extension point allows clients to denote artifact types that should be output to the log file.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="reportArtifactType"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="reportArtifactType">
+      <complexType>
+         <attribute name="artifactType" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         WTP 2.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a report artifact type contribution:
+&lt;pre&gt;
+&lt;extension
+        id=&quot;bpReportArtifacts&quot;
+        name=&quot;%_UI_WSI_BP_REPORT_ARTIFACTS&quot;
+        point=&quot;org.eclipse.wst.wsi.reportArtifacts&quot;&gt;
+     &lt;reportArtifactType
+        artifactType=&quot;message&quot;/&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         No API is associated with this extension point.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         No implementation is associated with this extension point.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/bundles/org.eclipse.wst.wsi/schema/tads.exsd b/bundles/org.eclipse.wst.wsi/schema/tads.exsd
new file mode 100644
index 0000000..2dabfd9
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsi/schema/tads.exsd
@@ -0,0 +1,129 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.wsi">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.wsi" id="tads" name="Test Assertion Documents"/>
+      </appInfo>
+      <documentation>
+         The tads extension point allows clients to denote additional Test Assertion Documents that they can handle.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <documentation>
+            (no description available)
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="tad"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="tad">
+      <annotation>
+         <documentation>
+            (no description available)
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         WTP 2.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a TAD version contribution:
+&lt;pre&gt;
+&lt;extension
+        id=&quot;bpTadVersions&quot;
+        name=&quot;%_UI_WSI_BP_TAD_VERSIONS&quot;
+        point=&quot;org.eclipse.wst.wsi.tad_versions&quot;&gt;
+     &lt;tad
+        name=&quot;Basic Profile Test Assertions&quot;
+        version=&quot;1.1.0&quot;/&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         No API is associated with this extension point.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         No implementation is associated with this extension point.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/bundles/org.eclipse.wst.wsi/schema/wsivalidator.exsd b/bundles/org.eclipse.wst.wsi/schema/wsivalidator.exsd
new file mode 100644
index 0000000..4280597
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsi/schema/wsivalidator.exsd
@@ -0,0 +1,127 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="bsp.org.eclipse.wst.wsi">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="bsp.org.eclipse.wst.wsi" id="wsivalidator" name="WS-I Validator"/>
+      </appInfo>
+      <documentation>
+         The WS-I Validator extension point allows clients to contribute a validator that can validate different WS-I Profiles.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <documentation>
+            (no description available)
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="wsivalidator"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="wsivalidator">
+      <annotation>
+         <documentation>
+            (no description available)
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.wst.wsi.internal.core.profile.validator.BaseValidator"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         WTP 2.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a WS-I Validator contribution:
+&lt;pre&gt;
+&lt;extension
+        id=&quot;messageValidator&quot;
+        name=&quot;%_UI_WSI_FRAMEWORK_MESSAGE_VALIDATOR&quot;
+        point=&quot;org.eclipse.wst.wsi.validator&quot;&gt;
+     &lt;wsi_validator
+        class=&quot;org.eclipse.wst.wsi.internal.core.profile.validator.impl.message.MessageValidatorImpl&quot;/&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         The supplied class must implement &lt;code&gt;org.eclipse.wst.wsi.internal.core.profile.validator.BaseValidator&lt;/code&gt;.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         &lt;code&gt;
+org.eclipse.wst.wsi.internal.core.profile.validator.impl.message.MessageValidatorImpl
+&lt;/code&gt;
+Contributes WS-I validation logic for the Basic Profile validation of messages.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/WSITestToolsPlugin.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/WSITestToolsPlugin.java
index 205df17..fa0dae1 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/WSITestToolsPlugin.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/WSITestToolsPlugin.java
@@ -10,7 +10,15 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal;
 
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
+import org.eclipse.wst.wsi.internal.core.profile.validator.BaseValidator;
 
 /**
  * The WS-I test tools plugin.
@@ -22,8 +30,30 @@
 {
   private static Plugin instance;
   protected final String PLUGIN_PROPERTIES = "wsivalidate";
-  //protected ResourceBundle resourcebundle = null;
-  
+  protected static final String PLUGIN_ID = "org.eclipse.wst.wsi";
+  protected static final String VALIDATOR_EXT_ID = PLUGIN_ID + ".wsivalidator";
+  protected static final String TAD_VERSION_EXT_ID = PLUGIN_ID + ".tads";
+  protected static final String REPORT_ARTIFACT_TYPES_EXT_ID = PLUGIN_ID + ".reportArtifactTypes";
+  protected static final String ATT_CLASS = "class";
+  protected static final String ATT_TAD_NAME = "name";
+  protected static final String ATT_TAD_VERSION = "version";
+  protected static final String ATT_ARTIFACT_TYPE = "artifactType";
+
+  /* Holds validators read from the platform registry.  Lazy initialized in
+   * computeValidators().  */
+  private BaseValidator validators[];
+
+  /* Holds arrays containing information about Test Assertion document (TAD)
+   * versions read from the platform registry.  Each array has two elements:
+   *   0: the TAD name
+   *   1: the TAD version string
+   * Lazy initialized in computeTADVersions().  */
+  private String tadVersions[][];
+
+  /* Holds artifact type names for reporting read from the platform registry.
+   * Lazy initialized in getAllReportArtifactTypes().  */
+  private String reportArtifactTypes[];
+
   /**
    * Constructor for wsiTestToolsPlugin.
    * @param descriptor an IPluginDescriptor object.
@@ -55,4 +85,124 @@
   {
     return (WSITestToolsPlugin) instance;
   }
+
+  /* Computes the list of validators by scanning the platform registry. */
+  private BaseValidator[] computeValidators() {
+      IExtensionRegistry registry = Platform.getExtensionRegistry();
+      IExtensionPoint extensionPoint = registry.getExtensionPoint(
+              VALIDATOR_EXT_ID);
+      IExtension[] extensions = extensionPoint.getExtensions();
+      ArrayList results = new ArrayList();
+      for (int i = 0; i < extensions.length; i++) {
+          /* Only one validator per extension point */
+          IConfigurationElement validatorElement = extensions[i].
+                  getConfigurationElements()[0];
+          BaseValidator validator = null;
+          try {
+              validator = (BaseValidator) validatorElement.
+                      createExecutableExtension(ATT_CLASS);
+          } catch (Throwable e) {
+              e.printStackTrace();
+          }
+          results.add(validator);
+      }
+      return (BaseValidator[]) results.toArray(new BaseValidator[0]);
+  }
+
+  /**
+   * Find all validators found in the platform registry extension points
+   * org.eclipse.wst.wsi.validator.
+   * @return an array containing these validators
+   */
+  public BaseValidator[] getBaseValidators() 
+  {
+	if (validators == null)
+	  validators = computeValidators();
+    return validators;  
+  }
+
+  /**
+   * Scan all validators found in the platform registry for supported artifact
+   * types.
+   * @return an array of artifact type names (Strings)
+   */
+  public String[] getArtifactTypes() {
+      if (validators == null)
+         getBaseValidators();
+      String artifactTypes[] = new String[validators.length];
+      
+      for (int i = 0; i < validators.length; i++)
+          artifactTypes[i] = validators[i].getArtifactType();
+      return artifactTypes;
+  }
+  
+  /* Computes the list of supported TAD versions by scanning the platform 
+   * registry.  See comment for tadVersions inst var for a description of the
+   * return type. */
+  private String[][] computeTADVersions() {
+      IExtensionRegistry registry = Platform.getExtensionRegistry();
+      IExtensionPoint extensionPoint = registry.getExtensionPoint(
+              TAD_VERSION_EXT_ID);
+      IExtension[] extensions = extensionPoint.getExtensions();
+      ArrayList results = new ArrayList();
+      for (int i = 0; i < extensions.length; i++) {
+
+          IConfigurationElement versionElements[] = extensions[i].
+                  getConfigurationElements();
+          for (int j = 0; j < versionElements.length; j++) {
+              String nameVersion[] = new String[2];
+              nameVersion[0] = versionElements[j].getAttribute(ATT_TAD_NAME);
+              nameVersion[1] = versionElements[j].getAttribute(ATT_TAD_VERSION);
+              results.add(nameVersion);
+          }
+      }
+      return (String[][]) results.toArray(new String[0][0]);
+  }
+
+  /**
+   * Find all TAD versions found in the platform registry extension points
+   * org.eclipse.wst.wsi.tad_versions.
+   * 
+   * @return an array where each member is a two element arrays that describes
+   * one TAD version:
+   *   element 0: the TAD name
+   *   element 1: the TAD version string
+   */
+  public String[][] getAllTADVersions() 
+  {
+	if (tadVersions == null)
+	  tadVersions = computeTADVersions();
+    return tadVersions;  
+  }
+  
+  /* Computes the list of artifact types by scanning the platform registry. */
+  private String[] computeReportArtifactTypes() 
+  {
+    IExtensionRegistry registry = Platform.getExtensionRegistry();
+    IExtensionPoint extensionPoint = registry.getExtensionPoint(REPORT_ARTIFACT_TYPES_EXT_ID);
+    IExtension[] extensions = extensionPoint.getExtensions();
+    ArrayList results = new ArrayList();
+    for (int i = 0; i < extensions.length; i++) 
+    {
+      IConfigurationElement reportArtifactElements[] = extensions[i].getConfigurationElements();
+      for (int j = 0; j < reportArtifactElements.length; j++) 
+      {
+        String reportArtifact = reportArtifactElements[j].getAttribute(ATT_ARTIFACT_TYPE);
+        results.add(reportArtifact);
+      }
+    }
+    return (String[]) results.toArray(new String[0]);
+  }
+  
+  /**
+   * Find all report artifact types tags found in the platform registry
+   * extension points org.eclipse.wst.wsi.reportArtifactTypes.
+   * @return an array containing these Strings
+   */
+  public String[] getAllReportArtifactTypes() 
+  {
+    if (reportArtifactTypes == null)
+        reportArtifactTypes = computeReportArtifactTypes();
+    return reportArtifactTypes;
+  }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/MessageAnalyzer.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/MessageAnalyzer.java
index 4c15681..4970d3d 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/MessageAnalyzer.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/MessageAnalyzer.java
@@ -173,8 +173,7 @@
   	    try
 		{
 		  analyzerconfig.setLogLocation(URIEncoder.encode(filename, "UTF8"));
-		  analyzerconfig.setTestAssertionsDocumentLocation(
-			   URIEncoder.encode(wsiPreferences.getTADFile(), "UTF8"));
+		  analyzerconfig.setTestAssertionsDocumentLocation(wsiPreferences.getTADFile());
 		}
 		catch (UnsupportedEncodingException uee)
 		{
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/WSDLAnalyzer.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/WSDLAnalyzer.java
index aab7d55..99bf231 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/WSDLAnalyzer.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/analyzer/WSDLAnalyzer.java
@@ -323,16 +323,7 @@
       analyzerconfig.setAddStyleSheet(addstylesheet);
       analyzerconfig.setReplaceReport(true);
       //analyzerconfig.setLogLocation(filename);
-	  try
-	 {
-	   analyzerconfig.setTestAssertionsDocumentLocation(
-		 URIEncoder.encode(wsiPreferences.getTADFile(), "UTF8"));
-	 }
-	 catch (UnsupportedEncodingException uee)
-	 {
-	   analyzerconfig.setTestAssertionsDocumentLocation(URIEncoder.encode(wsiPreferences.getTADFile(), "UTF8"));
-
-	 }
+      analyzerconfig.setTestAssertionsDocumentLocation(wsiPreferences.getTADFile());
       analyzerconfig.setVerboseOption(false);
 
       // set the wsdlReference
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/WSIConstants.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/WSIConstants.java
index fc1ee60..4ec7c47 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/WSIConstants.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/WSIConstants.java
@@ -127,7 +127,7 @@
 	 * WSDL SOAP binding namespace.
 	 */
 	public final static String NS_URI_WSDL_SOAP = "http://schemas.xmlsoap.org/wsdl/soap/";
-
+	public final static String NS_URI_WSDL_SOAP12 = "http://schemas.xmlsoap.org/wsdl/soap12/";
 	public final static String NS_NAME_WSDL_SOAP = "soap";
 
 	/**
@@ -439,21 +439,22 @@
 	/**
 	 * WS-I names and versions of the profile test assertion document supported
 	 * in the current version of the test tools.
-	 */
+     */
+	/** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String BASIC_PROFILE_TAD_NAME = "Basic Profile Test Assertions";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String BASIC_PROFILE_1_1_TAD_NAME = "Basic Profile 1.1 Test Assertions";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String SIMPLE_SOAP_BINDINGS_PROFILE_TAD_NAME = "Simple Soap Binding Profile [1.0] (with Basic Profile [1.1]) Test Assertions";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String ATTACHMENTS_PROFILE_TAD_NAME = "Attachments Profile [1.0] (with Basic Profile [1.1] and Simple Soap Binding Profile [1.0]) Test Assertions";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String BASIC_PROFILE_TAD_VERSION = "1.1.0";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String BASIC_PROFILE_1_1_TAD_VERSION = "1.1.0";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String SIMPLE_SOAP_BINDINGS_PROFILE_TAD_VERSION = "1.0.0";
-
+    /** @deprecated -- this has been replaced with a TAD registry mechanism. */
 	public static final String ATTACHMENTS_PROFILE_TAD_VERSION = "1.0.0";
 
 	/**
@@ -479,5 +480,4 @@
 	public static final String HTTP_PREFIX = "http:";
 	public static final String FILE_PROTOCOL = "file:///";
 	public static final String WSI_PREFIX = "WS-I: ";
-
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/AnalyzerContext.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/AnalyzerContext.java
index d2f53a6..c565779 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/AnalyzerContext.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/AnalyzerContext.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.analyzer;
 
+import org.eclipse.wst.wsi.internal.core.wsdl.WSDLDocument;
+
 /**
  * This class contains contextual information which is required by test assertions across all artifacts.
  * 
@@ -20,6 +22,7 @@
 {
   protected ServiceReference serviceReference = null;
   protected CandidateInfo candidateInfo = null;
+  protected WSDLDocument wsdlDocument = null;
 
   /**
    * Do not allow the usage of the null constructor.
@@ -76,4 +79,22 @@
   {
     this.candidateInfo = candidateInfo;
   }
+  
+  /**
+   * Returns the wsdlDocument.
+   * @return WSDLDocument.
+   * @see #setWsdlDocument
+   */
+  public WSDLDocument getWsdlDocument() {
+      return wsdlDocument;
+  }
+
+  /**
+   * Sets the wsdlDocument.
+   * @param wsdlDocument the wsdlDocument to set.
+   * @see #getWsdlDocument
+   */
+  public void setWsdlDocument(WSDLDocument wsdlDocument) {
+      this.wsdlDocument = wsdlDocument;
+  }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/BasicProfileAnalyzer.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/BasicProfileAnalyzer.java
index f5b315e..2e7ba7f 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/BasicProfileAnalyzer.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/BasicProfileAnalyzer.java
@@ -15,8 +15,10 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.Iterator;
 import java.util.List;
 
+import javax.wsdl.Binding;
 import javax.wsdl.WSDLException;
 
 import org.eclipse.wst.wsi.internal.WSITestToolsProperties;
@@ -24,15 +26,12 @@
 import org.eclipse.wst.wsi.internal.core.WSIConstants;
 import org.eclipse.wst.wsi.internal.core.WSIException;
 import org.eclipse.wst.wsi.internal.core.WSIFileNotFoundException;
-import org.eclipse.wst.wsi.internal.core.log.LogReader;
-import org.eclipse.wst.wsi.internal.core.log.MessageEntryHandler;
-import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
-import org.eclipse.wst.wsi.internal.core.profile.validator.EnvelopeValidator;
-import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
-import org.eclipse.wst.wsi.internal.core.profile.validator.UDDIValidator;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.UDDIReference;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.WSDLElement;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.impl.WSDLElementImpl;
+import org.eclipse.wst.wsi.internal.core.profile.validator.BaseValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.WSDLValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.wsdl.WSDLValidatorImpl;
-import org.eclipse.wst.wsi.internal.core.report.ArtifactReference;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
 import org.eclipse.wst.wsi.internal.core.report.Report;
 import org.eclipse.wst.wsi.internal.core.report.ReportArtifact;
@@ -40,9 +39,16 @@
 import org.eclipse.wst.wsi.internal.core.report.ReportWriter;
 import org.eclipse.wst.wsi.internal.core.report.impl.DefaultReporter;
 import org.eclipse.wst.wsi.internal.core.util.ArtifactType;
+import org.eclipse.wst.wsi.internal.core.util.UDDIUtils;
 import org.eclipse.wst.wsi.internal.core.util.WSIProperties;
 import org.eclipse.wst.wsi.internal.core.wsdl.WSDLDocument;
+import org.eclipse.wst.wsi.internal.core.wsdl.WSDLUtils;
 import org.eclipse.wst.wsi.internal.core.xml.XMLDocumentCache;
+import org.uddi4j.client.UDDIProxy;
+import org.uddi4j.datatype.binding.BindingTemplate;
+import org.uddi4j.datatype.tmodel.TModel;
+import org.uddi4j.response.BindingDetail;
+import org.uddi4j.response.TModelDetail;
 import org.uddi4j.transport.TransportFactory;
 
 
@@ -65,6 +71,7 @@
    * WSDL document to analyze.
    */
   protected WSDLDocument wsdlDocument = null;
+  // private WSDLValidator wsdlValidator;
 
   /**
    * Basic profile analyzer.
@@ -125,9 +132,61 @@
     }
 
   }
+  
+  private WSDLDocument getWsdlFromUddi() {
+      WSDLDocument wsdlDoc = null;
+      try {
+          UDDIProxy uddiProxy = new UDDIProxy();
+          UDDIReference uddiReference = getAnalyzerConfig().getUDDIReference();
+          uddiProxy.setInquiryURL(uddiReference.getInquiryURL());
+          TModel tModel = null;
 
-  private WSDLValidator wsdlValidator;
+          if (uddiReference.getKeyType().equals(UDDIReference.BINDING_KEY)) {
+              BindingDetail bindingDetail = uddiProxy.get_bindingDetail(
+                      uddiReference.getKey());
+              BindingTemplate bindingTemplate = (BindingTemplate) bindingDetail.
+                      getBindingTemplateVector().elementAt(0);
+              tModel = UDDIUtils.findTModel(uddiProxy, bindingTemplate, false);
+          } else { // UDDIReference.TMODEL_KEY
+              TModelDetail tModelDetail = uddiProxy.get_tModelDetail(
+                          uddiReference.getKey());
+              tModel = (TModel) tModelDetail.getTModelVector().elementAt(0);
+          }
 
+          String overviewURL = UDDIUtils.getOverviewURL(tModel);
+          String wsdlURI = UDDIUtils.getWSDLLocation(overviewURL);
+          wsdlDoc = new WSDLDocument(wsdlURI);
+
+          /* TODO:  I refactored this code from BSP3001 but I'm not sure that
+           * it's correct.  This overrides the <wsdlElement> child of
+           * <uddiReference> from the config file, which never gets used.
+           */
+          // If the wsdlElement does not exist, then set it
+          if (analyzerContext.getServiceReference().getWSDLElement() == null)
+          {
+              Binding binding = UDDIUtils.getBinding(overviewURL, wsdlDoc);
+              String bindingName =
+                  binding == null ? null : binding.getQName().getLocalPart();
+                String namespace =
+                  binding == null ? null : binding.getQName().getNamespaceURI();
+
+            // Get WSDL binding from the overviewURL and set in analyzerContext
+            WSDLElement wsdlElement = new WSDLElementImpl();
+            wsdlElement.setName(bindingName);
+            wsdlElement.setNamespace(namespace);
+            wsdlElement.setType(WSDLValidator.TYPE_DESCRIPTION_BINDING);
+            analyzerContext.getServiceReference().setWSDLElement(wsdlElement);
+          }
+          return wsdlDoc;
+
+      } catch (Exception e) {
+        /* If the wsdlDoc is set at the point of the exception, return it;
+         * otherwise return null. */
+        return wsdlDoc;
+    }
+  }
+  
+  
   /**
    * Process all conformance validation functions.
    * @return status code.
@@ -139,8 +198,6 @@
 
     Report report = null;
     ReportArtifact reportArtifact = null;
-    String wsdlURI = null;
-    //WSDLDocument wsdlDocument = null;
 
     // Set up initial analyzer context based on entries in the config file
     this.analyzerContext =
@@ -149,14 +206,13 @@
     try
     {
       this.profileAssertions = WSITestToolsProperties.getProfileAssertions(
-          getAnalyzerConfig().getTestAssertionsDocumentLocation());
+                getAnalyzerConfig().getTestAssertionsDocumentLocation());
 
       if (this.profileAssertions == null)
       {
- 		 throw new WSIException(messageList.getMessage(
- 				 "config20",
- 		         "The WS-I Test Assertion Document (TAD)document was either not found or could not be processed."));  
-      }
+        throw new WSIException(messageList.getMessage("config20",
+       		   "The WS-I Test Assertion Document (TAD)document was either not found or could not be processed."));  
+      }	
 
       // Create report from document factory
       report = documentFactory.newReport();
@@ -179,106 +235,48 @@
       // Create reporter
       this.reporter = new DefaultReporter(report, reportWriter);
 
+      // fetch WSDL if not set in constructor
+      // First, attempt to get the WSDL URI from a UDDI tModel
+      if ((wsdlDocument == null) && (getAnalyzerConfig().isUDDIReferenceSet()))
+              wsdlDocument = getWsdlFromUddi();
+
+      /* Next, try to use the WSDL settings from the config file.  If we can't
+       * fetch that WSDL, and the config file is set up to test a WSDL, then the
+       * validator fails here. */
+      if ((wsdlDocument == null) && (getAnalyzerConfig().isWSDLReferenceSet()))
+      {
+          wsdlDocument = new WSDLDocument(getAnalyzerConfig().
+                  getWSDLLocation());
+
+          if (wsdlDocument == null)
+              throw new WSIException(messageList.getMessage("config05",
+                      "WSDL document was either not found or could not be " + 
+                      "processed."));
+      }
+      
+      /*
+       * Only validate messages against a wsdl document if the wsdl document
+       * does not contain soap 1.2 bindings. 
+       */
+	  if (WSDLUtils.isSOAP12WSDL(wsdlDocument) && getAnalyzerConfig().getLogLocation() != null)
+		  getAnalyzerConfig().setWSDLReference(null);
+	  else
+		  analyzerContext.setWsdlDocument(wsdlDocument);  
+
       // Start writing report
       this.reporter.startReport();
 
-      // --------------------------------
-      // DISCOVERY ARTIFACT:
-      // --------------------------------
-
-      // Set current artifact
-      reportArtifact = setCurrentArtifact(ArtifactType.ARTIFACT_TYPE_DISCOVERY);
-
-      // If UDDI options specified, then process UDDI test assertions
-      if ((wsdlURI = validateUDDI(reportArtifact, factory.newUDDIValidator()))
-        == null)
-      {
-        if (getAnalyzerConfig().isWSDLReferenceSet())
-        {
-          // Otherwise use the WSDL options to get the WSDL location
-          wsdlURI = getAnalyzerConfig().getWSDLLocation();
-        }
-      }
-
-      // Indicate that we are done with this artifact
-      this.reporter.endCurrentArtifact();
-
-      // --------------------------------
-      // DESCRIPTION ARTIFACT:
-      // --------------------------------
-
-      // Set current artifact
-      reportArtifact =
-        setCurrentArtifact(ArtifactType.ARTIFACT_TYPE_DESCRIPTION);
-
-      // Call WSDLValidator
-      if (wsdlValidator == null)
-      {
-        wsdlValidator = factory.newWSDLValidator();
-      }
-      wsdlDocument =
-        validateWSDL(
-          reportArtifact,
-          wsdlValidator,
-          wsdlURI,
-          wsdlDocument);
-
-      // If WSDL document object is null, then throw exception
-      if ((wsdlDocument == null) && (getAnalyzerConfig().isWSDLReferenceSet()))
-      {
-        throw new WSIException(
-          messageList.getMessage(
-            "config05",
-            "WSDL document was either not found or could not be processed."));
-      }
-
-      // Indicate that we are done with this artifact
-      this.reporter.endCurrentArtifact();
-
-      // REMOVE:
-      // If processing log entries and there isn't a WSDL URI, 
-      // then throw an exception since it is required to process the log entries
-      //if ((wsdlURI == null) && (analyzerConfig.getLogLocation() != null)) {
-      //  throw new WSIException("Must specify the WSDL document location to validate message log.");
-      //}
-
-      // --------------------------------
-      // MESSAGE ARTIFACT:
-      // --------------------------------
-
-      // Set current artifact
-      reportArtifact = setCurrentArtifact(ArtifactType.ARTIFACT_TYPE_MESSAGE);
-
-      // Process test assertions for the messages
-      validateMessages(
-        reportArtifact,
-        factory.newMessageValidator(),
-        wsdlDocument);
-
-      // Indicate that we are done with this artifact
-      this.reporter.endCurrentArtifact();
-
-      // --------------------------------
-      // ENVELOPE ARTIFACT:
-      // --------------------------------
-
-      // If that is not the Basic Profile 1.0, then process
-      // the envelope artifact
-      if (!profileAssertions.getTADName()
-        .equals(WSIConstants.BASIC_PROFILE_TAD_NAME))
-      {
-
-        // Set current artifact
-        reportArtifact = setCurrentArtifact(ArtifactType.ARTIFACT_TYPE_ENVELOPE);
-
-        // Process test assertions for the envelopes
-        validateEnvelopes(
-          reportArtifact,
-          factory.newEnvelopeValidator(),
-          wsdlDocument);
-
-        // Indicate that we are done with this artifact
-        this.reporter.endCurrentArtifact();
+      // Walk through the artifact elements from the TAD, validating each one
+      profileAssertions.getArtifactList().keySet().iterator();
+      for (Iterator i = profileAssertions.getArtifactList().keySet().iterator();
+              i.hasNext(); ) {
+          String artifactType = (String) i.next();
+          // Set current artifact
+          reportArtifact = setCurrentArtifact(ArtifactType.getArtifactType(
+                  artifactType));
+          validate(reportArtifact, factory.getValidatorForArtifact(
+                  artifactType));
+          this.reporter.endCurrentArtifact();
       }
 
       // Finish the conformance report
@@ -324,181 +322,28 @@
   }
 
   /**
-   * Run UDDI test assertions.
+   * Run test assertions.
    */
-  private String validateUDDI(
-    ReportArtifact reportArtifact,
-    UDDIValidator uddiValidator)
-    throws WSIException
+  private void validate(ReportArtifact reportArtifact, BaseValidator validator)
+          throws WSIException 
   {
-    String wsdlURI = null;
-
-    // Init UDDIValidator
-    uddiValidator.init(
-      this.analyzerContext,
-      this.profileAssertions.getArtifact(ArtifactType.TYPE_DISCOVERY),
-      reportArtifact,
-      getAnalyzerConfig().getUDDIReference(),
-      this.reporter);
-
-    // Call UDDIValidator 
-    if (getAnalyzerConfig().isUDDIReferenceSet())
-    {
-      wsdlURI = uddiValidator.validate();
-
-      // Cleanup
-      uddiValidator.cleanup();
-    }
-
+    if (validator instanceof WSDLValidatorImpl)
+	{
+    	((WSDLValidatorImpl)validator).init(analyzerContext, profileAssertions, reportArtifact, getAnalyzerConfig(), reporter,
+    			getAnalyzerConfigIndex() == 0);
+	}
     else
     {
-      // Set all missingInput
-      uddiValidator.setAllMissingInput();
+      validator.init(analyzerContext, profileAssertions, reportArtifact, getAnalyzerConfig(), reporter);
     }
 
-    return wsdlURI;
-  }
-
-  /**
-   * Run WSDL test assertions.
-   */
-  private WSDLDocument validateWSDL(
-    ReportArtifact reportArtifact,
-    WSDLValidator wsdlValidator,
-    String wsdlURI,
-    WSDLDocument document)
-    throws WSIException
-  {
-    WSDLDocument returnWSDLDocument = null;
-
-    // TODO: The instanceof check is needed to avoid an API change
-    // in the WTP 1.5.1 release. We should clean this up later.
-    // Init WSDLValidator
-    if (wsdlValidator instanceof WSDLValidatorImpl)
+    if (validator.runTests()) {
+        validator.validateArtifact();
+        validator.cleanup();
+    } 
+    else 
     {
-      ((WSDLValidatorImpl)wsdlValidator).init(
-        this.analyzerContext,
-        this.profileAssertions.getArtifact(ArtifactType.TYPE_DESCRIPTION),
-        reportArtifact,
-        wsdlURI,
-        document,
-        this.reporter,
-        getAnalyzerConfigIndex() == 0);
-    }
-    else
-    {
-      wsdlValidator.init(
-        this.analyzerContext,
-        this.profileAssertions.getArtifact(ArtifactType.TYPE_DESCRIPTION),
-        reportArtifact,
-        wsdlURI,
-        document,
-        this.reporter);
-    }
-
-    // If a WSDL URI was specified or located in a UDDI registry, then process the WSDL tests
-    if (wsdlURI != null || document != null)
-    {
-      // Call WSDLValidator 
-      returnWSDLDocument = wsdlValidator.validate();
-
-      // Cleanup
-      wsdlValidator.cleanup();
-    }
-
-    else
-    {
-      // Set all missingInput
-      wsdlValidator.setAllMissingInput();
-    }
-
-    return returnWSDLDocument;
-  }
-
-  /**
-   * Run message test assertions.
-   */
-  private void validateMessages(
-    ReportArtifact reportArtifact,
-    MessageValidator messageValidator,
-    WSDLDocument document)
-    throws WSIException
-  {
-    //Log log = null;
-    //MessageEntry logEntry = null;
-
-    // Init MessageValidator
-    messageValidator.init(
-      this.analyzerContext,
-      this.profileAssertions.getArtifact(ArtifactType.TYPE_MESSAGE),
-      reportArtifact,
-      document,
-      this.reporter);
-
-    // If the log file location was specified, then process test assertions for the messages
-    if (getAnalyzerConfig().getLogLocation() != null)
-    {
-      // Get the log file reader
-      LogReader logReader = documentFactory.newLogReader();
-
-      // Create log reader callback
-      MessageProcessor messageProcessor =
-        new MessageProcessor(messageValidator);
-
-      // Start reading the log file
-      logReader.readLog(getAnalyzerConfig().getLogLocation(), messageProcessor);
-
-      // Cleanup
-      messageValidator.cleanup();
-    }
-
-    // Otherwise all are missingInput
-    else
-    {
-      // Set all missingInput
-      messageValidator.setAllMissingInput();
-    }
-  }
-
-  /**
-   * Run envelope test assertions.
-   */
-  private void validateEnvelopes(
-    ReportArtifact reportArtifact,
-    EnvelopeValidator envelopeValidator,
-    WSDLDocument document)
-    throws WSIException
-  {
-    // Init envelopeValidator
-    envelopeValidator.init(
-      this.analyzerContext,
-      this.profileAssertions.getArtifact(ArtifactType.TYPE_ENVELOPE),
-      reportArtifact,
-      document,
-      this.reporter);
-
-    // If the log file location was specified, then process test assertions for the messages
-    if (getAnalyzerConfig().getLogLocation() != null)
-    {
-      // Get the log file reader
-      LogReader logReader = documentFactory.newLogReader();
-
-      // Create log reader callback
-      EnvelopeProcessor envelopeProcessor =
-        new EnvelopeProcessor(envelopeValidator);
-
-      // Start reading the log file
-      logReader.readLog(getAnalyzerConfig().getLogLocation(), envelopeProcessor);
-
-      // Cleanup
-      envelopeValidator.cleanup();
-    }
-
-    // Otherwise all are missingInput
-    else
-    {
-      // Set all missingInput
-      envelopeValidator.setAllMissingInput();
+      validator.setAllMissingInput();
     }
   }
 
@@ -612,74 +457,4 @@
     }
     t.printStackTrace();
   }
-
-  /**
-   * Message processor class.
-   */
-  class MessageProcessor implements MessageEntryHandler
-  {
-    MessageValidator messageValidator = null;
-
-    /**
-     * Create message processor as a log reader callback function.
-     */
-    MessageProcessor(MessageValidator messageValidator)
-    {
-      this.messageValidator = messageValidator;
-    }
-
-    /**
-     * Process artifact reference.
-     */
-    public void processArtifactReference(ArtifactReference artifactReference)
-      throws WSIException
-    {
-      reporter.addArtifactReference(artifactReference);
-    }
-
-    /**
-     * Process a single log entry.
-     */
-    public void processLogEntry(EntryContext entryContext) throws WSIException
-    {
-      // Validate message
-      messageValidator.validate(entryContext);
-    }
-
-  }
-
-  /**
-   * Envelope processor class.
-   */
-  class EnvelopeProcessor implements MessageEntryHandler
-  {
-    EnvelopeValidator envelopeValidator = null;
-
-    /**
-     * Create envelope processor as a log reader callback function.
-     */
-    EnvelopeProcessor(EnvelopeValidator envelopeValidator)
-    {
-      this.envelopeValidator = envelopeValidator;
-    }
-
-    /**
-     * Process artifact reference.
-     */
-    public void processArtifactReference(ArtifactReference artifactReference)
-      throws WSIException
-    {
-      reporter.addArtifactReference(artifactReference);
-    }
-
-    /**
-     * Process a single log entry.
-     */
-    public void processLogEntry(EntryContext entryContext) throws WSIException
-    {
-      // Validate envelopes
-      envelopeValidator.validate(entryContext);
-    }
-
-  }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/CandidateInfo.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/CandidateInfo.java
index 553cbee..6fe828d 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/CandidateInfo.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/CandidateInfo.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.analyzer;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -575,35 +576,38 @@
   {
 
     HashSet importSet = new HashSet();
+    importSet =  getAllImports(new ArrayList(), rootDef);
+    return (importSet);
+  }
+  
+  private HashSet getAllImports(List alreadyProcessedDefinitions, Definition rootDef) 
+  {
+	HashSet importSet = new HashSet();
+	if ((rootDef != null) && (!alreadyProcessedDefinitions.contains(rootDef)))
+	{
+      alreadyProcessedDefinitions.add(rootDef);	
+	  Map importMap = rootDef.getImports();
+      Iterator i = importMap.values().iterator();
 
-    Map importMap = rootDef.getImports();
-    Iterator i = importMap.values().iterator();
-
-    while (i.hasNext())
-    {
-      List nextImportList = (List) (i.next());
-      Iterator listIt = nextImportList.iterator();
-      while (listIt.hasNext())
+      while (i.hasNext())
       {
-        Import nextImport = (Import) listIt.next();
-        if (nextImport != null)
+        List nextImportList = (List) (i.next());
+        Iterator listIt = nextImportList.iterator();
+        while (listIt.hasNext())
         {
-          // its a wsdl document
-          importSet.add(nextImport);
-          if (nextImport.getDefinition() != null)
+          Import nextImport = (Import) listIt.next();
+          if (nextImport != null)
           {
-            HashSet subTreeImports = getAllImports(nextImport.getDefinition());
-            Iterator subIt = subTreeImports.iterator();
-            while (subIt.hasNext())
-            {
-              importSet.add((Import) (subIt.next()));
-            }
+            importSet.add(nextImport);
+            Definition def = nextImport.getDefinition();
+       	    HashSet nestedImports = getAllImports(alreadyProcessedDefinitions, def);
+            for (Iterator j = nestedImports.iterator(); j.hasNext();)
+              importSet.add(j.next());
           }
         }
       }
     }
-
-    return (importSet);
+    return importSet;
   }
 
   /**
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/AnalyzerConfigReaderImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/AnalyzerConfigReaderImpl.java
index 1a4de86..da991ca 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/AnalyzerConfigReaderImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/AnalyzerConfigReaderImpl.java
@@ -28,7 +28,7 @@
 import org.eclipse.wst.wsi.internal.core.analyzer.config.WSDLReference;
 import org.eclipse.wst.wsi.internal.core.common.AddStyleSheet;
 import org.eclipse.wst.wsi.internal.core.common.impl.AddStyleSheetImpl;
-import org.eclipse.wst.wsi.internal.core.util.EntryType;
+import org.eclipse.wst.wsi.internal.core.profile.validator.WSDLValidator;
 import org.eclipse.wst.wsi.internal.core.util.MessageList;
 import org.eclipse.wst.wsi.internal.core.util.TestUtils;
 import org.eclipse.wst.wsi.internal.core.xml.XMLUtils;
@@ -381,20 +381,20 @@
     if (((wsdlReference
       .getWSDLElement()
       .getType()
-      .equalsIgnoreCase(EntryType.TYPE_DESCRIPTION_PORT))
+      .equalsIgnoreCase(WSDLValidator.TYPE_DESCRIPTION_PORT))
       || (wsdlReference
         .getWSDLElement()
         .getType()
-        .equalsIgnoreCase(EntryType.TYPE_DESCRIPTION_OPERATION)))
+        .equalsIgnoreCase(WSDLValidator.TYPE_DESCRIPTION_OPERATION)))
       && (wsdlReference.getWSDLElement().getParentElementName() == null))
     {
       throw new IllegalArgumentException(
         getMessage(
           "config09",
           "The parentElementName attribute must be specified with a WSDL type of "
-            + EntryType.TYPE_DESCRIPTION_PORT
+            + WSDLValidator.TYPE_DESCRIPTION_PORT
             + " or "
-            + EntryType.TYPE_DESCRIPTION_OPERATION
+            + WSDLValidator.TYPE_DESCRIPTION_OPERATION
             + "."));
     }
   }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/WSDLElementImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/WSDLElementImpl.java
index ff14b85..fec67d4 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/WSDLElementImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/analyzer/config/impl/WSDLElementImpl.java
@@ -17,7 +17,7 @@
 
 import org.eclipse.wst.wsi.internal.core.WSIConstants;
 import org.eclipse.wst.wsi.internal.core.analyzer.config.WSDLElement;
-import org.eclipse.wst.wsi.internal.core.util.EntryType;
+import org.eclipse.wst.wsi.internal.core.profile.validator.WSDLValidator;
 
 /**
  * The implementation for WSDL definitions. 
@@ -117,7 +117,7 @@
    */
   public boolean isPort()
   {
-    return type.equals(EntryType.TYPE_DESCRIPTION_PORT);
+    return type.equals(WSDLValidator.TYPE_DESCRIPTION_PORT);
   }
 
   /**
@@ -125,7 +125,7 @@
    */
   public boolean isBinding()
   {
-    return type.equals(EntryType.TYPE_DESCRIPTION_BINDING);
+    return type.equals(WSDLValidator.TYPE_DESCRIPTION_BINDING);
   }
 
   /**
@@ -133,7 +133,7 @@
    */
   public boolean isPortType()
   {
-    return type.equals(EntryType.TYPE_DESCRIPTION_PORTTYPE);
+    return type.equals(WSDLValidator.TYPE_DESCRIPTION_PORTTYPE);
   }
 
   /**
@@ -141,7 +141,7 @@
    */
   public boolean isOperation()
   {
-    return type.equals(EntryType.TYPE_DESCRIPTION_OPERATION);
+    return type.equals(WSDLValidator.TYPE_DESCRIPTION_OPERATION);
   }
 
   /**
@@ -149,7 +149,7 @@
    */
   public boolean isMessage()
   {
-    return type.equals(EntryType.TYPE_DESCRIPTION_MESSAGE);
+    return type.equals(WSDLValidator.TYPE_DESCRIPTION_MESSAGE);
   }
 
   /**
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java
index b4dfc80..d34ca77 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/LogBuilder.java
@@ -103,9 +103,13 @@
     for (Iterator i = requestResponses.iterator(); i.hasNext();)
     {
       RequestHandler rr = (RequestHandler)i.next();
-      if ((rr != null) && (!omitRequestResponse(rr)))
-      {
-        logRequestResponse(rr);
+      if (rr != null) {
+          try {
+              logRequestResponse(rr);
+          } catch (Exception e) {
+              /* Empty catch block.  This request/response pair is not a valid SOAP
+               * message, so skip it. */
+          }
       }
     }
     return log;
@@ -126,41 +130,53 @@
   {
     if (rr != null)
     {
-      String requestHeader = new String(rr.getRequestHeader());
-      String responseHeader = new String(rr.getResponseHeader());
-      
-      byte[] unchunkedRequestBody = rr.getRequestContent();
-      byte[] unchunkedResponseBody = rr.getResponseContent();
+      byte[] requestHeaderBytes = rr.getRequestHeader();
+      byte[] responseHeaderBytes = rr.getResponseHeader();
  
-      long timestamp = rr.getDate().getTime();
-      String localHostAndPort = "localhost:" + rr.getLocalPort();
-      String remoteHostAndPort = rr.getRemoteHost() + ":" + rr.getRemotePort();
+      if ((requestHeaderBytes != null) || (responseHeaderBytes != null))
+      {
+        long timestamp = rr.getDate().getTime();
+        String localHostAndPort = "localhost:" + rr.getLocalPort();
+        String remoteHostAndPort = rr.getRemoteHost() + ":" + rr.getRemotePort();
 
-      int requestId  = getNextAvailableId();
-      int responseId = getNextAvailableId();
-      int conversationId = getNextAvailableConversationId();
-
-      MessageEntry messageEntryRequest = createMessageEntry(requestId, conversationId, 
+        int conversationId = getNextAvailableConversationId();
+        try
+        {
+          if (requestHeaderBytes != null)
+          {
+            String requestHeader = new String(requestHeaderBytes);
+            byte[] unchunkedRequestBody = rr.getRequestContent();
+            int requestId  = getNextAvailableId();
+            
+            MessageEntry messageEntryRequest = createMessageEntry(requestId, conversationId, 
                 MessageEntry.TYPE_REQUEST, timestamp, localHostAndPort,
                 remoteHostAndPort, unchunkedRequestBody, requestHeader);
 
-      MessageEntry messageEntryResponse = createMessageEntry(responseId, conversationId, 
+            if (messageEntryRequest != null)
+            {
+              log.addLogEntry(messageEntryRequest);
+            }
+          }
+          if (responseHeaderBytes != null)
+          {
+            String responseHeader = new String(responseHeaderBytes);
+            byte[] unchunkedResponseBody = rr.getResponseContent();
+            int responseId = getNextAvailableId();
+            
+            MessageEntry messageEntryResponse = createMessageEntry(responseId, conversationId, 
                 MessageEntry.TYPE_RESPONSE, timestamp + rr.getResponseTime(), remoteHostAndPort,
                 localHostAndPort, unchunkedResponseBody, responseHeader);
-      try
-      {
-        if ((messageEntryRequest != null) &&
-            (messageEntryResponse != null) &&
-            ((messageEntryRequest.isMimeContent()) ||
-			 (isMessageWithBrackets(messageEntryRequest.getMessage()))))
-        {
-                log.addLogEntry(messageEntryRequest);
-               log.addLogEntry(messageEntryResponse);
+ 
+            if (messageEntryResponse != null)
+            {
+              log.addLogEntry(messageEntryResponse);
+            }
+          }
         }
-      }
-      catch (Exception e)
-      {
-        // ignore the request response pair
+        catch (Exception e)
+        {
+          // ignore the request response pair
+        }
       }
     }
   }
@@ -254,7 +270,14 @@
     	if (mimeParts == null)
     	{
     	  // problem creating Mimeparts -- treat it as simple SOAP message
-    	  messageEntry.setMessage(new String(messageContent));
+    	  if (messageContent != null)
+    	  {
+    	    messageEntry.setMessage(new String(messageContent));
+    	  }
+    	  else
+    	  {
+    	    messageEntry.setMessage("");
+    	  }
     	  messageEntry.setMimeContent(false);
     	}
     	else
@@ -266,7 +289,14 @@
     else
     {
       // Get the message content
-      messageEntry.setMessage(new String(messageContent));
+      if (messageContent != null)
+      {
+        messageEntry.setMessage(new String(messageContent));
+      }
+      else
+      {
+        messageEntry.setMessage("");
+      }
       messageEntry.setMimeContent(false);
     }
     return messageEntry;
@@ -302,30 +332,6 @@
   }
 
   /**
-   * Check for HTTP messages that should not be logged.
-   * @param rr: a request-response pair.
-   * @return true if the request-response pair should be omitted from the log.
-   */
-  private boolean omitRequestResponse(RequestHandler rr) 
-  {
-    boolean omit = false;
-    if (rr != null)
-    {
-      String request = rr.getRequestHeader().toString();
-      if ((request != null) &&
-          ((request.startsWith("CONNECT")) ||
-           (request.startsWith("TRACE")) || 
-           (request.startsWith("DELETE")) || 
-           (request.startsWith("OPTIONS")) || 
-           (request.startsWith("HEAD"))))
-      { 
-        omit = true;
-      }
-    }
-    return omit;
-  }
-
-  /**
    * Write log out to file.
    * @param log: log to be written to file.
    */
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java
index f92971d..67aa763 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/log/impl/LogReaderImpl.java
@@ -27,6 +27,7 @@
 import org.eclipse.wst.wsi.internal.core.monitor.config.Comment;
 import org.eclipse.wst.wsi.internal.core.monitor.config.impl.CommentImpl;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
+import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.report.ArtifactReference;
 import org.eclipse.wst.wsi.internal.core.report.Entry;
 import org.eclipse.wst.wsi.internal.core.report.impl.ArtifactReferenceImpl;
@@ -558,8 +559,7 @@
 
           // Add log entry to the list
           messageEntryList.add(messageEntryRequest);
-
-          // Request is now processed only when the response is received.             
+          // Request is now processed only when the response is received.
         }
 
         else if (MessageEntry.TYPE_RESPONSE.equalsIgnoreCase(type))
@@ -578,9 +578,6 @@
                 mimeParts,
                 entryElementLocation);
 
-          // Add log entry to the list
-          messageEntryList.add(messageEntryResponse);
-
           if (logEntryHandler != null)
           {
             // look up the request message
@@ -589,41 +586,48 @@
 
             if (messageEntryRequest != null)
             {
-              // Create entry 
-              // ADD: Need to create entry from report
-              //Entry entry = this.reporter.getReport().createEntry();
-              Entry entry = new EntryImpl();
-              entry.setEntryType(
-                  EntryType.getEntryType(EntryType.TYPE_MESSAGE_REQUEST));
-              entry.setReferenceID(messageEntryRequest.getId());
-              entry.setEntryDetail(messageEntryRequest);
-
-              // Create the context for the request-response pair
-              EntryContext requestTargetContext =
-                new EntryContext(
-                    entry,
-                    messageEntryRequest,
-                    messageEntryResponse);
-              if (requestTargetContext != null)
-                processLogEntry(requestTargetContext);
+              if (!isMessageEncrypted(messageEntryRequest.getMessage()) &&
+                  !isMessageEncrypted(messageEntryResponse.getMessage()))
+              {
+	        if (!omitRequest(messageEntryRequest))
+	        {
+	          // Create entry 
+	          // ADD: Need to create entry from report
+	          //Entry entry = this.reporter.getReport().createEntry();
+	          Entry entry = new EntryImpl();
+	          entry.setEntryType(
+	                EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_REQUEST));
+	          entry.setReferenceID(messageEntryRequest.getId());
+	          entry.setEntryDetail(messageEntryRequest);
+	
+	          // Create the context for the request-response pair
+	          EntryContext requestTargetContext =
+	               new EntryContext(
+	                    entry,
+	                    messageEntryRequest,
+	                    messageEntryResponse);
+	          if (requestTargetContext != null)
+	            processLogEntry(requestTargetContext);
+	
+	          // Create entry 
+	          // ADD: Need to create entry from report
+	          //Entry entry = this.reporter.getReport().createEntry();
+	          entry = new EntryImpl();
+	          entry.setEntryType(
+	            EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_RESPONSE));
+	          entry.setReferenceID(messageEntryResponse.getId());
+	          entry.setEntryDetail(messageEntryResponse);
+	
+	          EntryContext responseTargetContext =
+	                new EntryContext(
+	                  entry,
+	                  messageEntryRequest,
+	                  messageEntryResponse);
+	          if (responseTargetContext != null)
+	            processLogEntry(responseTargetContext);
+	        }
+	      }
             }
-
-            // Create entry 
-            // ADD: Need to create entry from report
-            //Entry entry = this.reporter.getReport().createEntry();
-            Entry entry = new EntryImpl();
-            entry.setEntryType(
-                EntryType.getEntryType(EntryType.TYPE_MESSAGE_RESPONSE));
-            entry.setReferenceID(messageEntryResponse.getId());
-            entry.setEntryDetail(messageEntryResponse);
-
-            EntryContext responseTargetContext =
-              new EntryContext(
-                  entry,
-                  messageEntryRequest,
-                  messageEntryResponse);
-            if (responseTargetContext != null)
-              processLogEntry(responseTargetContext);
           }
         }
       }
@@ -641,6 +645,23 @@
       //once message validation is done.
       //if (msgValidator!=null)
       //logEntryList.clear();
+        
+        /* Process all remaining requests in the messageEntryList */
+        for (int i = 0; i < messageEntryList.size(); i++) {
+            MessageEntry logEntry = (MessageEntry) messageEntryList.get(i);
+            if (!omitRequest(logEntry))
+            {
+              Entry entry = new EntryImpl();
+              entry.setEntryType(EntryType.getEntryType(
+                    MessageValidator.TYPE_MESSAGE_REQUEST));
+              entry.setReferenceID(logEntry.getId());
+              entry.setEntryDetail(logEntry);
+              EntryContext requestTargetContext =
+                new EntryContext(entry, logEntry, null);
+              if (requestTargetContext != null)
+                processLogEntry(requestTargetContext);
+            }
+        }
     }
 
     /**
@@ -697,26 +718,30 @@
     // could be made more efficient by keeping a much smaller list of unresponded requests...
     public MessageEntry findRelatedRequest(MessageEntry logEntryResponse)
     {
-      for (int entry = messageEntryList.size() - 1; entry >= 0; entry--)
+      if (logEntryResponse != null)
       {
-        // Get the log entry of the matching request
-        MessageEntry logEntry = (MessageEntry) messageEntryList.get(entry);
-        // Ignore own entry
-        if (!logEntryResponse.equals(logEntry))
+        for (int entry = messageEntryList.size() - 1; entry >= 0; entry--)
         {
-          if (logEntryResponse
-            .getConversationId()
-            .equals(logEntry.getConversationId()))
+          // Get the log entry of the matching request
+          MessageEntry logEntry = (MessageEntry) messageEntryList.get(entry);
+          // Ignore own entry
+          if (!logEntryResponse.equals(logEntry))
           {
-            // found the most recently read message with the same conversationID.
-            // From above, this should be the corresponding request. Check as far as possible.
-            if (logEntry.getType().equals(MessageEntry.TYPE_REQUEST))
+            if (logEntryResponse
+              .getConversationId()
+              .equals(logEntry.getConversationId()))
             {
-              return logEntry;
-            }
-            else
-            {
-              return null; // expected a request. need to throw an exception!
+              // found the most recently read message with the same conversationID.
+              // From above, this should be the corresponding request. Check as far as possible.
+              if (logEntry.getType().equals(MessageEntry.TYPE_REQUEST))
+              {
+                messageEntryList.remove(entry);
+                return logEntry;
+              }
+              else
+              {
+                return null; // expected a request. need to throw an exception!
+              }
             }
           }
         }
@@ -781,4 +806,52 @@
     }
 
   } //End ContentHandler
+  
+  /**
+   * Check for HTTP messages that should not be logged.
+   * @param rr: a request-response pair.
+   * @return true if the request-response pair should be omitted from the log.
+   */
+  private boolean omitRequest(MessageEntry messageEntryRequest)
+  {
+    boolean omit = false;
+    if (messageEntryRequest == null)
+       omit = true;
+    else
+    {
+      String requestHeaders = messageEntryRequest.getHTTPHeaders();
+      if ((requestHeaders != null) &&
+          ((requestHeaders.startsWith("CONNECT")) ||
+           (requestHeaders.startsWith("TRACE")) || 
+           (requestHeaders.startsWith("DELETE")) || 
+           (requestHeaders.startsWith("OPTIONS")) || 
+           (requestHeaders.startsWith("HEAD")) ||
+           ((requestHeaders.startsWith("GET")) &&
+        	(!isMessageWithBrackets(messageEntryRequest.getMessage())))))
+      { 
+        omit = true;
+      }
+    }
+    return omit;
+  }
+
+  /**
+   * Returns true if the content of the message has at least
+   * one left and one right bracket.
+   * @param message: a message content.
+   * @return true if the content of the message has at least
+   *         one left and one right bracket.
+   */
+  public boolean isMessageWithBrackets(String message)
+  {
+    return ((message != null) && 
+            (message.indexOf("<")!= -1) && 
+            (message.indexOf(">") != -1));
+  }
+  
+  private boolean isMessageEncrypted(String message)
+  {
+    return ((message != null) && 
+	    (message.indexOf("<EncryptedKey ") != -1));
+  }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/impl/ProfileAssertionsReaderImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/impl/ProfileAssertionsReaderImpl.java
index 11f6aa3..cfe0dba 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/impl/ProfileAssertionsReaderImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/impl/ProfileAssertionsReaderImpl.java
@@ -275,7 +275,7 @@
 
           // Set type
           artifact.setType(
-            ArtifactType.newArtifactType(
+            ArtifactType.getArtifactType(
               atts.getValue(WSIConstants.ATTR_TYPE)));
 
           // ADD: Get specification list
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/BaseValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/BaseValidator.java
index 7289ed0..52e702a 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/BaseValidator.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/BaseValidator.java
@@ -11,6 +11,11 @@
 package org.eclipse.wst.wsi.internal.core.profile.validator;
 
 import org.eclipse.wst.wsi.internal.core.WSIException;
+import org.eclipse.wst.wsi.internal.core.analyzer.AnalyzerContext;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.AnalyzerConfig;
+import org.eclipse.wst.wsi.internal.core.profile.ProfileAssertions;
+import org.eclipse.wst.wsi.internal.core.report.ReportArtifact;
+import org.eclipse.wst.wsi.internal.core.report.Reporter;
 import org.w3c.dom.Document;
 
 /**
@@ -47,4 +52,47 @@
     String baseURI,
     String schema)
     throws WSIException;
+
+  /**
+   * Initiailize validation test procedure.
+   * @param analyzerContext the analyzerContext.
+   * @param assertions      the assertions
+   * @param reportArtifact  the report artifact.
+   * @param analyzerConfig  the analyzerConfig
+   * @param reporter        the reporter which is used to add errors to the
+   *                        conformance report
+   * @throws WSIException   if message validator could not be initialized.
+   */
+  public void init(
+    AnalyzerContext analyzerContext,
+    ProfileAssertions assertions,
+    ReportArtifact reportArtifact,
+    AnalyzerConfig analyzerConfig,
+    Reporter reporter)
+    throws WSIException;
+
+  /**
+   * Determines if this validator should be run (depending on the analyzer
+   * config)
+   * @return boolean  true if validator should be run, false if not
+   */
+  public boolean runTests();
+
+  /**
+   * Run the validator
+   * @throws WSIException if an unexpected error occurs during validation
+   */
+  public void validateArtifact() throws WSIException;
+  
+  /**
+   * Get the artifact type that this validator applies to.
+   * @return the artifact type (a String)
+   */
+  public String getArtifactType();
+
+  /**
+   * Get the collection of entry types that this validator applies to.
+   * @return an array of entry types (Strings)
+   */
+  public String[] getEntryTypes();
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EntryContext.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EntryContext.java
index 08bb99a..4dbd893 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EntryContext.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EntryContext.java
@@ -87,16 +87,18 @@
           requestDocument = XMLUtils.parseXML(request.getMessage());
       }
 
-      if(response.isMimeContent()) 
-      {
-      	MimePart part = response.getMimeParts().getRootPart();
-      	if ((part != null) && (part.getContent().length() > 0))
-          responseDocument = XMLUtils.parseXML(part.getContent());
-      }
-      else 
-      {
-        if (response.getMessage().length() > 0)
-          responseDocument = XMLUtils.parseXML(response.getMessage());
+      if (response != null) {
+          if(response.isMimeContent()) 
+          {
+          	MimePart part = response.getMimeParts().getRootPart();
+          	if ((part != null) && (part.getContent().length() > 0))
+              responseDocument = XMLUtils.parseXML(part.getContent());
+          }
+          else 
+          {
+            if (response.getMessage().length() > 0)
+              responseDocument = XMLUtils.parseXML(response.getMessage());
+          }
       }
     }
 
@@ -105,7 +107,7 @@
     }
 
     // need some exception handling in here and more careful checking
-    if (entry.getEntryType().equals(EntryType.ENTRY_TYPE_REQUEST))
+    if (entry.getEntryType().equals(EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_REQUEST)))
     {
       this.messageEntry = request;
       this.messageEntryDocument = requestDocument;
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EnvelopeValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EnvelopeValidator.java
index 4b1f3c9..c0dcc99 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EnvelopeValidator.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/EnvelopeValidator.java
@@ -22,7 +22,7 @@
  *
  * @version 1.0
  */
-public interface EnvelopeValidator extends BaseValidator
+public interface EnvelopeValidator extends LogValidator
 {
 
   /**
@@ -33,6 +33,11 @@
    * @param wsdlDocument the Web service definition
    * @param reporter the reporter which is used to add errors to the conformance report
    * @throws WSIException if message validator could not be initialized.
+   * @deprecated -- use init(AnalyzerContext analyzerContext,
+   *                         ProfileAssertions assertions,
+   *                         ReportArtifact reportArtifact,
+   *                         AnalyzerConfig analyzerConfig,
+   *                         Reporter reporter)
    */
   public void init(
     AnalyzerContext analyzerContext,
@@ -41,12 +46,16 @@
     WSDLDocument wsdlDocument,
     Reporter reporter)
     throws WSIException;
+  
+  /** Envelope artifact type */
+  public static final String TYPE_ENVELOPE = "envelope";
 
-  /**
-   * Validate the envelope located by the log entry. 
-   * @param entryContext a log entry locating an envelope.
-   * @throws WSIException if an unexpected error occurred while
-   *         processing the log entry.
-   */
-  public void validate(EntryContext entryContext) throws WSIException;
+  /** Request envelope entry type. */
+  public static final String TYPE_ENVELOPE_REQUEST = "requestEnvelope";
+
+  /** Response envelope entry type. */
+  public static final String TYPE_ENVELOPE_RESPONSE = "responseEnvelope";
+
+  /** Any envelope entry type. */
+  public static final String TYPE_ENVELOPE_ANY = "anyEnvelope";
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/LogValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/LogValidator.java
new file mode 100644
index 0000000..454ddb9
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/LogValidator.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2002-2005 IBM Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   IBM - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.wsi.internal.core.profile.validator;
+
+import org.eclipse.wst.wsi.internal.core.WSIException;
+
+/**
+ * Interface definition for validation test procedures common to envelopes and
+ * messages.
+ */
+public interface LogValidator extends BaseValidator {
+    /**
+     * Validate the envelope located by the log entry. 
+     * @param entryContext a log entry locating an envelope.
+     * @throws WSIException if an unexpected error occurred while
+     *         processing the log entry.
+     */
+    public void validate(EntryContext entryContext) throws WSIException;
+}
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/MessageValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/MessageValidator.java
index 13618a3..5a53f4b 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/MessageValidator.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/MessageValidator.java
@@ -24,7 +24,7 @@
  * @author Peter Brittenham
  * @author Graham Turrell (gturrell@uk.ibm.com)
  */
-public interface MessageValidator extends BaseValidator
+public interface MessageValidator extends LogValidator
 {
   /**
    * HTTP 1.0 version indicator.
@@ -41,6 +41,24 @@
    */
   public static final String HTTP_POST = "POST";
 
+  /** Message artifact type */
+  public static final String TYPE_MESSAGE = "message";
+
+  /** Request message entry type. */
+  public static final String TYPE_MESSAGE_REQUEST = "requestMessage";
+
+  /** Response message entry type. */
+  public static final String TYPE_MESSAGE_RESPONSE = "responseMessage";
+
+  /** Any message entry type. */
+  public static final String TYPE_MESSAGE_ANY = "anyMessage";
+
+  /** Mime part message entry type. */
+  public static final String TYPE_MIME_PART = "part";
+
+  /** Mime root part message entry type. */
+  public static final String TYPE_MIME_ROOT_PART = "root-part";
+
   /**
    * Initiailize validation test procedure.
    * @param analyzerContext the analyzerContext.
@@ -49,6 +67,11 @@
    * @param wsdlDocument the Web service definition
    * @param reporter the reporter which is used to add errors to the conformance report
    * @throws WSIException if message validator could not be initialized.
+   * @deprecated -- use init(AnalyzerContext analyzerContext,
+   *                         ProfileAssertions assertions,
+   *                         ReportArtifact reportArtifact,
+   *                         AnalyzerConfig analyzerConfig,
+   *                         Reporter reporter)
    */
   public void init(
     AnalyzerContext analyzerContext,
@@ -57,12 +80,4 @@
     WSDLDocument wsdlDocument,
     Reporter reporter)
     throws WSIException;
-
-  /**
-   * Validate the message located by the log entry. 
-   * @param entryContext a log entry locating a message.
-   * @throws WSIException if an unexpected error occurred while 
-   *         processing the log entry.
-   */
-  public void validate(EntryContext entryContext) throws WSIException;
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/ProfileValidatorFactory.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/ProfileValidatorFactory.java
index 3a19394..a16f1d3 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/ProfileValidatorFactory.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/ProfileValidatorFactory.java
@@ -21,10 +21,20 @@
  */
 public abstract class ProfileValidatorFactory
 {
+  /**
+   * Create a new instance of a validator depending on the given artifact name
+   * @param artifactName - String containing the artifact name from the TAD
+   * @return an object that implements the BaseValidator interface.
+   * @throws WSIException if the validator cannot be instantiated
+   */
+  public abstract BaseValidator getValidatorForArtifact(String artifactName)
+          throws WSIException;
+
   /** 
    * Create a new instance of a UDDI validator.
    * @return  an object that implements the WSDLValidator interface.
-   * @throws WSIException if UDDI validator cannot be instantiated. 
+   * @throws WSIException if UDDI validator cannot be instantiated.
+   * @deprecated -- use getValidatorForArtifact(String artifactName).
    */
   public abstract UDDIValidator newUDDIValidator() throws WSIException;
 
@@ -32,6 +42,7 @@
    * Create a new instance of a WSDL validator.
    * @return an object that implements the WSDLValidator interface. 
    * @throws WSIException if WSDL validator cannot be instantiated.
+   * @deprecated -- use getValidatorForArtifact(String artifactName).
    */
   public abstract WSDLValidator newWSDLValidator() throws WSIException;
 
@@ -41,7 +52,8 @@
    * message validator?
    *
    * @return an object that implements the MessageValidator interface.
-   * @throws WSIException if message validatorcannot be instantiated. 
+   * @throws WSIException if message validatorcannot be instantiated.
+   * @deprecated -- use getValidatorForArtifact(String artifactName).
    */
   public abstract MessageValidator newMessageValidator() throws WSIException;
 
@@ -49,6 +61,7 @@
    * Create a new instance of an envelope validator.
    * @return an object that implements the EnvelopeValidator interface.
    * @throws WSIException if message validator cannot be instantiated. 
+   * @deprecated -- use getValidatorForArtifact(String artifactName).
    */
   public abstract EnvelopeValidator newEnvelopeValidator() throws WSIException;
 
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/UDDIValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/UDDIValidator.java
index af18363..fc129bf 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/UDDIValidator.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/UDDIValidator.java
@@ -26,6 +26,15 @@
  */
 public interface UDDIValidator extends BaseValidator
 {
+  /** Discovery artifact type */
+  public static final String TYPE_DISCOVERY = "discovery";
+
+  /** Binding template discovery entry type. */
+  public static final String TYPE_DISCOVERY_BINDINGTEMPLATE = "bindingTemplate";
+
+  /** tModel discovery entry type. */
+  public static final String TYPE_DISCOVERY_TMODEL = "tModel";
+
   /**
    * Initiailize validation test procedure.
    * @param analyzerContext the analyzerContext.
@@ -34,6 +43,12 @@
    * @param uddiReference   a UDDI reference.
    * @param reporter        a Reporter object.
    * @throws WSIException if UDDI validator could not be initialized.
+   * @deprecated -- use init(AnalyzerContext analyzerContext,
+   *                         ProfileAssertions assertions,
+   *                         ReportArtifact reportArtifact,
+   *                         AnalyzerConfig analyzerConfig,
+   *                         Reporter reporter)
+
    */
   public void init(
     AnalyzerContext analyzerContext,
@@ -49,6 +64,7 @@
    *         is the URL for the WSDL document.
    * @throws WSIException WSIException if an unexpected error occurred
    *         while processing the UDDIentries.
+   * @deprecated -- use validateArtifact()
    */
   public String validate() throws WSIException;
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/WSDLValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/WSDLValidator.java
index e42bd2c..f5d8864 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/WSDLValidator.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/WSDLValidator.java
@@ -26,6 +26,33 @@
  */
 public interface WSDLValidator extends BaseValidator
 {
+  /** Description artifact type */
+  public static final String TYPE_DESCRIPTION = "description";
+	 
+  /** Definitions description entry type. */
+  public static final String TYPE_DESCRIPTION_DEFINITIONS = "definitions";
+
+  /** Import description entry type. */
+  public static final String TYPE_DESCRIPTION_IMPORT = "import";
+
+  /** Types description entry type. */
+  public static final String TYPE_DESCRIPTION_TYPES = "types";
+
+  /** Message description entry type. */
+  public static final String TYPE_DESCRIPTION_MESSAGE = "message";
+
+  /** Operation description entry type. */
+  public static final String TYPE_DESCRIPTION_OPERATION = "operation";
+
+  /** PortType description entry type. */
+  public static final String TYPE_DESCRIPTION_PORTTYPE = "portType";
+
+  /** Binding description entry type. */
+  public static final String TYPE_DESCRIPTION_BINDING = "binding";
+
+  /** Port description entry type. */
+  public static final String TYPE_DESCRIPTION_PORT = "port";
+
   /**
    * Initiailize validation test procedure.
    * @param analyzerContext the analyzerContext.
@@ -35,6 +62,11 @@
    * @param wsdlDocument    the WSDL document.
    * @param reporter        a Reporter object.
    * @throws WSIException if WSDL validator could not be initialized.
+   * @deprecated -- use init(AnalyzerContext analyzerContext,
+   *                         ProfileAssertions assertions,
+   *                         ReportArtifact reportArtifact,
+   *                         AnalyzerConfig analyzerConfig,
+   *                         Reporter reporter)
    */
   public void init(
     AnalyzerContext analyzerContext,
@@ -50,6 +82,7 @@
    * @return the WSDL document.
    * @throws WSIException if an unexpected error occurred
    *         while validating he WSDL based service description.
+   * @deprecated  -- use validateArtifact()
    */
   public WSDLDocument validate() throws WSIException;
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/BaseMessageValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/BaseMessageValidator.java
index 535ac24..42c058b 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/BaseMessageValidator.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/BaseMessageValidator.java
@@ -47,17 +47,25 @@
 import org.eclipse.wst.wsi.internal.core.analyzer.CandidateInfo;
 import org.eclipse.wst.wsi.internal.core.analyzer.ServiceReference;
 import org.eclipse.wst.wsi.internal.core.analyzer.config.AnalyzerConfig;
+import org.eclipse.wst.wsi.internal.core.document.DocumentFactory;
 import org.eclipse.wst.wsi.internal.core.log.Log;
+import org.eclipse.wst.wsi.internal.core.log.LogReader;
 import org.eclipse.wst.wsi.internal.core.log.MessageEntry;
+import org.eclipse.wst.wsi.internal.core.log.MessageEntryHandler;
 import org.eclipse.wst.wsi.internal.core.profile.ProfileArtifact;
+import org.eclipse.wst.wsi.internal.core.profile.ProfileAssertions;
 import org.eclipse.wst.wsi.internal.core.profile.TestAssertion;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
+import org.eclipse.wst.wsi.internal.core.profile.validator.LogValidator;
+import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.wsdl.WSDLValidatorImpl;
+import org.eclipse.wst.wsi.internal.core.report.ArtifactReference;
 import org.eclipse.wst.wsi.internal.core.report.FailureDetail;
 import org.eclipse.wst.wsi.internal.core.report.ReportArtifact;
 import org.eclipse.wst.wsi.internal.core.report.Reporter;
 import org.eclipse.wst.wsi.internal.core.util.EntryType;
 import org.eclipse.wst.wsi.internal.core.util.HTTPUtils;
+import org.eclipse.wst.wsi.internal.core.util.Utils;
 import org.eclipse.wst.wsi.internal.core.wsdl.WSDLDocument;
 import org.eclipse.wst.wsi.internal.core.wsdl.WSDLUtils;
 import org.eclipse.wst.wsi.internal.core.xml.XMLUtils;
@@ -85,6 +93,7 @@
  */
 public abstract class BaseMessageValidator
   extends BaseValidatorImpl
+  implements LogValidator
 {
   /**
   * WSDL document.
@@ -96,6 +105,24 @@
    */
   protected MessageEntry logEntry;
   protected Log log;
+  
+  private boolean testable;
+  private AnalyzerConfig analyzerConfig;
+
+  public void init(AnalyzerContext analyzerContext,
+          ProfileAssertions assertions,
+          ReportArtifact reportArtifact,
+          AnalyzerConfig analyzerConfig,
+          Reporter reporter)
+          throws WSIException {
+
+      super.init(analyzerContext, assertions.getArtifact(getArtifactType()),
+              reportArtifact, reporter);
+
+      testable = analyzerConfig.getLogLocation() != null;
+      this.analyzerConfig = analyzerConfig;
+      this.wsdlDocument = (WSDLDocument) analyzerContext.getWsdlDocument();
+  }
 
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.MessageValidator#init(org.eclipse.wst.wsi.internal.core.analyzer.AnalyzerContext, org.wsi.test.profile.ProfileArtifact, org.wsi.test.report.ReportArtifact, org.wsi.wsdl.WSDLDocument, org.wsi.test.report.Reporter)
@@ -111,6 +138,9 @@
     // BaseValidatorImpl
     super.init(analyzerContext, profileArtifact, reportArtifact, reporter);
 
+    this.analyzerConfig = Utils.getAnalyzerConfig(reporter);
+    testable = ((analyzerConfig != null) && (analyzerConfig.getLogLocation() != null));	
+
     // Save input references
     this.wsdlDocument = wsdlDocument;
   }
@@ -140,7 +170,7 @@
     /* If Service Description (WSDL/UDDI) NOT supplied in analyzer config OR
      * Service Description IS supplied and the current message correlates to it...
      */
-    if ((wsdlDocument == null)
+    if ((!analyzerConfig.isWSDLReferenceSet())
       || messageCorrelatesToService(
         entryContext,
         analyzerConfig.getCorrelationType()))
@@ -990,14 +1020,14 @@
       List extensibles = null;
       BindingOperation bindingOp = op[k];
 
-      if (messageEntryType.isType(EntryType.TYPE_MESSAGE_REQUEST)
+      if (messageEntryType.isType(MessageValidator.TYPE_MESSAGE_REQUEST)
         && (bindingOp.getOperation().getInput() != null))
       {
         name = bindingOp.getOperation().getName();
         extensibles = bindingOp.getBindingInput().getExtensibilityElements();
       }
       else if (
-        messageEntryType.isType(EntryType.TYPE_MESSAGE_RESPONSE)
+        messageEntryType.isType(MessageValidator.TYPE_MESSAGE_RESPONSE)
           && (bindingOp.getOperation().getOutput() != null))
       {
         name = bindingOp.getOperation().getName() + "Response";
@@ -1041,14 +1071,14 @@
       List extensibles = null;
       BindingOperation bindingOp = op[k];
 
-      if (messageEntryType.isType(EntryType.TYPE_MESSAGE_REQUEST)
+      if (messageEntryType.isType(MessageValidator.TYPE_MESSAGE_REQUEST)
         && (bindingOp.getOperation().getInput() != null))
       {
         wsdlMessage = bindingOp.getOperation().getInput().getMessage();
         extensibles = bindingOp.getBindingInput().getExtensibilityElements();
       }
       else if (
-        messageEntryType.isType(EntryType.TYPE_MESSAGE_RESPONSE)
+        messageEntryType.isType(MessageValidator.TYPE_MESSAGE_RESPONSE)
           && (bindingOp.getOperation().getOutput() != null))
       {
         wsdlMessage = bindingOp.getOperation().getOutput().getMessage();
@@ -1242,11 +1272,11 @@
     BindingOperation[] wsdlOperations)
   {
 
-    if (messageType.isType(EntryType.ENTRY_TYPE_REQUEST))
+    if (messageType.isType(EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_REQUEST)))
     {
       return getInputDocLitOperations(partElementQName, wsdlOperations);
     }
-    else if (messageType.isType(EntryType.ENTRY_TYPE_RESPONSE))
+    else if (messageType.isType(EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_RESPONSE)))
     {
       return getOutputDocLitOperations(partElementQName, wsdlOperations);
     }
@@ -1834,4 +1864,47 @@
     }
     return result;
   }
+
+  /**
+   * Returns true if these tests should be run (depending on the analyzer
+   * config)
+   */
+  public boolean runTests() { return testable; }
+  
+  public void validateArtifact() throws WSIException {
+      // Get the log file reader
+      LogReader logReader = DocumentFactory.newInstance().newLogReader();
+
+      // Create log reader callback
+      LogProcessor envelopeProcessor = new LogProcessor(this);
+
+      // Start reading the log file
+      logReader.readLog(analyzerConfig.getLogLocation(), envelopeProcessor);
+  }
+
+  protected class LogProcessor implements MessageEntryHandler {
+      LogValidator validator = null;
+
+    /**
+     * Create message processor as a log reader callback function.
+     */
+      LogProcessor(LogValidator validator) {
+          this.validator = validator;
+      }
+
+    /**
+     * Process artifact reference.
+     */
+    public void processArtifactReference(ArtifactReference artifactReference)
+            throws WSIException {
+        reporter.addArtifactReference(artifactReference);
+    }
+
+    /**
+     * Process a single log entry.
+     */
+    public void processLogEntry(EntryContext entryContext) throws WSIException {
+        validator.validate(entryContext);
+    }
+  }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/ProfileValidatorFactoryImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/ProfileValidatorFactoryImpl.java
index 4add155..85cc6e6 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/ProfileValidatorFactoryImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/ProfileValidatorFactoryImpl.java
@@ -10,7 +10,12 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.profile.validator.impl;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.wst.wsi.internal.WSITestToolsPlugin;
 import org.eclipse.wst.wsi.internal.core.WSIException;
+import org.eclipse.wst.wsi.internal.core.profile.validator.BaseValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EnvelopeValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.ProfileValidatorFactory;
@@ -29,7 +34,29 @@
  */
 public class ProfileValidatorFactoryImpl extends ProfileValidatorFactory
 {
-  /* (non-Javadoc)
+  private static Map validatorRegistry;
+
+  public static void addToValidatatorRegistry(String artifactName,
+          BaseValidator validatorClass) {
+      if (validatorRegistry == null)
+          validatorRegistry = new HashMap();
+      validatorRegistry.put(artifactName, validatorClass);
+  }
+
+  public BaseValidator getValidatorForArtifact(String artifactName) 
+          throws WSIException {
+      if (validatorRegistry == null) {
+          BaseValidator validators[] = WSITestToolsPlugin.getPlugin().
+                  getBaseValidators();
+          for (int i = 0; i < validators.length; i++)
+              addToValidatatorRegistry(validators[i].getArtifactType(),
+              validators[i]);
+          
+      }
+      return (BaseValidator) validatorRegistry.get(artifactName);
+  }
+  
+    /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.ProfileValidatorFactory#newUDDIValidator()
    */
   public UDDIValidator newUDDIValidator() throws WSIException
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/AP1920.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/AP1920.java
index a7f2ebd..f411c9c 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/AP1920.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/AP1920.java
@@ -20,6 +20,7 @@
 import org.eclipse.wst.wsi.internal.core.analyzer.AssertionNotApplicableException;
 import org.eclipse.wst.wsi.internal.core.profile.TestAssertion;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
+import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.AssertionProcess;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.BaseMessageValidator;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
@@ -70,7 +71,7 @@
         throw new AssertionNotApplicableException();
       
       BindingOperation bindingOperation = validator.getOperationMatch(
-          EntryType.getEntryType(EntryType.TYPE_MESSAGE_REQUEST),
+          EntryType.getEntryType(MessageValidator.TYPE_MESSAGE_REQUEST),
           entryContext.getRequestDocument());
 
       // If there is no matched operation, the assertion is not applicable
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/EnvelopeValidatorImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/EnvelopeValidatorImpl.java
index be2014c..757bd09 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/EnvelopeValidatorImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/envelope/EnvelopeValidatorImpl.java
@@ -14,8 +14,8 @@
 import org.eclipse.wst.wsi.internal.core.profile.TestAssertion;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EnvelopeValidator;
+import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.BaseMessageValidator;
-import org.eclipse.wst.wsi.internal.core.util.EntryType;
 
 /**
  * @version 1.0
@@ -24,6 +24,26 @@
   extends BaseMessageValidator
   implements EnvelopeValidator
 {
+  /**
+   * Get the artifact type that this validator applies to.
+   * @return the artifact type (a String)
+   */
+  public String getArtifactType() {
+      return TYPE_ENVELOPE;
+  }
+
+  /**
+   * Get the collection of entry types that this validator applies to.
+   * @return an array of entry types (Strings)
+   */
+  public String[] getEntryTypes() {
+      return new String[] {
+              TYPE_ENVELOPE_REQUEST,
+              TYPE_ENVELOPE_RESPONSE,
+              TYPE_ENVELOPE_ANY
+      };
+  }
+
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.impl.BaseValidatorImpl#isPrimaryEntryTypeMatch(org.wsi.test.profile.TestAssertion, org.wsi.test.profile.validator.EntryContext)
    */
@@ -34,19 +54,19 @@
     boolean match = false;
 
     // Verify that the entry and test assertion have the same primary context
-    if ((testAssertion.getEntryTypeName().equals(EntryType.TYPE_ENVELOPE_ANY))
-      || (testAssertion.getEntryTypeName().equals(EntryType.TYPE_ENVELOPE_REQUEST)
+    if ((testAssertion.getEntryTypeName().equals(TYPE_ENVELOPE_ANY))
+      || (testAssertion.getEntryTypeName().equals(TYPE_ENVELOPE_REQUEST)
         && (entryContext
           .getEntry()
           .getEntryType()
           .getTypeName()
-          .equals(EntryType.TYPE_MESSAGE_REQUEST)))
-      || (testAssertion.getEntryTypeName().equals(EntryType.TYPE_ENVELOPE_RESPONSE)
+          .equals(MessageValidator.TYPE_MESSAGE_REQUEST)))
+      || (testAssertion.getEntryTypeName().equals(TYPE_ENVELOPE_RESPONSE)
         && (entryContext
           .getEntry()
           .getEntryType()
           .getTypeName()
-          .equals(EntryType.TYPE_MESSAGE_RESPONSE))))
+          .equals(MessageValidator.TYPE_MESSAGE_RESPONSE))))
     {
       match = true;
     }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/AP1935.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/AP1935.java
index 4d8fce7..88251f5 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/AP1935.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/AP1935.java
@@ -76,7 +76,7 @@
       	MimePart root = parts.getRootPart();
         while (iparts.hasNext())
         {
-          i = i = 1;
+          i = 1;
           try
           {
         	MimePart part = (MimePart)iparts.next();
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/MessageValidatorImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/MessageValidatorImpl.java
index 015bff2..15af0e6 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/MessageValidatorImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/message/MessageValidatorImpl.java
@@ -14,7 +14,6 @@
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.BaseMessageValidator;
-import org.eclipse.wst.wsi.internal.core.util.EntryType;
 
 /**
  * @version 1.0
@@ -23,6 +22,28 @@
   extends BaseMessageValidator
   implements MessageValidator
 {
+  /**
+   * Get the artifact type that this validator applies to.
+   * @return the artifact type (a String)
+   */
+  public String getArtifactType() {
+      return TYPE_MESSAGE;
+  }
+
+  /**
+   * Get the collection of entry types that this validator applies to.
+   * @return an array of entry types (Strings)
+   */
+  public String[] getEntryTypes() {
+      return new String[] {
+              TYPE_MESSAGE_REQUEST,
+              TYPE_MESSAGE_RESPONSE,
+              TYPE_MESSAGE_ANY,
+              TYPE_MIME_PART,
+              TYPE_MIME_ROOT_PART
+      };
+  }
+
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.impl.BaseValidatorImpl#isPrimaryEntryTypeMatch(org.wsi.test.profile.TestAssertion, org.wsi.test.profile.validator.EntryContext)
    */
@@ -33,21 +54,21 @@
     boolean match = false;
 
     // Verify that the entry and test assertion have the same primary context
-    if ((testAssertion.getEntryTypeName().equals(EntryType.TYPE_MESSAGE_ANY))
-      || (testAssertion.getEntryTypeName().equals(EntryType.TYPE_MESSAGE_REQUEST)
+    if ((testAssertion.getEntryTypeName().equals(TYPE_MESSAGE_ANY))
+      || (testAssertion.getEntryTypeName().equals(TYPE_MESSAGE_REQUEST)
         && (entryContext
           .getEntry()
           .getEntryType()
           .getTypeName()
-          .equals(EntryType.TYPE_MESSAGE_REQUEST)))
-      || (testAssertion.getEntryTypeName().equals(EntryType.TYPE_MESSAGE_RESPONSE)
+          .equals(TYPE_MESSAGE_REQUEST)))
+      || (testAssertion.getEntryTypeName().equals(TYPE_MESSAGE_RESPONSE)
         && (entryContext
           .getEntry()
           .getEntryType()
           .getTypeName()
-          .equals(EntryType.TYPE_MESSAGE_RESPONSE)))
-      || testAssertion.getEntryTypeName().equals(EntryType.TYPE_MIME_ROOT_PART)
-      || testAssertion.getEntryTypeName().equals(EntryType.TYPE_MIME_PART))
+          .equals(TYPE_MESSAGE_RESPONSE)))
+      || testAssertion.getEntryTypeName().equals(TYPE_MIME_ROOT_PART)
+      || testAssertion.getEntryTypeName().equals(TYPE_MIME_PART))
     {
       match = true;
     }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3001.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3001.java
index b206cd0..eff03e8 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3001.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3001.java
@@ -21,6 +21,7 @@
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.AssertionProcess;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
+import org.eclipse.wst.wsi.internal.core.util.UDDIUtils;
 import org.eclipse.wst.wsi.internal.core.wsdl.WSDLDocument;
 import org.uddi4j.datatype.OverviewDoc;
 import org.uddi4j.datatype.tmodel.TModel;
@@ -104,7 +105,7 @@
         }
 
         // Get binding
-        binding = validator.getBinding(urlText, wsdlDocument);
+        binding = UDDIUtils.getBinding(urlText, wsdlDocument);
 
         // See if the binding is in the WSDL document
         if (binding == null
@@ -148,12 +149,6 @@
       setFaultMessage(key);
     }
 
-    if (result == AssertionResult.RESULT_PASSED)
-    {
-      // Set the binding that will be used
-      validator.setWSDLBinding(binding);
-    }
-
     // Return assertion result
     return validator.createAssertionResult(testAssertion, result, failureDetailMessage);
   }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3003.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3003.java
index c0e04f0..58e7d48 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3003.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/BP3003.java
@@ -15,6 +15,7 @@
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.AssertionProcess;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
+import org.eclipse.wst.wsi.internal.core.util.UDDIUtils;
 import org.uddi4j.datatype.tmodel.TModel;
 
 
@@ -59,7 +60,7 @@
     }
 
     // If there is a tModel and it is not categorized as "wsdlSpec", then fail
-    else if (!(validator.isWsdlSpec(tModel)))
+    else if (!(UDDIUtils.isWsdlSpec(tModel)))
     {
       result = AssertionResult.RESULT_FAILED;
       failureDetailMessage =
@@ -71,13 +72,6 @@
           + "]";
     }
 
-    // Else get the WSDL document location and set it and the binding element in analyzer context
-    else
-    {
-      // set WSDL location in analyzer context
-      validator.setWSDLLocation(validator.getWSDLLocation(validator.getOverviewURL(tModel)));
-    }
-
     // Return assertion result
     return validator.createAssertionResult(testAssertion, result, failureDetailMessage);
   }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/UDDIValidatorImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/UDDIValidatorImpl.java
index 0ffdce8..f4bc9ea 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/UDDIValidatorImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/UDDIValidatorImpl.java
@@ -24,23 +24,26 @@
 import org.eclipse.wst.wsi.internal.core.WSIException;
 import org.eclipse.wst.wsi.internal.core.analyzer.AnalyzerContext;
 import org.eclipse.wst.wsi.internal.core.analyzer.ServiceReference;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.AnalyzerConfig;
 import org.eclipse.wst.wsi.internal.core.analyzer.config.UDDIReference;
 import org.eclipse.wst.wsi.internal.core.analyzer.config.WSDLElement;
 import org.eclipse.wst.wsi.internal.core.analyzer.config.impl.WSDLElementImpl;
 import org.eclipse.wst.wsi.internal.core.profile.ProfileArtifact;
+import org.eclipse.wst.wsi.internal.core.profile.ProfileAssertions;
 import org.eclipse.wst.wsi.internal.core.profile.TestAssertion;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.UDDIValidator;
+import org.eclipse.wst.wsi.internal.core.profile.validator.WSDLValidator;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.BaseValidatorImpl;
 import org.eclipse.wst.wsi.internal.core.report.Entry;
 import org.eclipse.wst.wsi.internal.core.report.ReportArtifact;
 import org.eclipse.wst.wsi.internal.core.report.Reporter;
 import org.eclipse.wst.wsi.internal.core.util.EntryType;
 import org.eclipse.wst.wsi.internal.core.util.UDDIUtils;
+import org.eclipse.wst.wsi.internal.core.util.Utils;
 import org.eclipse.wst.wsi.internal.core.wsdl.WSDLDocument;
 import org.uddi4j.client.UDDIProxy;
 import org.uddi4j.datatype.binding.BindingTemplate;
-import org.uddi4j.datatype.binding.TModelInstanceInfo;
 import org.uddi4j.datatype.tmodel.TModel;
 import org.uddi4j.response.BindingDetail;
 import org.uddi4j.response.TModelDetail;
@@ -67,6 +70,38 @@
    * UDDI proxy.
    */
   protected UDDIProxy uddiProxy;
+  private boolean testable;
+
+  /**
+   * Get the artifact type that this validator applies to.
+   * @return the artifact type (a String)
+   */
+  public String getArtifactType() {
+      return TYPE_DISCOVERY;
+  }
+
+  /**
+   * Get the collection of entry types that this validator applies to.
+   * @return an array of entry types (Strings)
+   */
+  public String[] getEntryTypes() {
+      return new String[] {
+              TYPE_DISCOVERY_BINDINGTEMPLATE,
+              TYPE_DISCOVERY_TMODEL};
+  }
+  
+  public void init(
+          AnalyzerContext analyzerContext,
+          ProfileAssertions assertions,
+          ReportArtifact reportArtifact,
+          AnalyzerConfig analyzerConfig,
+          Reporter reporter)
+          throws WSIException {
+      super.init(analyzerContext,
+              assertions.getArtifact(TYPE_DISCOVERY), reportArtifact, reporter);
+      this.uddiReference = analyzerConfig.getUDDIReference();
+      testable = analyzerConfig.isUDDIReferenceSet();
+  }
 
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.UDDIValidator#init(org.eclipse.wst.wsi.internal.core.analyzer.AnalyzerContext, org.wsi.test.profile.ProfileArtifact, org.wsi.test.report.ReportArtifact, org.wsi.test.analyzer.config.UDDIReference, org.wsi.test.report.Reporter)
@@ -82,16 +117,17 @@
     // BaseValidatorImpl
     super.init(analyzerContext, profileArtifact, reportArtifact, reporter);
 
+    AnalyzerConfig analyzerConfig = Utils.getAnalyzerConfig(reporter);
+    testable = ((analyzerConfig != null) && (analyzerConfig.isUDDIReferenceSet()));	
+
     // Save input references
     this.uddiReference = uddiReference;
   }
-
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.UDDIValidator#validate()
    */
-  public String validate() throws WSIException
+  public void validateArtifact() throws WSIException
   {
-    String wsdlURL = null;
     Entry entry = null;
 
     BindingTemplate bindingTemplate = null;
@@ -152,7 +188,8 @@
           }
 
           // Get the wsdlSpec tModel
-          tModel = findTModel(uddiProxy, bindingTemplate);
+          tModel = UDDIUtils.findTModel(uddiProxy, bindingTemplate,
+                  verboseOption);
         }
 
         // Else it has to be a tModel
@@ -174,7 +211,7 @@
       if (bindingTemplate == null)
       {
         setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DISCOVERY_BINDINGTEMPLATE));
+          EntryType.getEntryType(TYPE_DISCOVERY_BINDINGTEMPLATE));
       }
 
       // If there is a bindingTemplate, then process test assertions for it
@@ -183,7 +220,7 @@
         // Create entry
         entry = this.reporter.getReport().createEntry();
         entry.setEntryType(
-          EntryType.getEntryType(EntryType.TYPE_DISCOVERY_BINDINGTEMPLATE));
+          EntryType.getEntryType(TYPE_DISCOVERY_BINDINGTEMPLATE));
         entry.setReferenceID(bindingTemplate.getBindingKey());
         entry.setEntryDetail(bindingTemplate);
 
@@ -196,30 +233,10 @@
       // NOTE: From this point forward, if a bindingTemplate does NOT have a wsdlSpec tModel,
       //       the tModel will be NULL.
 
-      //Parse WSDL document, and get WSDL document url, binding name and namespace
-      try
-      {
-        String overviewURL = getOverviewURL(tModel);
-        wsdlURL = getWSDLLocation(overviewURL);
-        WSDLDocument wsdlDocument = getWSDLDocument(wsdlURL);
-
-        // ADD: The WSDL binding is used in WSI3001 and should be moved to the entryContext
-        getBinding(overviewURL, wsdlDocument);
-      }
-
-      catch (Exception e)
-      {
-        // ADD:
-        if (verboseOption)
-        {
-          System.err.println("    EXCEPTION: " + e.toString());
-        }
-      }
-
       // Create entry
       entry = this.reporter.getReport().createEntry();
       entry.setEntryType(
-        EntryType.getEntryType(EntryType.TYPE_DISCOVERY_TMODEL));
+        EntryType.getEntryType(TYPE_DISCOVERY_TMODEL));
       entry.setReferenceID(
         (tModel == null ? "[tModel]" : tModel.getTModelKey()));
       entry.setEntryDetail(tModel);
@@ -243,14 +260,19 @@
 
     // Cleanup
     cleanup();
-
-    // Get WSDL location
-    wsdlURL = this.analyzerContext.getServiceReference().getWSDLLocation();
-
-    // Return WSDL URL
-    return wsdlURL;
   }
 
+  /* (non-Javadoc)
+   * @see org.wsi.test.profile.validator.UDDIValidator#validate()
+   */
+  /** @deprecated -- use validateArtifact(). */
+  public String validate() throws WSIException
+  {
+    validateArtifact();
+    // Get WSDL location
+    return this.analyzerContext.getServiceReference().getWSDLLocation();
+  }
+  
   /**
    * Set WSDL binding in the service reference portion of the analyzer context.
    */
@@ -273,7 +295,7 @@
       wsdlElement = new WSDLElementImpl();
       wsdlElement.setName(bindingName);
       wsdlElement.setNamespace(namespace);
-      wsdlElement.setType(EntryType.TYPE_DESCRIPTION_BINDING);
+      wsdlElement.setType(WSDLValidator.TYPE_DESCRIPTION_BINDING);
     }
 
     // Set the wsdlElement in the service reference
@@ -297,86 +319,9 @@
     analyzerContext.setServiceReference(serviceReference);
   }
 
-  /**
-   * Find the wsdlSpec tModel associated with a binding.
-   */
-  private TModel findTModel(
-    UDDIProxy uddiProxy,
-    BindingTemplate bindingTemplate)
-    throws WSIException
-  {
-    TModel tModel = null;
-
-    // Get the list of tModel references associated with this bindingTemplate
-    Iterator iterator =
-      bindingTemplate
-        .getTModelInstanceDetails()
-        .getTModelInstanceInfoVector()
-        .iterator();
-
-    // Process each tModel reference
-    Vector tModelKeyList = new Vector();
-    while (iterator.hasNext())
-    {
-      // Get tModelInstanceInfo
-      TModelInstanceInfo tModelInstanceInfo =
-        (TModelInstanceInfo) iterator.next();
-
-      // Add key to list
-      tModelKeyList.add(tModelInstanceInfo.getTModelKey());
-    }
-
-    // Get the tModels associated with the bindingTemplate
-    if (tModelKeyList.size() > 0)
-    {
-      try
-      {
-        // Get the tModel details
-        TModelDetail tModelDetail = uddiProxy.get_tModelDetail(tModelKeyList);
-
-        // Get the list of tModels
-        Iterator tModelIterator = tModelDetail.getTModelVector().iterator();
-
-        //boolean tModelFound = false;
-        TModel nextTModel = null;
-
-        // Go through the list of tModels
-        while ((tModelIterator.hasNext()) && (tModel == null))
-        {
-          // Get next tModel in list
-          nextTModel = (TModel) tModelIterator.next();
-
-          if (verboseOption)
-          {
-            System.err.println(
-              "      TModel referenced from bindingTemplate - "
-                + UDDIUtils.tModelToString(nextTModel));
-          }
-
-          // If this is a wsdlSpec tModel, then this is the tModel we want
-          if (isWsdlSpec(nextTModel))
-            tModel = nextTModel;
-        }
-      }
-
-      catch (Exception e)
-      {
-        // Throw WSIException
-        throw new WSIException("Could not get tModel details.", e);
-      }
-    }
-
-    else
-    {
-      // Throw exception
-      //throw new WSIException("UDDI bindingTemplate did not contain any tModel references.");
-    }
-
-    return tModel;
-  }
-
-  /**
+   /**
    * Determine if this is a wsdlSpec tModel.
+   * @deprecated -- use UDDIUtils.isWsdlSpec(String wsdlLocation).
    */
   protected boolean isWsdlSpec(TModel tModel)
   {
@@ -421,6 +366,7 @@
 
   /**
    * Get an OverviewURL from tModel.
+   * @deprecated -- use UDDIUtils.getOverviewURL(String wsdlLocation).
    */
   protected String getOverviewURL(TModel tModel)
   {
@@ -435,6 +381,7 @@
 
   /**
    * Get WSDL document.
+   * @deprecated -- use UDDIUtils.getWSDLLocation(String wsdlLocation).
    */
   protected String getWSDLLocation(String wsdlLocation)
   {
@@ -447,14 +394,14 @@
     }
     return wsdlLocation;
   }
-
+ 
   /**
    * Get WSDL document.
    */
   protected WSDLDocument getWSDLDocument(String wsdlLocation)
     throws MalformedURLException, WSDLException
   {
-    return new WSDLDocument(getWSDLLocation(wsdlLocation));
+    return new WSDLDocument(UDDIUtils.getWSDLLocation(wsdlLocation));
   }
 
   /**
@@ -587,4 +534,9 @@
     return notApplicable;
   }
 
+  /**
+   * Returns true if these tests should be run (depending on the analyzer
+   * config)
+   */
+  public boolean runTests() { return testable; }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/WSI3004.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/WSI3004.java
index 065480e..1a173a6 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/WSI3004.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/uddi/WSI3004.java
@@ -102,11 +102,11 @@
     try
     {
       // Read the WSDL document
-      String overviewURL = validator.getOverviewURL(tModel);
+      String overviewURL = UDDIUtils.getOverviewURL(tModel);
       WSDLDocument wsdlDocument = validator.getWSDLDocument(overviewURL);
 
       // Get binding
-      Binding binding = validator.getBinding(overviewURL, wsdlDocument);
+      Binding binding = UDDIUtils.getBinding(overviewURL, wsdlDocument);
       String bindingName = binding.getQName().getLocalPart();
 
       // Get claims
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/AP2908.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/AP2908.java
index 0545d63..c89f4ba 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/AP2908.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/AP2908.java
@@ -64,7 +64,7 @@
       Document doc = entryContext.getWSDLDocument().getDocument();
       if (doc == null)
       {
-        doc = validator.parseXMLDocumentURL(validator.wsdlURL, null);
+        doc = validator.parseXMLDocumentURL(validator.wsdlDocument.getLocation(), null);
       }
 
       // Finding the wsdl:binding element being processed
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2011.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2011.java
index 2d5fd18..f31e054 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2011.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2011.java
@@ -15,6 +15,7 @@
 import java.io.Reader;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
@@ -76,7 +77,7 @@
     EntryContext entryContext)
     throws WSIException
   {
-    result = result = AssertionResult.RESULT_NOT_APPLICABLE;
+    result = AssertionResult.RESULT_NOT_APPLICABLE;
 
     //Definition def = (Definition) entryContext.getEntry().getEntryDetail();
     Types types = (Types) entryContext.getEntry().getEntryDetail();
@@ -103,7 +104,7 @@
         ExtensibilityElement el = (ExtensibilityElement) it.next();
         if (el instanceof UnknownExtensibilityElement)
           searchForSchema(((UnknownExtensibilityElement) el).getElement(),
-              definition.getDocumentBaseURI());
+              definition.getDocumentBaseURI(), new ArrayList());
       }
     }
 
@@ -120,27 +121,30 @@
   /* Search xsd schema or xsd import from node. If node is xsd import it's loading schema.
    * @param n - UnknownExtencibilityElement
   */
-  private void searchForSchema(Node n, String context)
+  private void searchForSchema(Node n, String context, List processedSchemas)
   {
-    while (n != null)
+    if ((n!= null) && (!processedSchemas.contains(n)))
     {
-      // searches for xsd:import element
-      if (Node.ELEMENT_NODE == n.getNodeType())
+      while (n != null)
       {
-        // if xsd:schema element is found -> process schema
-        if (XMLUtils.equals(n, ELEM_XSD_SCHEMA))
-          processSchema(n, context);
-        else
-          // if xsd:import element is found -> load schema and process schema
-          // FIXED: if xsd:import is found and parent element is xsd:schema
-          if (XMLUtils.equals(n, ELEM_XSD_IMPORT)
-            && XMLUtils.equals(n.getParentNode(), ELEM_XSD_SCHEMA))
-            loadSchema(n, context);
+        // searches for xsd:import element
+        if (Node.ELEMENT_NODE == n.getNodeType())
+        {
+          // if xsd:schema element is found -> process schema
+          if (XMLUtils.equals(n, ELEM_XSD_SCHEMA))
+            processSchema(n, context, processedSchemas);
           else
-            // else iterate element recursively
-            searchForSchema(n.getFirstChild(), context);
+            // if xsd:import element is found -> load schema and process schema
+            // FIXED: if xsd:import is found and parent element is xsd:schema
+            if (XMLUtils.equals(n, ELEM_XSD_IMPORT)
+              && XMLUtils.equals(n.getParentNode(), ELEM_XSD_SCHEMA))
+              loadSchema(n, context, processedSchemas);
+            else
+              // else iterate element recursively
+              searchForSchema(n.getFirstChild(), context, processedSchemas);
+        }
+        n = n.getNextSibling();
       }
-      n = n.getNextSibling();
     }
   }
 
@@ -148,7 +152,7 @@
    * It loads xsd schema and then check the version 1.0 and looking for xsd:schema element for next process.
    * @param importNode xsd schema
   */
-  private void loadSchema(Node importNode, String context)
+  private void loadSchema(Node importNode, String context, List processedSchemas)
   {
     Element im = (Element) importNode;
     Attr schemaLocation = XMLUtils.getAttribute(im, ATTR_XSD_SCHEMALOCATION);
@@ -170,7 +174,7 @@
         if (XMLUtils.equals(schema.getDocumentElement(), ELEM_XSD_SCHEMA))
         {
           processSchema(schema.getDocumentElement(),
-            XMLUtils.createURLString(schemaLocation.getValue(), context));
+            XMLUtils.createURLString(schemaLocation.getValue(), context), processedSchemas);
         }
         result = AssertionResult.RESULT_PASSED;
       }
@@ -326,16 +330,20 @@
    * It's loking for xsd import and load it if find.
    * @param schema xsd schema
   */
-  private void processSchema(Node schema, String context)
+  private void processSchema(Node schema, String context, List processedSchemas)
   {
-    Node n = schema.getFirstChild();
-    while (n != null)
-    {
-      if (Node.ELEMENT_NODE == n.getNodeType()
-        && XMLUtils.equals(n, ELEM_XSD_IMPORT))
-        loadSchema(n, context);
+	if ((schema != null) && (!processedSchemas.contains(schema)))
+	{
+	  processedSchemas.add(schema);
+      Node n = schema.getFirstChild();
+      while (n != null)
+      {
+        if (Node.ELEMENT_NODE == n.getNodeType()
+          && XMLUtils.equals(n, ELEM_XSD_IMPORT))
+          loadSchema(n, context, processedSchemas);
 
-      n = n.getNextSibling();
-    }
+        n = n.getNextSibling();
+      }
+	}
   }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2101.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2101.java
index f9a73ef..9d5a77d 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2101.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2101.java
@@ -20,8 +20,6 @@
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.AssertionProcessVisitor;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
 import org.eclipse.wst.wsi.internal.core.util.ErrorList;
-import org.eclipse.wst.wsi.internal.core.util.TestUtils;
-import org.eclipse.wst.wsi.internal.core.util.Utils;
 import org.eclipse.wst.wsi.internal.core.wsdl.traversal.WSDLTraversal;
 import org.eclipse.wst.wsi.internal.core.wsdl.traversal.WSDLTraversalContext;
 
@@ -54,7 +52,8 @@
   public void visit(Import im, Object parent, WSDLTraversalContext ctx)
   {
     importFound = true;
-
+    try
+    {
     // by the way : WSDL4J throws Exception if imported WSDL is not resolved
     // but documentation says that im.getDefinition() will be equal to null
     if (im.getDefinition() == null)
@@ -63,24 +62,15 @@
           + ":"
           + im.getLocationURI()
           + "\nImport element does not reference a WSDL definition.");
-    else
-      try
-      {
-        // try to parse WSDL according to the WSDL schema
-        validator.parseXMLDocumentURL(
-           im.getLocationURI(),
-           ((Definition)parent).getDocumentBaseURI(),
-           TestUtils.getWSDLSchemaLocation());
-      }
-      catch (Throwable t)
-      {
-        errors.add(
-          im.getNamespaceURI()
-            + ":"
-            + im.getLocationURI()
-            + "\n"
-            + Utils.getExceptionDetails(t));
-      }
+    }
+    catch (Exception e)
+    {
+      errors.add(
+        im.getNamespaceURI()
+          + ":"
+          + im.getLocationURI()
+          + "\nImport element does not reference a WSDL definition.");
+    }
   }
 
   public AssertionResult validate(
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2102.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2102.java
index d272b9d..f959b41 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2102.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2102.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.profile.validator.impl.wsdl;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -84,7 +85,7 @@
           if (el instanceof UnknownExtensibilityElement
             && el.getElementType().equals(ELEM_XSD_SCHEMA))
             testNode(((UnknownExtensibilityElement) el).getElement(),
-              definition.getDocumentBaseURI());
+              definition.getDocumentBaseURI(), new ArrayList());
 
           if (result.equals(AssertionResult.RESULT_FAILED))
           {
@@ -118,86 +119,92 @@
    * definition (e.g. WSDL).
   * @param n - Unknown extensibility element
   */
-  private void testNode(Node n, String context)
+  private void testNode(Node n, String context, List processedSchemas)
   {
-    while (n != null)
-    {
-      // searches for xsd:import element
-      if (Node.ELEMENT_NODE == n.getNodeType())
+	if ((n != null) && (!processedSchemas.contains(n)))
+	{
+      if (XMLUtils.equals(n.getParentNode(), ELEM_XSD_SCHEMA))
+         processedSchemas.add(n);    	
+
+      while (n != null)
       {
-        if (XMLUtils.equals(n, ELEM_XSD_IMPORT))
+        // searches for xsd:import element
+        if (Node.ELEMENT_NODE == n.getNodeType())
         {
-          importFound = true;
-
-          Element im = (Element) n;
-          // Getting the schemaLocation and the namespace attributes
-          Attr schemaLocation =
-            XMLUtils.getAttribute(im, ATTR_XSD_SCHEMALOCATION);
-          Attr namespace = XMLUtils.getAttribute(im, ATTR_XSD_NAMESPACE);
-          // If there is only the namespace attribute of import element
-          if (schemaLocation == null && namespace != null)
+          if (XMLUtils.equals(n, ELEM_XSD_IMPORT))
           {
-            // Getting all the inline schemas of the wsdl definition
-            Map schemasMap = validator.wsdlDocument.getSchemas();
-            // If an inline schema imported is defined
-            if (schemasMap.keySet().contains(namespace.getValue()))
+            importFound = true;
+
+            Element im = (Element) n;
+            // Getting the schemaLocation and the namespace attributes
+            Attr schemaLocation =
+              XMLUtils.getAttribute(im, ATTR_XSD_SCHEMALOCATION);
+            Attr namespace = XMLUtils.getAttribute(im, ATTR_XSD_NAMESPACE);
+            // If there is only the namespace attribute of import element
+            if (schemaLocation == null && namespace != null)
             {
+              // Getting all the inline schemas of the wsdl definition
+              Map schemasMap = validator.wsdlDocument.getSchemas();
               // If an inline schema imported is defined
-              // (that means the schema is valid),
-              // continue with the next element
-              n = n.getNextSibling();
-              continue;
-            }
-
-            // no schemaLocation so try the namespace 
-            schemaLocation = namespace;
-          }
-
-          // try to parse imported XSD
-          if (schemaLocation != null && schemaLocation.getValue() != null)
-          {
-            try
-            {
-              // if any error or root element is not XSD schema -> error
-              // !! ATTENTION
-              // root XSD SCHEMA SCHEMA is not valid                            
-              //Document schema = XMLUtils.parseXMLDocumentURL(schemaLocation.getValue(), XSD_SCHEMALOCATION, context);
-              Document schema =
-                validator.parseXMLDocumentURL(schemaLocation.getValue(), context);
-
-              // If the import is valid, then check its contents
-              if (XMLUtils
-                .equals(schema.getDocumentElement(), ELEM_XSD_SCHEMA))
+              if (schemasMap.keySet().contains(namespace.getValue()))
               {
-                // Check content of imported document
-                testNode(schema.getDocumentElement().getFirstChild(),
-                  XMLUtils.createURLString(schemaLocation.getValue(), context));
+                // If an inline schema imported is defined
+                // (that means the schema is valid),
+                // continue with the next element
+                n = n.getNextSibling();
+                continue;
               }
 
-              else
+              // no schemaLocation so try the namespace 
+              schemaLocation = namespace;
+            }
+
+            // try to parse imported XSD
+            if (schemaLocation != null && schemaLocation.getValue() != null)
+            {
+              try
               {
-                throw new Exception();
+                // if any error or root element is not XSD schema -> error
+                // !! ATTENTION
+                // root XSD SCHEMA SCHEMA is not valid                            
+                //Document schema = XMLUtils.parseXMLDocumentURL(schemaLocation.getValue(), XSD_SCHEMALOCATION, context);
+                Document schema =
+                  validator.parseXMLDocumentURL(schemaLocation.getValue(), context);
+
+                // If the import is valid, then check its contents
+                if (XMLUtils
+                  .equals(schema.getDocumentElement(), ELEM_XSD_SCHEMA))
+                {
+                  // Check content of imported document
+                  testNode(schema.getDocumentElement().getFirstChild(),
+                    XMLUtils.createURLString(schemaLocation.getValue(), context), processedSchemas);
+                }
+
+                else
+                {
+                  throw new Exception();
+                }
+              }
+              catch (Throwable t)
+              {
+                result = AssertionResult.RESULT_FAILED;
+                failureDetailMessage = schemaLocation.getValue();
+                break;
               }
             }
-            catch (Throwable t)
+            else
             {
-              result = AssertionResult.RESULT_FAILED;
-              failureDetailMessage = schemaLocation.getValue();
+              //result = AssertionResult.RESULT_FAILED;
+              result = AssertionResult.RESULT_NOT_APPLICABLE;
+              failureDetailMessage =
+                "schemaLocation == null and namespace == null";
               break;
             }
           }
-          else
-          {
-            //result = AssertionResult.RESULT_FAILED;
-            result = AssertionResult.RESULT_NOT_APPLICABLE;
-            failureDetailMessage =
-              "schemaLocation == null and namespace == null";
-            break;
-          }
+          testNode(n.getFirstChild(), context, processedSchemas);
         }
-        testNode(n.getFirstChild(), context);
+        n = n.getNextSibling();
       }
-      n = n.getNextSibling();
     }
   }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2202.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2202.java
index 64c7934..3eed0d1 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2202.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2202.java
@@ -15,6 +15,7 @@
 import java.io.Reader;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
@@ -76,7 +77,7 @@
     EntryContext entryContext)
     throws WSIException
   {
-    result = result = AssertionResult.RESULT_NOT_APPLICABLE;
+    result = AssertionResult.RESULT_NOT_APPLICABLE;
 
     //Definition def = (Definition) entryContext.getEntry().getEntryDetail();
     Types types = (Types) entryContext.getEntry().getEntryDetail();
@@ -102,7 +103,7 @@
         if (el instanceof UnknownExtensibilityElement
           && el.getElementType().equals(ELEM_XSD_SCHEMA))
           searchForSchema(((UnknownExtensibilityElement) el).getElement(),
-              definition.getDocumentBaseURI());
+              definition.getDocumentBaseURI(), new ArrayList());
       }
     }
 
@@ -125,32 +126,35 @@
    * Search xsd schema or xsd import from node. If node is xsd import it's loading schema.
    * @param n - node
   */
-  private void searchForSchema(Node n, String context)
+  private void searchForSchema(Node n, String context, List processedSchemas)
   {
-    while (n != null)
-    {
-      // searches for xsd:import element
-      if (Node.ELEMENT_NODE == n.getNodeType())
+	if ((n!= null) && (!processedSchemas.contains(n)))
+	{
+      while (n != null)
       {
-        // if xsd:schema element is found -> process schema
-        if (XMLUtils.equals(n, ELEM_XSD_SCHEMA))
+        // searches for xsd:import element
+        if (Node.ELEMENT_NODE == n.getNodeType())
         {
-          processSchema(n, context);
-        }
-        else
-        {
-          // if xsd:import element is found -> load schema and process schema
-          if (XMLUtils.equals(n, ELEM_XSD_IMPORT))
+          // if xsd:schema element is found -> process schema
+          if (XMLUtils.equals(n, ELEM_XSD_SCHEMA))
           {
-            importFound = true;
-            loadSchema(n, context);
+            processSchema(n, context, processedSchemas);
           }
           else
-            // else iterate element recursively
-            searchForSchema(n.getFirstChild(), context);
+          {
+            // if xsd:import element is found -> load schema and process schema
+            if (XMLUtils.equals(n, ELEM_XSD_IMPORT))
+            {
+              importFound = true;
+              loadSchema(n, context, processedSchemas);
+            }
+            else
+              // else iterate element recursively
+              searchForSchema(n.getFirstChild(), context, processedSchemas);
+          }
         }
+        n = n.getNextSibling();
       }
-      n = n.getNextSibling();
     }
   }
 
@@ -158,7 +162,7 @@
    * It loads xsd schema and then check valid encoding and looking for xsd:schema element for next process. 
    * @param importNode - xsd schema
   */
-  private void loadSchema(Node importNode, String context)
+  private void loadSchema(Node importNode, String context, List processedSchemas)
   {
     Element im = (Element) importNode;
     Attr schemaLocation = XMLUtils.getAttribute(im, ATTR_XSD_SCHEMALOCATION);
@@ -193,9 +197,9 @@
         if (XMLUtils.equals(schema.getDocumentElement(), ELEM_XSD_SCHEMA))
         {
            processSchema(schema.getDocumentElement(),
-              XMLUtils.createURLString(schemaLocation.getValue(), context));
+              XMLUtils.createURLString(schemaLocation.getValue(), context), processedSchemas);
         }
-        result = result = AssertionResult.RESULT_PASSED;
+        result = AssertionResult.RESULT_PASSED;
       }
       catch (Throwable t)
       {
@@ -401,19 +405,23 @@
    * @param schema - xsd schema
    * @param namespace - namespace of schema
    */
-  private void processSchema(Node schema, String context)
+  private void processSchema(Node schema, String context, List processedSchemas)
   {
-    Node n = schema.getFirstChild();
-    while (n != null)
-    {
-      if (Node.ELEMENT_NODE == n.getNodeType()
-        && XMLUtils.equals(n, ELEM_XSD_IMPORT))
+	if ((schema != null) && (!processedSchemas.contains(schema)))
+	{
+	  processedSchemas.add(schema);
+      Node n = schema.getFirstChild();
+      while (n != null)
       {
-        importFound = true;
-        loadSchema(n, context);
-      }
+        if (Node.ELEMENT_NODE == n.getNodeType()
+          && XMLUtils.equals(n, ELEM_XSD_IMPORT))
+        {
+          importFound = true;
+          loadSchema(n, context, processedSchemas);
+        }
 
-      n = n.getNextSibling();
+        n = n.getNextSibling();
+      }
     }
   }
 
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2700.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2700.java
index 944b87d..1064e14 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2700.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2700.java
@@ -16,7 +16,6 @@
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.AssertionProcess;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
 import org.eclipse.wst.wsi.internal.core.util.Utils;
-import org.eclipse.wst.wsi.internal.core.xml.XMLUtils;
 import org.xml.sax.SAXException;
 
 /**
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2703.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2703.java
index 7bfa1ea..3e25651 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2703.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/BP2703.java
@@ -10,22 +10,11 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.profile.validator.impl.wsdl;
 
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.wsdl.Definition;
-
-import org.eclipse.wst.wsi.internal.core.WSIConstants;
 import org.eclipse.wst.wsi.internal.core.WSIException;
-import org.eclipse.wst.wsi.internal.core.analyzer.AssertionFailException;
 import org.eclipse.wst.wsi.internal.core.profile.TestAssertion;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.impl.AssertionProcess;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
-import org.eclipse.wst.wsi.internal.core.util.TestUtils;
-import org.eclipse.wst.wsi.internal.core.util.Utils;
-import org.eclipse.wst.wsi.internal.core.xml.XMLUtils;
-import org.xml.sax.SAXException;
 
 
 /**
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/WSDLValidatorImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/WSDLValidatorImpl.java
index b70e0a7..c2303cf 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/WSDLValidatorImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/profile/validator/impl/wsdl/WSDLValidatorImpl.java
@@ -12,6 +12,7 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -51,8 +52,10 @@
 import org.eclipse.wst.wsi.internal.core.analyzer.AssertionFailException;
 import org.eclipse.wst.wsi.internal.core.analyzer.CandidateInfo;
 import org.eclipse.wst.wsi.internal.core.analyzer.ServiceReference;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.AnalyzerConfig;
 import org.eclipse.wst.wsi.internal.core.analyzer.config.WSDLElement;
 import org.eclipse.wst.wsi.internal.core.profile.ProfileArtifact;
+import org.eclipse.wst.wsi.internal.core.profile.ProfileAssertions;
 import org.eclipse.wst.wsi.internal.core.profile.TestAssertion;
 import org.eclipse.wst.wsi.internal.core.profile.validator.EntryContext;
 import org.eclipse.wst.wsi.internal.core.profile.validator.WSDLValidator;
@@ -72,7 +75,6 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-
 /**
  * The WSDL validator will verify that the WSDL and associated XML schema definitions
  * are in conformance with the profile.
@@ -81,12 +83,14 @@
  * @author Peter Brittenham (peterbr@us.ibm.com)
  * @author Graham Turrell 	(gturrell@uk.ibm.com)
  */
+
 public class WSDLValidatorImpl
   extends BaseValidatorImpl
   implements WSDLValidator
 {
   /**
    * WSDL URL.
+   * @deprecated -- access the wsdl url via wsdlDocument field.
    */
   protected String wsdlURL;
 
@@ -94,7 +98,8 @@
    * WSDL document.
    */
   protected WSDLDocument wsdlDocument = null;
-
+  private boolean testable;
+  
   /**
    * Entry container map.
    */
@@ -102,6 +107,65 @@
   
   protected boolean processDefAssertions = true;
 
+  /**
+   * Get the artifact type that this validator applies to.
+   * @return the artifact type (a String)
+   */
+  public String getArtifactType() 
+  {  
+      return TYPE_DESCRIPTION;
+  }
+
+  /**
+   * Get the collection of entry types that this validator applies to.
+   * @return an array of entry types (Strings)
+   */
+  public String[] getEntryTypes() 
+  {
+      return new String[] {
+              TYPE_DESCRIPTION_DEFINITIONS,
+              TYPE_DESCRIPTION_IMPORT,
+              TYPE_DESCRIPTION_TYPES,
+              TYPE_DESCRIPTION_MESSAGE,
+              TYPE_DESCRIPTION_OPERATION,
+              TYPE_DESCRIPTION_PORTTYPE,
+              TYPE_DESCRIPTION_BINDING,
+              TYPE_DESCRIPTION_PORT
+      };
+  }
+
+  /* (non-Javadoc)
+   * @see org.wsi.test.profile.validator.WSDLValidator#init(org.eclipse.wst.wsi.internal.core.analyzer.AnalyzerContext, org.wsi.test.profile.ProfileArtifact, org.wsi.test.report.ReportArtifact, java.lang.String, org.wsi.wsdl.WSDLDocument, org.wsi.test.report.Reporter)
+   */
+  public void init(
+    AnalyzerContext analyzerContext,
+    ProfileAssertions assertions,
+    ReportArtifact reportArtifact,
+    AnalyzerConfig analyzerConfig,
+    Reporter reporter)
+    throws WSIException
+  {
+    init(analyzerContext, assertions, reportArtifact, analyzerConfig, reporter, true);
+  }
+
+  public void init(
+    AnalyzerContext analyzerContext,
+    ProfileAssertions assertions,
+    ReportArtifact reportArtifact,
+    AnalyzerConfig analyzerConfig,
+    Reporter reporter,
+    boolean processDefAssertions)
+    throws WSIException
+  {
+    // BaseValidatorImpl
+    super.init(analyzerContext, assertions.getArtifact(TYPE_DESCRIPTION), reportArtifact, reporter);
+    this.wsdlDocument = analyzerContext.getWsdlDocument();
+    testable = analyzerContext.getWsdlDocument() != null;
+    if (this.wsdlDocument != null)
+      this.wsdlURL = wsdlDocument.getLocation();
+    this.processDefAssertions = processDefAssertions;
+  }
+
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.WSDLValidator#init(org.eclipse.wst.wsi.internal.core.analyzer.AnalyzerContext, org.wsi.test.profile.ProfileArtifact, org.wsi.test.report.ReportArtifact, java.lang.String, org.wsi.wsdl.WSDLDocument, org.wsi.test.report.Reporter)
    */
@@ -130,19 +194,19 @@
     // BaseValidatorImpl
     super.init(analyzerContext, profileArtifact, reportArtifact, reporter);
     this.wsdlDocument = wsdlDocument;
+    testable = (wsdlDocument != null);
     if (wsdlDocument != null)
       this.wsdlURL = wsdlDocument.getLocation();
 
     if (wsdlURL != null)
       this.wsdlURL = wsdlURL;
-
     this.processDefAssertions = processDefAssertions;
   }
 
   /* (non-Javadoc)
    * @see org.wsi.test.profile.validator.WSDLValidator#validate()
    */
-  public WSDLDocument validate() throws WSIException
+  public void validateArtifact() throws WSIException
   {
     //WSDLDocument wsdlDocument = null;
     Service service = null;
@@ -157,20 +221,6 @@
     //String classPrefix = this.getClass().getName() + "$";
     String classPrefix = this.getClass().getPackage().getName()+".";
 
-    try
-    {
-      // Validate the WSDL service description
-      if (this.wsdlDocument == null)
-        this.wsdlDocument = new WSDLDocument(wsdlURL);
-    }
-
-    catch (Exception e)
-    {
-      // ADD: Certain exceptions should result in validation errors
-
-      throw new WSIException(e.getMessage(), e);
-    }
-
     // Get the definition element
     Definition definition = wsdlDocument.getDefinitions();
 
@@ -230,14 +280,10 @@
       {
         //throw new WSIRuntimeException("Could not locate WSDL binding for port: " + port.getName());  
         // Set missingInput for all binding, portType, operation and message test assertions 
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_BINDING));
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_BINDING));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
       }
 
       else
@@ -254,12 +300,9 @@
         {
           //throw new WSIRuntimeException("Could not locate WSDL portType for binding: " + binding.getQName().getLocalPart());
           // Set missingInput for all portType, operation and message test assertions 
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
         }
 
         else
@@ -328,12 +371,9 @@
           //throw new WSIRuntimeException("Could not locate WSDL PortType for Binding: " + binding.getQName().getLocalPart());
 
           // Set missingInput for all portType, operation and message test assertions 
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
         }
 
         else
@@ -363,14 +403,10 @@
       else
       {
         // Set missingInput for all binding, portType, operation and message test assertions 
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_BINDING));
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_BINDING));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
       }
     }
 
@@ -391,8 +427,7 @@
       }
 
       // Set missingInput for all binding test assertions 
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_BINDING));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_BINDING));
 
       processPortTypeAssertions(
         portType,
@@ -446,10 +481,8 @@
       }
 
       // Set missingInput for all binding and portType test assertions 
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_BINDING));
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_BINDING));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
 
       processOperationAssertions(
         operation,
@@ -481,12 +514,9 @@
       }
 
       // Set missingInput for all binding, portType, and operation test assertions 
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_BINDING));
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_BINDING));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
 
       processMessageAssertions(
         message,
@@ -504,11 +534,19 @@
 
     // Cleanup
     cleanup();
+  }
 
+ /* (non-Javadoc)
+  * @see org.wsi.test.profile.validator.WSDLValidator#validate()
+  */
+  /** @deprecated -- use validateArtifact(). */
+  public WSDLDocument validate() throws WSIException
+  {
+    validateArtifact();
+    
     // Return WSDL document
     return this.wsdlDocument;
   }
-
   /**
    * Get entry container using the filename for WSDL document.
    * @param filename a file name.
@@ -588,8 +626,7 @@
         continue;
       // Create entry 
       entry = this.reporter.getReport().createEntry();
-      entry.setEntryType(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_DEFINITIONS));
+      entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_DEFINITIONS));
       entry.setReferenceID(definition.getDocumentBaseURI());
       entry.setEntryDetail(definition);
 
@@ -627,7 +664,7 @@
     if (wsdlTypes == null || wsdlTypes.length == 0)
     {
       // Set missingInput for all test assertions with this entry type
-      setMissingInput(EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_TYPES));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_TYPES));
     }
 
     else
@@ -643,8 +680,7 @@
 
         // Create entry 
         entry = this.reporter.getReport().createEntry();
-        entry.setEntryType(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_TYPES));
+        entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_TYPES));
         entry.setReferenceID(
           candidate.getDefinition(types).getDocumentBaseURI() + "-Types");
         entry.setEntryDetail(types);
@@ -682,8 +718,7 @@
     if (wsdlImports == null || wsdlImports.length == 0)
     {
       // Set missingInput for all test assertions with this entry type
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_IMPORT));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_IMPORT));
     }
 
     else
@@ -693,8 +728,7 @@
         Import wsdlImport = wsdlImports[i];
         // Create entry 
         entry = this.reporter.getReport().createEntry();
-        entry.setEntryType(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_IMPORT));
+        entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_IMPORT));
         entry.setReferenceID(wsdlImport.getNamespaceURI());
         entry.setEntryDetail(wsdlImport);
 
@@ -730,7 +764,7 @@
 
     // Create entry 	  
     entry = this.reporter.getReport().createEntry();
-    entry.setEntryType(EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORT));
+    entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_PORT));
     entry.setReferenceID(port.getName());
     entry.setParentElementName(
       serviceReference.getWSDLElement().getParentElementName());
@@ -762,7 +796,7 @@
     // Create entry 
     entry = this.reporter.getReport().createEntry();
     entry.setEntryType(
-      EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_BINDING));
+      EntryType.getEntryType(TYPE_DESCRIPTION_BINDING));
     entry.setReferenceID(bindingQName.toString());
     entry.setEntryDetail(binding);
 
@@ -799,8 +833,7 @@
 
     // Create entry 
     entry = this.reporter.getReport().createEntry();
-    entry.setEntryType(
-      EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_PORTTYPE));
+    entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_PORTTYPE));
     entry.setReferenceID(portTypeQName.toString());
     entry.setEntryDetail(portType);
 
@@ -838,8 +871,7 @@
 
     // Create entry 
     entry = this.reporter.getReport().createEntry();
-    entry.setEntryType(
-      EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
+    entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
     entry.setReferenceID(operation.getName());
     entry.setParentElementName(portType.getQName().getLocalPart());
     entry.setEntryDetail(operation);
@@ -874,8 +906,7 @@
     // For each operation, 
     if (portType.getOperations() == null)
     {
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
     }
 
     else
@@ -886,8 +917,7 @@
       {
         operation = (Operation) opIt.next();
         if (operation == null || operation.isUndefined())
-          setMissingInput(
-            EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_OPERATION));
+          setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_OPERATION));
         else
           processOperationAssertions(
             operation,
@@ -921,8 +951,7 @@
 
     // Create entry 
     entry = this.reporter.getReport().createEntry();
-    entry.setEntryType(
-      EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+    entry.setEntryType(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
     entry.setReferenceID(messageQName.toString());
     entry.setEntryDetail(message);
 
@@ -1033,8 +1062,7 @@
       if (messageSet.size() == 0)
       {
         // Set all message test assertion results to missingInput
-        setMissingInput(
-          EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+        setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
       }
 
       else
@@ -1090,8 +1118,7 @@
     if (messageSet.size() == 0)
     {
       // Set all message test assertion results to missingInput
-      setMissingInput(
-        EntryType.getEntryType(EntryType.TYPE_DESCRIPTION_MESSAGE));
+      setMissingInput(EntryType.getEntryType(TYPE_DESCRIPTION_MESSAGE));
     }
 
     else
@@ -1706,32 +1733,46 @@
    */
   protected List getWSDLTargetNamespaceList(Definition definition)
   {
-    List list = new Vector();
+    return getWSDLTargetNamespaceList(definition, new ArrayList());
+  }
 
-    // Always add current document targetNamespace
-    if (definition.getTargetNamespace() != null)
-      list.add(definition.getTargetNamespace());
-
-    // Get list of imported WSDL documents
-    Map importMap = definition.getImports();
-
-    Import imp;
-
-    // Add each imports targetNamespace to the list
-    if (importMap != null && !importMap.isEmpty())
+  /**
+   * Build list of WSDL targetNamespaces.
+   * @param definition a Definition object.
+   * @return list of WSDL targetNamespaces.
+   */
+  protected List getWSDLTargetNamespaceList(Definition definition, List alreadyProcessedDefinitions)
+  {
+    List list = new ArrayList();
+    if ((definition != null) && (!alreadyProcessedDefinitions.contains(definition)))
     {
-      Iterator values = importMap.values().iterator();
-      List importList;
-      while (values.hasNext())
+      alreadyProcessedDefinitions.add(definition);
+      
+      // Always add current document targetNamespace
+      if (definition.getTargetNamespace() != null)
+        list.add(definition.getTargetNamespace());
+
+      // Get list of imported WSDL documents
+      Map importMap = definition.getImports();
+
+      Import imp;
+
+      // Add each imports targetNamespace to the list
+      if (importMap != null && !importMap.isEmpty())
       {
-        importList = (List) values.next();
-        Iterator imports = importList.iterator();
-        while (imports.hasNext())
+        Iterator values = importMap.values().iterator();
+        List importList;
+        while (values.hasNext())
         {
-          imp = (Import) imports.next();
-          if (imp != null && imp.getDefinition() != null)
-          list.addAll(getWSDLTargetNamespaceList(imp.getDefinition()));
+          importList = (List) values.next();
+          Iterator imports = importList.iterator();
+          while (imports.hasNext())
+          {
+            imp = (Import) imports.next();
+            if (imp != null && imp.getDefinition() != null)
+            list.addAll(getWSDLTargetNamespaceList(imp.getDefinition(), alreadyProcessedDefinitions));
             // list.add(imp.getDefinition().getTargetNamespace());
+          }
         }
       }
     }
@@ -2335,4 +2376,10 @@
     return true;
 
   }
+  
+  /**
+   * Returns true if these tests should be run (depending on the analyzer
+   * config)
+   */
+  public boolean runTests() { return testable; } 
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/report/impl/EntryImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/report/impl/EntryImpl.java
index e91a1b7..b607759 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/report/impl/EntryImpl.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/report/impl/EntryImpl.java
@@ -14,7 +14,9 @@
 import java.io.StringWriter;
 
 import org.eclipse.wst.wsi.internal.core.WSIConstants;
-import org.eclipse.wst.wsi.internal.core.log.MessageEntry;
+import org.eclipse.wst.wsi.internal.core.document.DocumentElement;
+import org.eclipse.wst.wsi.internal.core.profile.validator.EnvelopeValidator;
+import org.eclipse.wst.wsi.internal.core.profile.validator.MessageValidator;
 import org.eclipse.wst.wsi.internal.core.report.AssertionResult;
 import org.eclipse.wst.wsi.internal.core.report.Entry;
 import org.eclipse.wst.wsi.internal.core.report.EntryContainer;
@@ -203,28 +205,26 @@
     }
 
     if (this.referenceID != null)
-      pw.print(
-        WSIConstants.ATTR_REFERENCE_ID + "=\"" + XMLUtils.xmlEscapedString(this.referenceID) + "\"");
+      pw.print(WSIConstants.ATTR_REFERENCE_ID + "=\"" + XMLUtils.xmlEscapedString(this.referenceID) + "\" ");
+
 
     // If service name was set then add it
     //if (parentElementName != null) {
     //  pw.print(" " + WSIConstants.ATTR_PARENT_ELEMENT_NAME + "=\"" + this.parentElementName + "\"");
     //}
 
-    // End element
-    pw.println(">");
-
     // ADD: Need to check for config option that specifies 
     //      that log entries should be added
 
     // If target is a log entry, then add reference to it
-    if ((entryType != null)
-      && (entryType.getArtifactType().isMessages())
-      && (showLogEntry))
+    if ((entryType != null) && (entryType.getArtifactType().isLoggable()) && (showLogEntry)) 
     {
-      MessageEntry logEntry = (MessageEntry) entryDetail;
-      pw.println(logEntry.toXMLString(WSIConstants.NS_NAME_WSI_LOG));
+      DocumentElement logEntry = (DocumentElement) entryDetail;
+      pw.println("value=\"" + logEntry.toXMLString(WSIConstants.NS_NAME_WSI_LOG) + "\" ");
     }
+   
+    // End element
+    pw.println(">");
 
     return sw.toString();
   }
@@ -263,12 +263,12 @@
   	String envelopeEntryTypeName = messageEntryTypeName;
   	if (messageEntryTypeName != null)
   	{
-  	if (messageEntryTypeName.equals(EntryType.TYPE_MESSAGE_ANY))
-  		envelopeEntryTypeName = EntryType.TYPE_ENVELOPE_ANY;
-  	else if (messageEntryTypeName.equals(EntryType.TYPE_MESSAGE_REQUEST))
-  		envelopeEntryTypeName = EntryType.TYPE_ENVELOPE_REQUEST;
-  	else if (messageEntryTypeName.equals(EntryType.TYPE_MESSAGE_RESPONSE))
-  		envelopeEntryTypeName = EntryType.TYPE_ENVELOPE_RESPONSE;
+  	if (messageEntryTypeName.equals(MessageValidator.TYPE_MESSAGE_ANY))
+  		envelopeEntryTypeName = EnvelopeValidator.TYPE_ENVELOPE_ANY;
+  	else if (messageEntryTypeName.equals(MessageValidator.TYPE_MESSAGE_REQUEST))
+  		envelopeEntryTypeName = EnvelopeValidator.TYPE_ENVELOPE_REQUEST;
+  	else if (messageEntryTypeName.equals(MessageValidator.TYPE_MESSAGE_RESPONSE))
+  		envelopeEntryTypeName = EnvelopeValidator.TYPE_ENVELOPE_RESPONSE;
   	}
 
   	return envelopeEntryTypeName;
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/ArtifactType.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/ArtifactType.java
index 80bdd4c..09667b3 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/ArtifactType.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/ArtifactType.java
@@ -10,6 +10,13 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.util;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.wst.wsi.internal.WSITestToolsPlugin;
+
 /**
  * This class ...
  * 
@@ -23,26 +30,37 @@
    */
   private String type;
 
+  private static Map typeMap;
+  private static List loggableArtifactTypes; 
+
   /**
    * ReportArtifact types.
    */
+  /** @deprecated -- use EnvelopeValidator.TYPE_ENVELOPE **/ 
   public static final String TYPE_ENVELOPE = "envelope";
+  /** @deprecated -- use MessageValidator.TYPE_MESSAGE **/ 
   public static final String TYPE_MESSAGE = "message";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION **/ 
   public static final String TYPE_DESCRIPTION = "description";
+  /** @deprecated -- use UDDIValidator.TYPE_DISCOVERY **/ 
   public static final String TYPE_DISCOVERY = "discovery";
 
   /**
    * ReportArtifact types.
    */
+  /** @deprecated -- use getArtifactType(String typeName) to access ArtifactType **/ 
   public static final ArtifactType ARTIFACT_TYPE_ENVELOPE =
     new ArtifactType(TYPE_ENVELOPE);
+  /** @deprecated -- use getArtifactType(String typeName) to access ArtifactType **/ 
   public static final ArtifactType ARTIFACT_TYPE_MESSAGE =
     new ArtifactType(TYPE_MESSAGE);
+  /** @deprecated -- use getArtifactType(String typeName) to access ArtifactType **/
   public static final ArtifactType ARTIFACT_TYPE_DESCRIPTION =
     new ArtifactType(TYPE_DESCRIPTION);
+  /** @deprecated -- use getArtifactType(String typeName) to access ArtifactType **/
   public static final ArtifactType ARTIFACT_TYPE_DISCOVERY =
     new ArtifactType(TYPE_DISCOVERY);
-
+  
   /**
    * Create artifact type.
    */
@@ -51,9 +69,24 @@
     this.type = type;
   }
 
+  /** Returns true if this artifact can be output to the report. */
+  public boolean isLoggable() 
+  {
+    if (loggableArtifactTypes == null) 
+    {
+      String artifactArray[] = WSITestToolsPlugin.getPlugin().getAllReportArtifactTypes();
+      loggableArtifactTypes = new ArrayList(artifactArray.length);
+      for (int i = 0; i < artifactArray.length; i++)
+         loggableArtifactTypes.add(artifactArray[i]);
+    }
+    return loggableArtifactTypes.contains(type);
+  }
+
   /**
    * Is artifact type envelope.
    * @return true if artifact type envelope.
+   * @deprecated -- an artifactType is no longer restricted to envelope, 
+   *                message, description or discovery.
    */
   public boolean isEnvelope()
   {
@@ -63,6 +96,8 @@
   /**
    * Is artifact type messages.
    * @return true if artifact type messages.
+   * @deprecated -- an artifactType is no longer restricted to envelope, 
+   *                message, description or discovery.
    */
   public boolean isMessages()
   {
@@ -72,6 +107,8 @@
   /**
    * Is artifact type description.
    * @return true if artifact type description.
+   * @deprecated -- an artifactType is no longer restricted to envelope, 
+   *                message, description or discovery.
    */
   public boolean isDescription()
   {
@@ -81,6 +118,8 @@
   /**
    * Is artifact type discovery.
    * @return true if artifact type discovery.
+   * @deprecated -- an artifactType is no longer restricted to envelope, 
+   *                message, description or discovery.
    */
   public boolean isDiscovery()
   {
@@ -97,11 +136,46 @@
   }
 
   /**
+   * Instantiates a new artifact type and adds it to the registry map
+   * @param name - the artifact name (matches artifact type attribute from TAD)
+   */
+  public static void registerArtifactType(String name) {
+      if (typeMap == null)
+          typeMap = new HashMap();
+      typeMap.put(name, new ArtifactType(name));
+  }
+  
+  /**
    * Create artifact type.
    * @param typeName artifact type name.
    * @return newly created artifact type.
    * @throws RuntimeException if artifact type name is invalid or inappropriate.
    */
+  public static final ArtifactType getArtifactType(String typeName)
+    throws RuntimeException
+  {
+      if (typeMap == null) {
+          String types[] = WSITestToolsPlugin.getPlugin().getArtifactTypes();
+          for (int i = 0; i < types.length; i++)
+              registerArtifactType(types[i]);
+      }
+      
+    if (typeMap.containsKey(typeName))
+        return (ArtifactType) typeMap.get(typeName);
+     else {
+         throw new RuntimeException(
+                 "Could not create new artifact type using invalid type name: "
+                 + typeName + ".");
+     }
+  }
+  
+    /**
+   * Create artifact type.
+   * @param typeName artifact type name.
+   * @return newly created artifact type.
+   * @throws RuntimeException if artifact type name is invalid or inappropriate.
+   * @deprecated -- use getArtifactType(String typeName)
+   */
   public static final ArtifactType newArtifactType(String typeName)
     throws RuntimeException
   {
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/EntryType.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/EntryType.java
index 3b27731..b21a36f 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/EntryType.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/EntryType.java
@@ -13,6 +13,9 @@
 import java.util.TreeMap;
 import java.util.Vector;
 
+import org.eclipse.wst.wsi.internal.WSITestToolsPlugin;
+import org.eclipse.wst.wsi.internal.core.profile.validator.BaseValidator;
+
 /**
  * This class ...
  * 
@@ -34,118 +37,114 @@
   /**
    * Entry types accessible by type name.
    */
-  protected static final TreeMap entryTypeMap = new TreeMap();
+  protected static TreeMap entryTypeMap;
 
   /**
    * Entry type names accessible by artifact.
    */
   protected static final TreeMap entryTypeNameMap = new TreeMap();
-  static {
-    entryTypeNameMap.put(ArtifactType.TYPE_ENVELOPE, new Vector());
-    entryTypeNameMap.put(ArtifactType.TYPE_MESSAGE, new Vector());
-    entryTypeNameMap.put(ArtifactType.TYPE_DESCRIPTION, new Vector());
-    entryTypeNameMap.put(ArtifactType.TYPE_DISCOVERY, new Vector());
-  }
 
   /**
    * Envelope entry types.
    */
+  /** @deprecated -- use EnvelopeValidator.TYPE_ENVELOPE_REQUEST */
   public static final String TYPE_ENVELOPE_REQUEST = "requestEnvelope";
+  /** @deprecated -- use EnvelopeValidator.TYPE_ENVELOPE_RESPONSE */
   public static final String TYPE_ENVELOPE_RESPONSE = "responseEnvelope";
+  /** @deprecated -- use EnvelopeValidator.TYPE_ENVELOPE_ANYT */
   public static final String TYPE_ENVELOPE_ANY = "anyEnvelope";
 
   /**
    * Message entry types.
    */
+  /** @deprecated -- use MessageValidator.TYPE_MESSAGE_REQUEST */
   public static final String TYPE_MESSAGE_REQUEST = "requestMessage";
+  /** @deprecated -- use MessageValidator.TYPE_MESSAGE_RESPONSE */
   public static final String TYPE_MESSAGE_RESPONSE = "responseMessage";
+  /** @deprecated -- use MessageValidator.TYPE_MESSAGE_ANY */
   public static final String TYPE_MESSAGE_ANY = "anyMessage";
 
   /**
    * MIME entry types.
    */
+  /** @deprecated -- use MessageValidator.TYPE_MIME_PART */
   public static final String TYPE_MIME_PART = "part";
+  /** @deprecated -- use MessageValidator.TYPE_MIME_ROOT_PART */
   public static final String TYPE_MIME_ROOT_PART = "root-part";
 
   /**
    * Description entry types.
    */
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_DEFINITIONS */
   public static final String TYPE_DESCRIPTION_DEFINITIONS = "definitions";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_IMPORT */
   public static final String TYPE_DESCRIPTION_IMPORT = "import";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_TYPES */
   public static final String TYPE_DESCRIPTION_TYPES = "types";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_MESSAGE */
   public static final String TYPE_DESCRIPTION_MESSAGE = "message";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_OPERATION */
   public static final String TYPE_DESCRIPTION_OPERATION = "operation";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_PORTTYPE */
   public static final String TYPE_DESCRIPTION_PORTTYPE = "portType";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_BINDING */
   public static final String TYPE_DESCRIPTION_BINDING = "binding";
+  /** @deprecated -- use WSDLValidator.TYPE_DESCRIPTION_PORT */
   public static final String TYPE_DESCRIPTION_PORT = "port";
 
   /**
    * Discovery entry types.
    */
+  /** @deprecated -- use UDDIValidator.TYPE_DISCOVERY_BINDINGTEMPLATE */
   public static final String TYPE_DISCOVERY_BINDINGTEMPLATE = "bindingTemplate";
+  /** @deprecated -- use UDDIValidator.TYPE_DISCOVERY_TMODEL */
   public static final String TYPE_DISCOVERY_TMODEL = "tModel";
 
   /**
    * Envelope entry types.
    */
-  public static final EntryType ENTRY_TYPE_REQUESTENV =
-    newEntryType(ArtifactType.ARTIFACT_TYPE_ENVELOPE, TYPE_ENVELOPE_REQUEST);
-  public static final EntryType ENTRY_TYPE_RESPONSEENV =
-    newEntryType(ArtifactType.ARTIFACT_TYPE_ENVELOPE, TYPE_ENVELOPE_RESPONSE);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_REQUESTENV = getEntryType(TYPE_ENVELOPE_REQUEST);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_RESPONSEENV = getEntryType(TYPE_ENVELOPE_RESPONSE);
 
   /**
    * Message entry types.
    */
-  public static final EntryType ENTRY_TYPE_REQUEST =
-    newEntryType(ArtifactType.ARTIFACT_TYPE_MESSAGE, TYPE_MESSAGE_REQUEST);
-  public static final EntryType ENTRY_TYPE_RESPONSE =
-    newEntryType(ArtifactType.ARTIFACT_TYPE_MESSAGE, TYPE_MESSAGE_RESPONSE);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_REQUEST = getEntryType(TYPE_MESSAGE_REQUEST);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_RESPONSE = getEntryType(TYPE_MESSAGE_RESPONSE);
   //  public static final EntryType ENTRY_TYPE_ANYENTRY = 
   //        new EntryType(ArtifactType.ARTIFACT_TYPE_MESSAGES, TYPE_MESSAGE_ANYENTRY);
 
   /**
    * Description entry types.
    */
-  public static final EntryType ENTRY_TYPE_DEFINITIONS =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_DEFINITIONS);
-  public static final EntryType ENTRY_TYPE_IMPORT =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_IMPORT);
-  public static final EntryType ENTRY_TYPE_TYPES =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_TYPES);
-  public static final EntryType ENTRY_TYPE_MESSAGE =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_MESSAGE);
-  public static final EntryType ENTRY_TYPE_OPERATION =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_OPERATION);
-  public static final EntryType ENTRY_TYPE_PORTTYPE =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_PORTTYPE);
-  public static final EntryType ENTRY_TYPE_BINDING =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DESCRIPTION,
-      TYPE_DESCRIPTION_BINDING);
-  public static final EntryType ENTRY_TYPE_PORT =
-    newEntryType(ArtifactType.ARTIFACT_TYPE_DESCRIPTION, TYPE_DESCRIPTION_PORT);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_DEFINITIONS = getEntryType(TYPE_DESCRIPTION_DEFINITIONS);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_IMPORT = getEntryType(TYPE_DESCRIPTION_IMPORT);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_TYPES = getEntryType(TYPE_DESCRIPTION_TYPES);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_MESSAGE = getEntryType(TYPE_DESCRIPTION_MESSAGE);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_OPERATION = getEntryType(TYPE_DESCRIPTION_OPERATION);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_PORTTYPE = getEntryType(TYPE_DESCRIPTION_PORTTYPE);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_BINDING = getEntryType(TYPE_DESCRIPTION_BINDING);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_PORT = getEntryType(TYPE_DESCRIPTION_PORT);
 
   /**
    * Discovery entry types.
    */
-  public static final EntryType ENTRY_TYPE_BINDINGTEMPLATE =
-    newEntryType(
-      ArtifactType.ARTIFACT_TYPE_DISCOVERY,
-      TYPE_DISCOVERY_BINDINGTEMPLATE);
-  public static final EntryType ENTRY_TYPE_TMODEL =
-    newEntryType(ArtifactType.ARTIFACT_TYPE_DISCOVERY, TYPE_DISCOVERY_TMODEL);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_BINDINGTEMPLATE = getEntryType(TYPE_DISCOVERY_BINDINGTEMPLATE);
+  /** @deprecated -- use getEntryType(String typeName) to access EntryType. */
+  public static final EntryType ENTRY_TYPE_TMODEL = getEntryType(TYPE_DISCOVERY_TMODEL);
 
   /**
    * Create entry type.
@@ -213,6 +212,16 @@
   public static final EntryType getEntryType(String typeName)
     throws RuntimeException
   {
+    if (entryTypeMap == null) {
+        BaseValidator validators[] = WSITestToolsPlugin.getPlugin()
+                .getBaseValidators();
+        for (int i = 0; i < validators.length; i++) {
+            String entryTypes[] = validators[i].getEntryTypes();
+            for (int j = 0; j < entryTypes.length; j++)
+                registerEntryType(ArtifactType.getArtifactType(
+                        validators[i].getArtifactType()), entryTypes[j]);
+        }
+    }
     // Get the entry type by type name
     EntryType entryType = (EntryType) entryTypeMap.get(typeName);
 
@@ -254,7 +263,7 @@
   /**
    * Get list of type names for a specified artifact type name.
    */
-  private static final EntryType newEntryType(
+  public static final EntryType registerEntryType(
     ArtifactType artifactType,
     String typeName)
   {
@@ -263,12 +272,21 @@
     // Create entry type
     entryType = new EntryType(artifactType, typeName);
 
+    if (entryTypeMap == null) {
+        entryTypeMap = new TreeMap();
+    }
     // Add to entry type map
     entryTypeMap.put(typeName, entryType);
 
     // Get the entry type name vector for the artifact type
     Vector entryTypeNameList =
       (Vector) entryTypeNameMap.get(artifactType.getTypeName());
+    
+    // Lazy initialize
+    if (entryTypeNameList == null) {
+        entryTypeNameList = new Vector();
+        entryTypeNameMap.put(artifactType.getTypeName(), entryTypeNameList);
+    }
 
     // Add the type name to the list
     entryTypeNameList.add(typeName);
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/TypesRegistry.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/TypesRegistry.java
index 6c12b28..6afdab9 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/TypesRegistry.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/TypesRegistry.java
@@ -421,7 +421,7 @@
       {
         // if xsd:schema element is found -> process schema
         if (XMLUtils.equals(n, ELEM_XSD_SCHEMA))
-          processSchema(n, context);
+          processSchema(n, context, new ArrayList());
       }
       n = n.getNextSibling();
     }
@@ -433,7 +433,7 @@
    * @param importNode
    * @param context
    */
-  private void loadSchema(Node importNode, String context)
+  private void loadSchema(Node importNode, String context, List processedSchemas)
   {
     Element im = (Element) importNode;
     Attr schemaLocation = XMLUtils.getAttribute(im, ATTR_XSD_SCHEMALOCATION);
@@ -455,7 +455,7 @@
           if (XMLUtils.equals(schema.getDocumentElement(), ELEM_XSD_SCHEMA))
             processSchema(
               schema.getDocumentElement(),
-              urlString);
+              urlString, processedSchemas);
     	}
       }
       catch (Throwable t)
@@ -471,66 +471,70 @@
    * @param schema
    * @param context
    */
-  private void processSchema(Node schema, String context)
+  private void processSchema(Node schema, String context, List processedSchemas)
   {
-    Attr a = XMLUtils.getAttribute((Element) schema, ATTR_XSD_TARGETNAMESPACE);
-    String targetNamespace = (a != null) ? a.getValue() : "";
-    // iterate schema
-    Node n = schema.getFirstChild();
-    // !! we suppose that xsd:import element is occured only within xsd:schema element        
-    while (n != null)
-    {
-      if (Node.ELEMENT_NODE == n.getNodeType())
+	if ((schema != null) && (!processedSchemas.contains(schema)))
+	{
+	  processedSchemas.add(schema);
+      Attr a = XMLUtils.getAttribute((Element) schema, ATTR_XSD_TARGETNAMESPACE);
+      String targetNamespace = (a != null) ? a.getValue() : "";
+      // iterate schema
+      Node n = schema.getFirstChild();
+      // !! we suppose that xsd:import element is occured only within xsd:schema element        
+      while (n != null)
       {
-        if (XMLUtils.equals(n, ELEM_XSD_ELEMENT))
+        if (Node.ELEMENT_NODE == n.getNodeType())
         {
-          Element el = (Element) n;
-          a = XMLUtils.getAttribute(el, ATTR_XSD_NAME);
-          QName element =
-            new QName(targetNamespace, (a != null) ? a.getValue() : "");
-
-          a = XMLUtils.getAttribute(el, ATTR_XSD_TYPE);
-          QName type = null;
-          if (a != null)
+          if (XMLUtils.equals(n, ELEM_XSD_ELEMENT))
           {
-            String t = a.getValue();
-            // if type contains ':', it means that it contains qname
-            int i = t.indexOf(':');
-            if (i != -1)
+            Element el = (Element) n;
+            a = XMLUtils.getAttribute(el, ATTR_XSD_NAME);
+            QName element =
+              new QName(targetNamespace, (a != null) ? a.getValue() : "");
+
+            a = XMLUtils.getAttribute(el, ATTR_XSD_TYPE);
+            QName type = null;
+            if (a != null)
             {
-              String prefix = t.substring(0, i);
-              String nsURI = XMLUtils.findNamespaceURI(n, prefix);
-              type = new QName(nsURI, t.substring(i + 1));
+              String t = a.getValue();
+              // if type contains ':', it means that it contains qname
+              int i = t.indexOf(':');
+              if (i != -1)
+              {
+                String prefix = t.substring(0, i);
+                String nsURI = XMLUtils.findNamespaceURI(n, prefix);
+                type = new QName(nsURI, t.substring(i + 1));
+              }
+              else
+                type = new QName(targetNamespace, t);
             }
             else
-              type = new QName(targetNamespace, t);
+            {
+              // suppose that element directly contains type declaration
+              type = element;
+              checkType(n, type);
+            }
+
+            element2Type.put(element, type);
           }
-          else
+          else if (XMLUtils.equals(n, ELEM_XSD_IMPORT))
+            loadSchema(n, context, processedSchemas);
+          else if (XMLUtils.equals(n, ELEM_XSD_INCLUDE))
+            loadSchema(n, context, processedSchemas);
+          else if (XMLUtils.equals(n, ELEM_XSD_COMPLEXTYPE))
           {
-            // suppose that element directly contains type declaration
-            type = element;
+            Element el = (Element) n;
+            a = XMLUtils.getAttribute(el, ATTR_XSD_NAME);
+            QName type =
+              new QName(targetNamespace, (a != null) ? a.getValue() : "");
             checkType(n, type);
           }
 
-          element2Type.put(element, type);
-        }
-        else if (XMLUtils.equals(n, ELEM_XSD_IMPORT))
-          loadSchema(n, context);
-        else if (XMLUtils.equals(n, ELEM_XSD_INCLUDE))
-            loadSchema(n, context);
-        else if (XMLUtils.equals(n, ELEM_XSD_COMPLEXTYPE))
-        {
-          Element el = (Element) n;
-          a = XMLUtils.getAttribute(el, ATTR_XSD_NAME);
-          QName type =
-            new QName(targetNamespace, (a != null) ? a.getValue() : "");
-          checkType(n, type);
         }
 
+        n = n.getNextSibling();
       }
-
-      n = n.getNextSibling();
-    }
+	}
   }
 
   /**
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/UDDIUtils.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/UDDIUtils.java
index c572363..e92e065 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/UDDIUtils.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/UDDIUtils.java
@@ -14,6 +14,10 @@
 import java.util.Iterator;
 import java.util.Vector;
 
+import javax.wsdl.Binding;
+
+import org.eclipse.wst.wsi.internal.core.WSIException;
+import org.eclipse.wst.wsi.internal.core.wsdl.WSDLDocument;
 import org.uddi4j.UDDIException;
 import org.uddi4j.client.UDDIProxy;
 import org.uddi4j.datatype.binding.BindingTemplate;
@@ -333,4 +337,207 @@
 
     return returnString;
   }
+
+  /**
+   * Find the wsdlSpec tModel associated with a binding.
+   */
+  public static TModel findTModel(
+    UDDIProxy uddiProxy,
+    BindingTemplate bindingTemplate,
+    boolean verboseOption)
+    throws WSIException
+  {
+    TModel tModel = null;
+
+    // Get the list of tModel references associated with this bindingTemplate
+    Iterator iterator =
+      bindingTemplate
+        .getTModelInstanceDetails()
+        .getTModelInstanceInfoVector()
+        .iterator();
+
+    // Process each tModel reference
+    Vector tModelKeyList = new Vector();
+    while (iterator.hasNext())
+    {
+      // Get tModelInstanceInfo
+      TModelInstanceInfo tModelInstanceInfo =
+        (TModelInstanceInfo) iterator.next();
+
+      // Add key to list
+      tModelKeyList.add(tModelInstanceInfo.getTModelKey());
+    }
+
+    // Get the tModels associated with the bindingTemplate
+    if (tModelKeyList.size() > 0)
+    {
+      try
+      {
+        // Get the tModel details
+        TModelDetail tModelDetail = uddiProxy.get_tModelDetail(tModelKeyList);
+
+        // Get the list of tModels
+        Iterator tModelIterator = tModelDetail.getTModelVector().iterator();
+
+        //boolean tModelFound = false;
+        TModel nextTModel = null;
+
+        // Go through the list of tModels
+        while ((tModelIterator.hasNext()) && (tModel == null))
+        {
+          // Get next tModel in list
+          nextTModel = (TModel) tModelIterator.next();
+
+          if (verboseOption)
+          {
+            System.err.println(
+              "      TModel referenced from bindingTemplate - "
+                + UDDIUtils.tModelToString(nextTModel));
+          }
+
+          // If this is a wsdlSpec tModel, then this is the tModel we want
+          if (isWsdlSpec(nextTModel))
+            tModel = nextTModel;
+        }
+      }
+
+      catch (Exception e)
+      {
+        // Throw WSIException
+        throw new WSIException("Could not get tModel details.", e);
+      }
+    }
+
+    else
+    {
+      // Throw exception
+      //throw new WSIException("UDDI bindingTemplate did not contain any tModel references.");
+    }
+
+    return tModel;
+  }
+  
+  /**
+   * Determine if this is a wsdlSpec tModel.
+   */
+  public static boolean isWsdlSpec(TModel tModel)
+  {
+    boolean tModelFound = false;
+    CategoryBag categoryBag = null;
+    Iterator categoryBagIterator = null;
+
+    // Determine if the catetgoryBag contains wsdlSpec
+    if ((categoryBag = tModel.getCategoryBag()) != null)
+    {
+      // Get the list of keyed references
+      categoryBagIterator = categoryBag.getKeyedReferenceVector().iterator();
+
+      KeyedReference keyedReference = null;
+
+      // Go through the list of keyed references
+      while (categoryBagIterator.hasNext() && !(tModelFound))
+      {
+        // Get next keyed reference
+        keyedReference = (KeyedReference) categoryBagIterator.next();
+
+        // If this is a types taxonomy tModel and the value is wsdlSpec, then this is the tModel we want
+        // REMOVE: It is not necessary to check the key name
+        //if (keyedReference.getTModelKey().equalsIgnoreCase(TModel.TYPES_TMODEL_KEY) &&
+        //   "wsdlSpec".equals(keyedReference.getKeyValue()) &&
+        //   ("types".equals(keyedReference.getKeyName()) ||
+        //    "uddi-org:types".equals(keyedReference.getKeyName()))) {
+        //  tModelFound = true;
+        //}
+        if (keyedReference
+          .getTModelKey()
+          .equalsIgnoreCase(TModel.TYPES_TMODEL_KEY)
+          && "wsdlSpec".equals(keyedReference.getKeyValue()))
+        {
+          tModelFound = true;
+        }
+      }
+    }
+
+    return tModelFound;
+  }
+  /**
+   * Get an OverviewURL from tModel.
+   */
+  public static String getOverviewURL(TModel tModel)
+  {
+    if (tModel != null
+      && tModel.getOverviewDoc() != null
+      && tModel.getOverviewDoc().getOverviewURL() != null)
+    {
+      return tModel.getOverviewDoc().getOverviewURL().getText();
+    }
+    return null;
+  }
+  
+
+  /**
+   * Get WSDL document.
+   */
+  public static String getWSDLLocation(String wsdlLocation)
+  {
+    int index;
+
+    // Check if the overviewURL contains a fragment identifier
+    if ((index = wsdlLocation.indexOf("#")) > -1)
+    {
+      wsdlLocation = wsdlLocation.substring(0, index);
+    }
+    return wsdlLocation;
+  }
+  /**
+   * Get WSDL binding from the overviewURL in the tModel.
+   */
+  public static Binding getBinding(String overviewURL, WSDLDocument wsdlDocument)
+  {
+    int index;
+    int nameIndex;
+
+    Binding[] bindings = wsdlDocument.getBindings();
+    if (bindings == null || bindings.length == 0)
+      return null;
+
+    if (overviewURL != null)
+    {
+      // Check if the overviewURL contains a fragment identifier
+      if ((index = overviewURL.indexOf("#")) > -1)
+      {
+        // TEMP: Need to use a real XPath evaluator like Xalan
+        String nameAttribute = "@name=";
+
+        // Locate name reference
+        if ((nameIndex =
+          overviewURL.substring(index + 1).indexOf(nameAttribute))
+          > -1)
+        {
+          // Get the next character which should be a quote
+          int firstQuoteIndex = index + 1 + nameIndex + nameAttribute.length();
+          String quote =
+            overviewURL.substring(firstQuoteIndex, firstQuoteIndex + 1);
+
+          // Get the part of the URL which should contain the binding name
+          String urlPart = overviewURL.substring(firstQuoteIndex + 1);
+
+          // Find the next quote
+          int nextQuoteIndex;
+          if ((nextQuoteIndex = urlPart.indexOf(quote)) > -1)
+          {
+            String bindingName = urlPart.substring(0, nextQuoteIndex);
+            //look for binding with the specified name
+            for (int i = 0; i < bindings.length; i++)
+            {
+              if (bindingName.equals(bindings[i].getQName().getLocalPart()))
+                return bindings[i];
+            }
+          }
+        }
+      }
+    }
+
+    return bindings[0];
+  }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/Utils.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/Utils.java
index 5b8251a..0d379d0 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/Utils.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/Utils.java
@@ -35,13 +35,16 @@
 import com.ibm.icu.util.StringTokenizer;
 import java.util.Vector;
 
+import org.eclipse.wst.wsi.internal.WSITestToolsPlugin;
 import org.eclipse.wst.wsi.internal.core.WSIConstants;
 import org.eclipse.wst.wsi.internal.core.WSIException;
+import org.eclipse.wst.wsi.internal.core.analyzer.config.AnalyzerConfig;
 import org.eclipse.wst.wsi.internal.core.log.MimePart;
 import org.eclipse.wst.wsi.internal.core.log.MimeParts;
 import org.eclipse.wst.wsi.internal.core.log.impl.MimePartImpl;
 import org.eclipse.wst.wsi.internal.core.log.impl.MimePartsImpl;
 import org.eclipse.wst.wsi.internal.core.profile.ProfileAssertions;
+import org.eclipse.wst.wsi.internal.core.report.Reporter;
 import org.eclipse.wst.wsi.internal.core.xml.XMLUtils;
 
 import com.ibm.icu.text.SimpleDateFormat;
@@ -57,19 +60,6 @@
 
   
   private static Map validProfileTADVersions;
-  
-  /* Register Basic Profile TAD versions */
-  static {
-      validProfileTADVersions = new HashMap();
-      registerValidProfileTADVersion(WSIConstants.BASIC_PROFILE_TAD_NAME,
-              WSIConstants.BASIC_PROFILE_TAD_VERSION);
-      registerValidProfileTADVersion(WSIConstants.BASIC_PROFILE_1_1_TAD_NAME,
-              WSIConstants.BASIC_PROFILE_1_1_TAD_VERSION);
-      registerValidProfileTADVersion(WSIConstants.SIMPLE_SOAP_BINDINGS_PROFILE_TAD_NAME,
-              WSIConstants.SIMPLE_SOAP_BINDINGS_PROFILE_TAD_VERSION);
-      registerValidProfileTADVersion(WSIConstants.ATTACHMENTS_PROFILE_TAD_NAME,
-              WSIConstants.ATTACHMENTS_PROFILE_TAD_VERSION);
-  }
 
   /**
    * Common timestamp format.
@@ -1159,6 +1149,8 @@
    */
   public static void registerValidProfileTADVersion(String name, String version)
   {
+      if (validProfileTADVersions == null)
+          validProfileTADVersions = new HashMap();
       validProfileTADVersions.put(name, version);
   }
   
@@ -1174,6 +1166,12 @@
 
     String name = profileAssertions.getTADName();
     String version = profileAssertions.getTADVersion();
+    
+    if (validProfileTADVersions == null) {
+       String versions[][] = WSITestToolsPlugin.getPlugin().getAllTADVersions();
+       for (int i = 0; i < versions.length; i++)
+           registerValidProfileTADVersion(versions[i][0], versions[i][1]);
+    }
 
     if (validProfileTADVersions.containsKey(name))
         return checkVersionNumber((String) validProfileTADVersions.get(name),
@@ -1428,4 +1426,21 @@
 	}
   	catch (Exception e){}
   }
+
+  public static AnalyzerConfig getAnalyzerConfig(Reporter reporter) 
+  {
+	AnalyzerConfig result = null;
+	if (reporter != null)
+	{
+	  try
+	  {
+		result = reporter.getReport().getReportContext().getAnalyzer().getAnalyzerConfig();
+	  }
+	  catch (Exception e)
+	  {
+		result = null;
+	  }
+	}
+	return result;
+  }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/WSDLUtil.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/WSDLUtil.java
index 1adcf00..50de6c3 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/WSDLUtil.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/WSDLUtil.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.util;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
@@ -80,7 +81,7 @@
         {
           Iterator it2 = v.iterator();
           while (it2.hasNext())
-            expandDefinition(def, (Import) it2.next());
+            expandDefinition(def, (Import) it2.next(), new ArrayList());
         }
       }
     }
@@ -91,45 +92,50 @@
    * @param target WSDL definition.
    * @param im internal method.
    */
-  static private void expandDefinition(Definition target, Import im)
+  static private void expandDefinition(Definition target, Import im, List processedDefinitions)
   {
-    if (im != null && im.getDefinition() != null)
+    if (im != null)
     {
       Definition d = im.getDefinition();
-      if (d.getMessages() != null)
+      if ((d != null) && (!processedDefinitions.contains(d)))
       {
-        Iterator it = d.getMessages().values().iterator();
-        while (it.hasNext())
-          target.addMessage((Message) it.next());
-      }
-      if (d.getPortTypes() != null)
-      {
-        Iterator it = d.getPortTypes().values().iterator();
-        while (it.hasNext())
-          target.addPortType((PortType) it.next());
-      }
-      if (d.getBindings() != null)
-      {
-        Iterator it = d.getBindings().values().iterator();
-        while (it.hasNext())
-          target.addBinding((Binding) it.next());
-      }
-      if (d.getServices() != null)
-      {
-        Iterator it = d.getServices().values().iterator();
-        while (it.hasNext())
-          target.addService((Service) it.next());
-      }
+    	processedDefinitions.add(d);
 
-      Iterator it = d.getImports().values().iterator();
-      while (it.hasNext())
-      {
-        List v = (List) it.next();
-        if (v != null)
+        if (d.getMessages() != null)
         {
-          Iterator it2 = v.iterator();
-          while (it2.hasNext())
-            expandDefinition(target, (Import) it2.next());
+          Iterator it = d.getMessages().values().iterator();
+          while (it.hasNext())
+            target.addMessage((Message) it.next());
+        }
+        if (d.getPortTypes() != null)
+        {
+          Iterator it = d.getPortTypes().values().iterator();
+          while (it.hasNext())
+            target.addPortType((PortType) it.next());
+        }
+        if (d.getBindings() != null)
+        {
+          Iterator it = d.getBindings().values().iterator();
+          while (it.hasNext())
+            target.addBinding((Binding) it.next());
+        }
+        if (d.getServices() != null)
+        {
+          Iterator it = d.getServices().values().iterator();
+          while (it.hasNext())
+            target.addService((Service) it.next());
+        }
+
+        Iterator it = d.getImports().values().iterator();
+        while (it.hasNext())
+        {
+          List v = (List) it.next();
+          if (v != null)
+          {
+            Iterator it2 = v.iterator();
+            while (it2.hasNext())
+              expandDefinition(target, (Import) it2.next(), processedDefinitions);
+          }
         }
       }
     }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/WSDLUtils.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/WSDLUtils.java
index f175be3..3a7b61b 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/WSDLUtils.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/WSDLUtils.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.wsdl;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -381,4 +382,30 @@
 
     return returnSet;
   }
+  
+  public static boolean isSOAP12WSDL(WSDLDocument wsdlDocument)
+  {
+	boolean result = false;
+	if (wsdlDocument != null)
+	{
+	  Binding[] bindings = wsdlDocument.getBindings();
+	  List extensibilityElementList = new ArrayList();
+	  if (bindings != null)
+	  {
+		for (int i = 0; i < bindings.length; i++)
+			extensibilityElementList.addAll(bindings[i].getExtensibilityElements());
+		Iterator iterator = extensibilityElementList.iterator();
+		while (iterator.hasNext()) 
+		{
+		  ExtensibilityElement e = (ExtensibilityElement) iterator.next();
+			if (WSIConstants.NS_URI_WSDL_SOAP12.equals(e.getElementType().getNamespaceURI()))
+			{
+			  result = true;
+			  break;
+			}
+		}
+	  }
+	}
+    return result;
+  }
 }
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/traversal/WSDLTraversal.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/traversal/WSDLTraversal.java
index 4a3569a..1abc2b5 100644
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/traversal/WSDLTraversal.java
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/traversal/WSDLTraversal.java
@@ -9,7 +9,9 @@
  *   IBM - Initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.wsi.internal.core.wsdl.traversal;
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
@@ -147,12 +149,14 @@
   private boolean visitSOAPHeaderFault = false;
   private boolean visitSOAPOperation = false;
 
+  List alreadyTraversedDefinitions;
   /**
    * Default constructor.
    * @see java.lang.Object#Object()
    */
   public WSDLTraversal()
   {
+	alreadyTraversedDefinitions = new ArrayList();
   }
 
   /**
@@ -1822,16 +1826,20 @@
     Object parent,
     WSDLTraversalContext ctx)
   {
+	if ((objDefinition == null) || (this.alreadyTraversedDefinitions.contains(objDefinition)))
+	{
+	  return;	
+	}
+	this.alreadyTraversedDefinitions.add(objDefinition);
     ctx.resumeDefinitionProcessing();
     ctx.setDefinition(objDefinition);
+
     if (visitDefinition)
     {
       visitor.visit(objDefinition, parent, ctx);
       if (!ctx.processDefinition())
         return;
     }
-    if (objDefinition == null)
-      return;
     if (traverseDefinition2Import && objDefinition.getImports() != null)
     {
       Iterator it = objDefinition.getImports().values().iterator();
@@ -2560,7 +2568,18 @@
         return;
     }
     if (traverseImport2Definition)
-      traverse(objImport.getDefinition(), objImport, ctx);
+    {
+      try
+      {
+        Definition definition = objImport.getDefinition();
+        if ((definition != null) && (!alreadyTraversedDefinitions.contains(definition)))
+        {
+          alreadyTraversedDefinitions.add(definition);
+          traverse(objImport.getDefinition(), objImport, ctx);
+        }
+      }
+      catch (Exception e){}
+    }
   }
 
   /**
diff --git a/docs/org.eclipse.jst.ws.axis.ui.doc.user/org.eclipse.jst.ws.axis.ui.doc.userindex.html b/docs/org.eclipse.jst.ws.axis.ui.doc.user/org.eclipse.jst.ws.axis.ui.doc.userindex.html
index 151fbcb..e27120a 100644
--- a/docs/org.eclipse.jst.ws.axis.ui.doc.user/org.eclipse.jst.ws.axis.ui.doc.userindex.html
+++ b/docs/org.eclipse.jst.ws.axis.ui.doc.user/org.eclipse.jst.ws.axis.ui.doc.userindex.html
@@ -4,15 +4,11 @@
 <html lang="en-us" xml:lang="en-us">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="copyright" content="(C) Copyright IBM Corporation 2006" />
+<meta name="copyright" content="Copyright (c) 2000, 2006 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html. Contributors: IBM Corporation - initial API and implementation" />
 <meta name="security" content="public" />
 <meta name="Robots" content="index,follow" />
 <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
 <meta name="DC.Format" content="XHTML" />
-<!-- All rights reserved. Licensed Materials Property of IBM -->
-<!-- US Government Users Restricted Rights -->
-<!-- Use, duplication or disclosure restricted by -->
-<!-- GSA ADP Schedule Contract with IBM Corp. -->
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/ibmdita.css" />
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/common.css" />
 <title>Index</title>
diff --git a/docs/org.eclipse.jst.ws.consumption.infopop/META-INF/MANIFEST.MF b/docs/org.eclipse.jst.ws.consumption.infopop/META-INF/MANIFEST.MF
index a450cd0..8da9cf1 100644
--- a/docs/org.eclipse.jst.ws.consumption.infopop/META-INF/MANIFEST.MF
+++ b/docs/org.eclipse.jst.ws.consumption.infopop/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.ws.consumption.infopop; singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.202.qualifier
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
diff --git a/docs/org.eclipse.jst.ws.consumption.infopop/plugin.xml b/docs/org.eclipse.jst.ws.consumption.infopop/plugin.xml
index 8d28fdb..cc9d1f8 100644
--- a/docs/org.eclipse.jst.ws.consumption.infopop/plugin.xml
+++ b/docs/org.eclipse.jst.ws.consumption.infopop/plugin.xml
@@ -2,7 +2,7 @@
 <?eclipse version="3.0"?>
 <?NLS TYPE="org.eclipse.help.toc"?> 
 <!-- /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/docs/org.eclipse.jst.ws.consumption.infopop/wsconsumptionui-f1Contexts.xml b/docs/org.eclipse.jst.ws.consumption.infopop/wsconsumptionui-f1Contexts.xml
index 3c2b994..7ccce3f 100644
--- a/docs/org.eclipse.jst.ws.consumption.infopop/wsconsumptionui-f1Contexts.xml
+++ b/docs/org.eclipse.jst.ws.consumption.infopop/wsconsumptionui-f1Contexts.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.contexts"?>
 <!-- /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,15 +35,12 @@
 <!-- First Page-->
 <description>On this page select the artifact from which your Web client will be created, and the stages of Web services development that you want
 to complete:
-<ul>
-<li>Develop: this will create the client code</li>
-<li>Assemble: this ensures that the project that will host the 
-client gets associated to an EAR when required by the target application server</li>
-<li>Deploy: this will create the deployment code for the client</li>
-<li>Install: this will install the client on the chosen server</li>
-<li>Start: this will start the server once the client has been installed on it</li>
-<li>Test: this will provide various options for testing the client</li>
-</ul>
+- Develop: this will create the client code
+- Assemble: this ensures that the project that will host the client gets associated to an EAR when required by the target application server
+- Deploy: this will create the deployment code for the client
+- Install: this will install the client on the chosen server
+- Start: this will start the server once the client has been installed on it
+- Test: this will provide various options for testing the client
 Select the server and runtime for your Web client, and whether or not you want to publish or monitor the service.
 </description>
 </context>
@@ -93,14 +90,13 @@
 <!--Client slider of the First Page-->
 <description>Select the stages of Web services client development that you want
 to complete using the slider:
-<ul>
-<li>Develop: this will create the client code</li>
-<li>Assemble: </li>
-<li>Deploy: this will create the deployment code for the client</li>
-<li>Install: this will install the client on the chosen server</li>
-<li>Start: this will start the server once the client has been installed on it</li>
-<li>Test: this will provide various options for testing the client</li>
-</ul></description>
+- Develop: this will create the client code
+- Assemble: this ensures that the project that will host the client gets associated to an EAR when required by the target application server
+- Deploy: this will create the deployment code for the client
+- Install: this will install the client on the chosen server
+- Start: this will start the server once the client has been installed on it
+- Test: this will provide various options for testing the client
+</description>
 </context>
 
 <context id="WSWSCEN0030">
@@ -434,14 +430,14 @@
 
 <context id="PTPP0001">
 <!--PTPP0001 for the Topology Preference Page-->
-<description><p>These tables respresents the the types of projects available into which you can generate 
+<description>These tables respresents the the types of projects available into which you can generate 
 a Web service or client. You cannot add or remove project types, however you can change the order in which 
 they appear in the Web services wizard. This is useful if you are creating several Web services that use 
 the same type of service or client project because you can set that service or client project type as the default. To change 
 the order, select a project type and use the up and down arrows to move it within the list. Changing the 
-order of the list does not restrict your ability to select any of the options.</p>
-<p>If you select the check box, by default the Web services wizard will generate the Web services 
-server and client code into different EARs. It is recommended that you enable this feature.</p>
+order of the list does not restrict your ability to select any of the options.
+If you select the check box, by default the Web services wizard will generate the Web services 
+server and client code into different EARs. It is recommended that you enable this feature.
 </description>
 </context>
 
diff --git a/docs/org.eclipse.jst.ws.consumption.infopop/wscreationui-f1Contexts.xml b/docs/org.eclipse.jst.ws.consumption.infopop/wscreationui-f1Contexts.xml
index a82cbaf..d2ccfe8 100644
--- a/docs/org.eclipse.jst.ws.consumption.infopop/wscreationui-f1Contexts.xml
+++ b/docs/org.eclipse.jst.ws.consumption.infopop/wscreationui-f1Contexts.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.contexts"?>
 <!-- /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,15 +75,12 @@
 <!-- First Page-->
 <description>On this page select the artifact from which your Web service or client will be created, and the stages of Web services development that you want
 to complete:
-<ul>
-<li>Develop: this will create the service code</li>
-<li>Assemble: this ensures that the project that will host the Web service or 
-client gets associated to an EAR when required by the target application server</li>
-<li>Deploy: this will create the deployment code for the service</li>
-<li>Install: this will install the service on the chosen server</li>
-<li>Start: this will start the server once the service has been installed on it</li>
-<li>Test: this will provide various options for testing the service</li>
-</ul>
+- Develop: this will create the service code
+- Assemble: this ensures that the project that will host the Web service or client gets associated to an EAR when required by the target application server
+- Deploy: this will create the deployment code for the service
+- Install: this will install the service on the chosen server
+- Start: this will start the server once the service has been installed on it
+- Test: this will provide various options for testing the service
 Select the server and runtime for your Web service or client, and whether or not you want to publish or monitor the service.
 </description>
 </context>
@@ -117,14 +114,13 @@
 <!--Service slider of the First Page-->
 <description>Select the stages of Web services development that you want
 to complete using the slider:
-<ul>
-<li>Develop: this will create the service code</li>
-<li>Assemble: </li>
-<li>Deploy: this will create the deployment code for the service</li>
-<li>Install: this will install the service on the chosen server</li>
-<li>Start: this will start the server once the service has been installed on it</li>
-<li>Test: this will provide various options for testing the service</li>
-</ul></description>
+- Develop: this will create the service code
+- Assemble: this ensures that the project that will host the Web service or client gets associated to an EAR when required by the target application server
+- Deploy: this will create the deployment code for the service
+- Install: this will install the service on the chosen server
+- Start: this will start the server once the service has been installed on it
+- Test: this will provide various options for testing the service
+</description>
 </context>
 
 <context id="WSWSCEN0022">
@@ -159,14 +155,13 @@
 <!--Client slider of the First Page-->
 <description>Select the stages of Web services client development that you want
 to complete using the slider:
-<ul>
-<li>Develop: this will create the client code</li>
-<li>Assemble: </li>
-<li>Deploy: this will create the deployment code for the client</li>
-<li>Install: this will install the client on the chosen server</li>
-<li>Start: this will start the server once the client has been installed on it</li>
-<li>Test: this will provide various options for testing the client</li>
-</ul></description>
+- Develop: this will create the client code
+- Assemble: this ensures that the project that will host the Web service or client gets associated to an EAR when required by the target application server
+- Deploy: this will create the deployment code for the client
+- Install: this will install the client on the chosen server
+- Start: this will start the server once the client has been installed on it
+- Test: this will provide various options for testing the client
+</description>
 </context>
 
 <context id="WSWSCEN0030">
diff --git a/docs/org.eclipse.jst.ws.consumption.ui.doc.user/META-INF/MANIFEST.MF b/docs/org.eclipse.jst.ws.consumption.ui.doc.user/META-INF/MANIFEST.MF
index 0d5fe40..780f81f 100644
--- a/docs/org.eclipse.jst.ws.consumption.ui.doc.user/META-INF/MANIFEST.MF
+++ b/docs/org.eclipse.jst.ws.consumption.ui.doc.user/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.ws.consumption.ui.doc.user; singleton:=true
-Bundle-Version: 1.5.1.qualifier
+Bundle-Version: 1.0.202.qualifier
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
 Eclipse-LazyStart: true
diff --git a/docs/org.eclipse.jst.ws.consumption.ui.doc.user/org.eclipse.jst.ws.consumption.ui.doc.userindex.html b/docs/org.eclipse.jst.ws.consumption.ui.doc.user/org.eclipse.jst.ws.consumption.ui.doc.userindex.html
index b4ab32a..82527a6 100644
--- a/docs/org.eclipse.jst.ws.consumption.ui.doc.user/org.eclipse.jst.ws.consumption.ui.doc.userindex.html
+++ b/docs/org.eclipse.jst.ws.consumption.ui.doc.user/org.eclipse.jst.ws.consumption.ui.doc.userindex.html
@@ -4,15 +4,11 @@
 <html lang="en-us" xml:lang="en-us">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="copyright" content="(C) Copyright IBM Corporation 2006" />
+<meta name="copyright" content="Copyright (c) 2000, 2006 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html. Contributors: IBM Corporation - initial API and implementation" />
 <meta name="security" content="public" />
 <meta name="Robots" content="index,follow" />
 <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
 <meta name="DC.Format" content="XHTML" />
-<!-- All rights reserved. Licensed Materials Property of IBM -->
-<!-- US Government Users Restricted Rights -->
-<!-- Use, duplication or disclosure restricted by -->
-<!-- GSA ADP Schedule Contract with IBM Corp. -->
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/ibmdita.css" />
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/common.css" />
 <title>Index</title>
diff --git a/docs/org.eclipse.jst.ws.doc.user/org.eclipse.jst.ws.doc.userindex.html b/docs/org.eclipse.jst.ws.doc.user/org.eclipse.jst.ws.doc.userindex.html
index 75ae494..fde7154 100644
--- a/docs/org.eclipse.jst.ws.doc.user/org.eclipse.jst.ws.doc.userindex.html
+++ b/docs/org.eclipse.jst.ws.doc.user/org.eclipse.jst.ws.doc.userindex.html
@@ -4,15 +4,11 @@
 <html lang="en-us" xml:lang="en-us">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="copyright" content="(C) Copyright IBM Corporation 2006" />
+<meta name="copyright" content="Copyright (c) 2000, 2006 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html. Contributors: IBM Corporation - initial API and implementation" />
 <meta name="security" content="public" />
 <meta name="Robots" content="index,follow" />
 <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
 <meta name="DC.Format" content="XHTML" />
-<!-- All rights reserved. Licensed Materials Property of IBM -->
-<!-- US Government Users Restricted Rights -->
-<!-- Use, duplication or disclosure restricted by -->
-<!-- GSA ADP Schedule Contract with IBM Corp. -->
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/ibmdita.css" />
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/common.css" />
 <title>Index</title>
diff --git a/docs/org.eclipse.wst.ws.infopop/META-INF/MANIFEST.MF b/docs/org.eclipse.wst.ws.infopop/META-INF/MANIFEST.MF
index 77d6061..34c8d83 100644
--- a/docs/org.eclipse.wst.ws.infopop/META-INF/MANIFEST.MF
+++ b/docs/org.eclipse.wst.ws.infopop/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.ws.infopop; singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.202.qualifier
 Bundle-Localization: plugin
 Eclipse-LazyStart: true
 Bundle-Vendor: %providerName
diff --git a/docs/org.eclipse.wst.ws.infopop/plugin.xml b/docs/org.eclipse.wst.ws.infopop/plugin.xml
index 8b54fb0..3fe3bfd 100644
--- a/docs/org.eclipse.wst.ws.infopop/plugin.xml
+++ b/docs/org.eclipse.wst.ws.infopop/plugin.xml
@@ -2,7 +2,7 @@
 <?eclipse version="3.0"?>
 <?NLS TYPE="org.eclipse.help.toc"?> 
 <!-- /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/docs/org.eclipse.wst.ws.infopop/webserviceui-f1Contexts.xml b/docs/org.eclipse.wst.ws.infopop/webserviceui-f1Contexts.xml
index 5469f3f..bed6711 100644
--- a/docs/org.eclipse.wst.ws.infopop/webserviceui-f1Contexts.xml
+++ b/docs/org.eclipse.wst.ws.infopop/webserviceui-f1Contexts.xml
@@ -17,46 +17,36 @@
 <context id="PWSI0001">
 <!--desc-->
 <description>The Web services WS-I validation tools support the level of WS-I compliance outlined in the WS-I Basic Profile 1.1, the WS-I Simple SOAP Binding Profile 1.0 (WS-I SSBP), and the WS-I Attachments Profile 1.0 (WS-I AP). You can choose to make your Web service compliant or non-compliant, depending on your needs. For example, encoded style (RPC/encoded), SOAP over JMS protocols, and secured Web services, are not WS-I compliant.
-<br />
+
 You can set the level of compliance for either the Basic Profile and the Simple SOAP Binding Profile, or for the Attachments Profile. You can select from three levels of compliance with WS-I specifications:
-<ul>
-<li>Require WS-I compliance - this level prevents you from creating a non-compliant Web service.</li>
-<li>Suggest WS-I compliance - this level allows you to create a non-compliant Web service, but provides a visible warning stating how the service is non-compliant.</li>
-<li>Ignore WS-I compliance - this level allows you to create a non-compliant Web service and does not notify you of non-compliance.</li>
-</ul>
-<br />
+- Require WS-I compliance - this level prevents you from creating a non-compliant Web service.
+- Suggest WS-I compliance - this level allows you to create a non-compliant Web service, but provides a visible warning stating how the service is non-compliant.
+- Ignore WS-I compliance - this level allows you to create a non-compliant Web service and does not notify you of non-compliance.
+
 You can also select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
-<br />
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
+
 If you select to wait for WSDL validation to complete, the Web services wizards will prevent you from going forward and completing additional wizard pages once you have selected your WSDL file until that WSDL file has been validated. If the WSDL file is not valid, you will be given the option of exiting the wizard or continuing with the invalid WSDL file.
 </description>
 </context>
 
 <context id="PWSI0004">
 <description>The Web services WS-I validation tools support the level of WS-I compliance outlined in the WS-I Basic Profile 1.1, the WS-I Simple SOAP Binding Profile 1.0 (WS-I SSBP), and the WS-I Attachments Profile 1.0 (WS-I AP). You can choose to make your Web service compliant or non-compliant, depending on your needs. For example, encoded style (RPC/encoded), SOAP over JMS protocols, and secured Web services, are not WS-I compliant.
-<br />
 You can set the level of compliance for either the Basic Profile and the Simple SOAP Binding Profile, or for the Attachments Profile. You can select from three levels of compliance with WS-I specifications:
-<ul>
-<li>Require WS-I compliance - this level prevents you from creating a non-compliant Web service.</li>
-<li>Suggest WS-I compliance - this level allows you to create a non-compliant Web service, but provides a visible warning stating how the service is non-compliant.</li>
-<li>Ignore WS-I compliance - this level allows you to create a non-compliant Web service and does not notify you of non-compliance.</li>
-</ul>
+- Require WS-I compliance - this level prevents you from creating a non-compliant Web service.
+- Suggest WS-I compliance - this level allows you to create a non-compliant Web service, but provides a visible warning stating how the service is non-compliant.
+- Ignore WS-I compliance - this level allows you to create a non-compliant Web service and does not notify you of non-compliance.
 </description>
 </context>
 
 <context id="PWSI0008">
 <description>The Web services WS-I validation tools support the level of WS-I compliance outlined in the WS-I Basic Profile 1.1, the WS-I Simple SOAP Binding Profile 1.0 (WS-I SSBP), and the WS-I Attachments Profile 1.0 (WS-I AP). You can choose to make your Web service compliant or non-compliant, depending on your needs. For example, encoded style (RPC/encoded), SOAP over JMS protocols, and secured Web services, are not WS-I compliant.
-<br />
 You can set the level of compliance for either the Basic Profile and the Simple SOAP Binding Profile, or for the Attachments Profile. You can select from three levels of compliance with WS-I specifications:
-<ul>
-<li>Require WS-I compliance - this level prevents you from creating a non-compliant Web service.</li>
-<li>Suggest WS-I compliance - this level allows you to create a non-compliant Web service, but provides a visible warning stating how the service is non-compliant.</li>
-<li>Ignore WS-I compliance - this level allows you to create a non-compliant Web service and does not notify you of non-compliance.</li>
-</ul>
+- Require WS-I compliance - this level prevents you from creating a non-compliant Web service.
+- Suggest WS-I compliance - this level allows you to create a non-compliant Web service, but provides a visible warning stating how the service is non-compliant.
+- Ignore WS-I compliance - this level allows you to create a non-compliant Web service and does not notify you of non-compliance.
 </description>
 </context>
 
@@ -64,11 +54,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
@@ -76,11 +64,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
@@ -88,11 +74,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
@@ -107,11 +91,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
@@ -119,11 +101,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
@@ -131,11 +111,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
@@ -143,11 +121,9 @@
 <!--desc-->
 <description>
 You can select which types of WSDL files to run validation on:
-<ul>
-<li>By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.</li>
-<li>By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.</li>
-<li>By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.</li>
-</ul>
+- By selecting "No wizard WSDL validation" the wizards will not run validation on the WSDL file.
+- By selecting to run validation on remote files, the wizards will only validate WSDL files that exist outside of your workspace.
+- By selecting to run validation on all WSDL files the wizard will validate all WSDL files, regardless of where they reside.
 </description>
 </context>
 
diff --git a/docs/org.eclipse.wst.wsdl.ui.doc.user/org.eclipse.wst.wsdl.ui.doc.userindex.html b/docs/org.eclipse.wst.wsdl.ui.doc.user/org.eclipse.wst.wsdl.ui.doc.userindex.html
index 9c0932f..717556b 100644
--- a/docs/org.eclipse.wst.wsdl.ui.doc.user/org.eclipse.wst.wsdl.ui.doc.userindex.html
+++ b/docs/org.eclipse.wst.wsdl.ui.doc.user/org.eclipse.wst.wsdl.ui.doc.userindex.html
@@ -4,15 +4,11 @@
 <html lang="en-us" xml:lang="en-us">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="copyright" content="(C) Copyright IBM Corporation 2006" />
+<meta name="copyright" content="Copyright (c) 2000, 2006 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html. Contributors: IBM Corporation - initial API and implementation" />
 <meta name="security" content="public" />
 <meta name="Robots" content="index,follow" />
 <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
 <meta name="DC.Format" content="XHTML" />
-<!-- All rights reserved. Licensed Materials Property of IBM -->
-<!-- US Government Users Restricted Rights -->
-<!-- Use, duplication or disclosure restricted by -->
-<!-- GSA ADP Schedule Contract with IBM Corp. -->
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/ibmdita.css" />
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/common.css" />
 <title>Index</title>
diff --git a/docs/org.eclipse.wst.wsi.ui.doc.user/META-INF/MANIFEST.MF b/docs/org.eclipse.wst.wsi.ui.doc.user/META-INF/MANIFEST.MF
index 1e4ef73..35ac508 100644
--- a/docs/org.eclipse.wst.wsi.ui.doc.user/META-INF/MANIFEST.MF
+++ b/docs/org.eclipse.wst.wsi.ui.doc.user/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.wsi.ui.doc.user; singleton:=true
-Bundle-Version: 1.5.01.qualifier
+Bundle-Version: 1.0.202.qualifier
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
diff --git a/docs/org.eclipse.wst.wsi.ui.doc.user/org.eclipse.wst.wsi.ui.doc.userindex.html b/docs/org.eclipse.wst.wsi.ui.doc.user/org.eclipse.wst.wsi.ui.doc.userindex.html
index ee0ed81..c9efd46 100644
--- a/docs/org.eclipse.wst.wsi.ui.doc.user/org.eclipse.wst.wsi.ui.doc.userindex.html
+++ b/docs/org.eclipse.wst.wsi.ui.doc.user/org.eclipse.wst.wsi.ui.doc.userindex.html
@@ -4,15 +4,11 @@
 <html lang="en-us" xml:lang="en-us">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="copyright" content="(C) Copyright IBM Corporation 2006" />
+<meta name="copyright" content="Copyright (c) 2000, 2006 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html. Contributors: IBM Corporation - initial API and implementation" />
 <meta name="security" content="public" />
 <meta name="Robots" content="index,follow" />
 <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
 <meta name="DC.Format" content="XHTML" />
-<!-- All rights reserved. Licensed Materials Property of IBM -->
-<!-- US Government Users Restricted Rights -->
-<!-- Use, duplication or disclosure restricted by -->
-<!-- GSA ADP Schedule Contract with IBM Corp. -->
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/ibmdita.css" />
 <link rel="stylesheet" type="text/css" href="../org.eclipse.wst.doc.user/common.css" />
 <title>Index</title>
diff --git a/features/org.eclipse.wst.ws_core.feature/feature.xml b/features/org.eclipse.wst.ws_core.feature/feature.xml
index 060a21f..813cb7e 100644
--- a/features/org.eclipse.wst.ws_core.feature/feature.xml
+++ b/features/org.eclipse.wst.ws_core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_core.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.ws_core.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.ws_core.feature/sourceTemplateFeature/feature.xml
index a5dbbc4..127cc21 100644
--- a/features/org.eclipse.wst.ws_core.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.wst.ws_core.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_core.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.ws_sdk.feature/feature.xml b/features/org.eclipse.wst.ws_sdk.feature/feature.xml
index 3f16b5b..0c7ffd9 100644
--- a/features/org.eclipse.wst.ws_sdk.feature/feature.xml
+++ b/features/org.eclipse.wst.ws_sdk.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_sdk.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.ws_tests.feature/feature.xml b/features/org.eclipse.wst.ws_tests.feature/feature.xml
index 590bd79..505bd4a 100644
--- a/features/org.eclipse.wst.ws_tests.feature/feature.xml
+++ b/features/org.eclipse.wst.ws_tests.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_tests.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.ws_ui.feature/feature.xml b/features/org.eclipse.wst.ws_ui.feature/feature.xml
index 1c3ec55..2a0faa5 100644
--- a/features/org.eclipse.wst.ws_ui.feature/feature.xml
+++ b/features/org.eclipse.wst.ws_ui.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_ui.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.ws_ui.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.ws_ui.feature/sourceTemplateFeature/feature.xml
index 3bef632..1793a99 100644
--- a/features/org.eclipse.wst.ws_ui.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.wst.ws_ui.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_ui.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%featureProvider">
 
    <description>
diff --git a/features/org.eclipse.wst.ws_userdoc.feature/feature.xml b/features/org.eclipse.wst.ws_userdoc.feature/feature.xml
index e8ef818..1a823bf 100644
--- a/features/org.eclipse.wst.ws_userdoc.feature/feature.xml
+++ b/features/org.eclipse.wst.ws_userdoc.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.ws_userdoc.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/tests/org.eclipse.jst.ws.axis.consumption.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.ws.axis.consumption.core.tests/META-INF/MANIFEST.MF
index 5abf4db..3069cd0 100644
--- a/tests/org.eclipse.jst.ws.axis.consumption.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.jst.ws.axis.consumption.core.tests/META-INF/MANIFEST.MF
@@ -10,4 +10,5 @@
  org.eclipse.core.resources,
  org.eclipse.jdt.core,
  org.eclipse.wst.ws,
- org.eclipse.jst.ws
+ org.eclipse.jst.ws,
+ org.eclipse.wst.common.uriresolver
diff --git a/tests/org.eclipse.jst.ws.axis.consumption.core.tests/tests/org/eclipse/jst/ws/axis/consumption/core/tests/util/Util.java b/tests/org.eclipse.jst.ws.axis.consumption.core.tests/tests/org/eclipse/jst/ws/axis/consumption/core/tests/util/Util.java
index 9ed74ef..e790268 100644
--- a/tests/org.eclipse.jst.ws.axis.consumption.core.tests/tests/org/eclipse/jst/ws/axis/consumption/core/tests/util/Util.java
+++ b/tests/org.eclipse.jst.ws.axis.consumption.core.tests/tests/org/eclipse/jst/ws/axis/consumption/core/tests/util/Util.java
@@ -12,6 +12,7 @@
  * 20060317   127456 cbrealey@ca.ibm.com - Chris Brealey
  * 20060711   147862 cbrealey@ca.ibm.com - Chris Brealey
  * 20060711   147864 cbrealey@ca.ibm.com - Chris Brealey
+ * 20061211   162288 makandre@ca.ibm.com - Andrew Mak, workspace paths with spaces break Java Editor Launch
  *******************************************************************************/
 
 package org.eclipse.jst.ws.axis.consumption.core.tests.util;
@@ -19,6 +20,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -46,6 +48,7 @@
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.wst.common.uriresolver.internal.util.URIEncoder;
 import org.osgi.framework.Bundle;
 
 public class Util
@@ -145,9 +148,12 @@
 		try
 		{
 			URL localAxisURL = FileLocator.toFileURL(axisURL);
-			File file = new File(new URI(localAxisURL.toString()));
+			File file = new File(new URI(URIEncoder.encode(localAxisURL.toString(), "UTF-8")));
 			return new Path(file.toString());
 		}
+		catch (UnsupportedEncodingException uee) {
+			throw new CoreException(new Status(IStatus.ERROR,"",0,"Unable to encode jar path for plugin org.apache.axis",uee));			
+		}
 		catch (IOException ioe)
 		{
 			throw new CoreException(new Status(IStatus.ERROR,"",0,"Unable to locate plugin org.apache.axis",ioe));
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/WSWizardTest.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/WSWizardTest.java
index 3d8402a..1301383 100644
--- a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/WSWizardTest.java
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/WSWizardTest.java
@@ -6,13 +6,15 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 2007104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
  *******************************************************************************/
 package org.eclipse.jst.ws.tests;
 
 import junit.framework.TestCase;
 
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.ws.tests.unittest.WSJUnitConstants;
 import org.eclipse.jst.ws.tests.util.JUnitUtils;
@@ -58,7 +60,7 @@
 		installServer();
 		
 		// unzip pre-configured workspace projects
-		if (!ProjectUtilities.getProject(WSJUnitConstants.BU_PROJECT_NAME).exists())
+		//if (!ProjectUtilities.getProject(WSJUnitConstants.BU_PROJECT_NAME).exists())
 			createProjects();		
 		
 		installInputData();
@@ -147,7 +149,7 @@
 	protected void tearDown() throws Exception
 	{
 		stopServer();
-//		deleteServer();
+		deleteServer();
 //      deleteInputData();
 //		deleteServerRuntime();
 	}
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/AllWSJUnitTests.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/AllWSJUnitTests.java
index edd8b1c..4b56ef3 100644
--- a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/AllWSJUnitTests.java
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/AllWSJUnitTests.java
@@ -1,3 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 2007104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
 package org.eclipse.jst.ws.tests.unittest;
 
 import junit.framework.Test;
@@ -64,10 +77,13 @@
     String s = System.getProperty("org.eclipse.jst.server.tomcat.50");
     if (s != null && s.length() > 0) {
       testSuite.addTest( ServerCreationTests.suite());
+      //testSuite.addTest( BUJavaAxisTC50.suite() );
+      testSuite.addTest( TDJavaAxisTC50.suite() );
+      testSuite.addTest( ClientAxisTC50.suite() );
+
     }
     testSuite.addTest( ResourceUtilsTests.suite() );
 
-
     return testSuite;
   }
 
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/BUJavaAxisTC50.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/BUJavaAxisTC50.java
new file mode 100644
index 0000000..fd746d0
--- /dev/null
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/BUJavaAxisTC50.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20070202   172615 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
+package org.eclipse.jst.ws.tests.unittest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.consumption.command.common.CreateModuleCommand;
+import org.eclipse.jst.ws.tests.axis.tomcat.v50.WSWizardTomcat50Test;
+import org.eclipse.jst.ws.tests.util.JUnitUtils;
+import org.eclipse.jst.ws.tests.util.ScenarioConstants;
+
+/**
+ * Bottom up performance scenario with Axis and Tomcat v5.0
+ */
+public final class BUJavaAxisTC50 extends WSWizardTomcat50Test {
+	// Constants
+    private final String WS_RUNTIMEID_AXIS =  WSJUnitConstants.WS_RUNTIMEID_AXIS; 
+	private String PROJECT_NAME = WSJUnitConstants.BU_PROJECT_NAME;
+    
+	private IFile sourceFile_;
+	
+	
+	public static Test suite(){
+		return new TestSuite(BUJavaAxisTC50.class);
+	}
+	
+  /**
+   * Sets up the input data;
+   * - create project(s),
+   * - copy resources to workspace 
+   */
+	protected void installInputData() throws Exception
+	{
+		
+		IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);
+        IPath destPath = ResourceUtils.getJavaSourceLocation(webProject);
+        IFolder folder = (IFolder)ResourceUtils.findResource(destPath);		
+		JUnitUtils.copyTestData("BUJava/src",folder,env_, null);
+		sourceFile_ = folder.getFile(new Path("foo/Echo.java"));
+		// Ensure that Echo.class is built in:
+		// <Web Project>/WebContent/WEB-INF/classes/foo/Echo.class
+		JUnitUtils.syncBuildProject(webProject,env_, null);
+		//assertTrue(JUnitUtils.getClassesFolderForWebProject(WEB_PROJECT_NAME).getFile(new Path("foo/Echo.class")).exists());
+		
+		
+	}
+	
+    protected void createProjects() throws Exception{
+        IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);
+        if (webProject==null || !webProject.exists()){
+          createWebModule(PROJECT_NAME, PROJECT_NAME,J2EEVersionConstants.J2EE_1_4_ID);
+        }
+      }
+      
+      private void createWebModule(String projectNm, String componentName, int j2eeVersion){
+
+        CreateModuleCommand cmc = new CreateModuleCommand();
+        cmc.setJ2eeLevel(new Integer(j2eeVersion).toString());
+        cmc.setModuleName(componentName);
+        cmc.setModuleType(CreateModuleCommand.WEB);
+        cmc.setProjectName(projectNm);
+        cmc.setServerFactoryId(SERVERTYPEID_TC50);
+        cmc.setServerInstanceId(server_.getId());
+        cmc.execute(null, null );
+        
+        System.out.println("Done creating Web Project, "+projectNm);      
+       
+      }
+	
+	
+  /**
+   * Set the persistent server runtime context preferences
+   */  
+	protected void initJ2EEWSRuntimeServerDefaults() throws Exception
+	{
+		// Set default preferences for Axis and Tomcat 5.0
+		JUnitUtils.setWSRuntimeServer(WS_RUNTIMEID_AXIS, SERVERTYPEID_TC50);		
+	}
+	
+  /**
+   * Set the initial selection
+   */
+	protected void initInitialSelection() throws Exception
+	{
+		initialSelection_ = new StructuredSelection(sourceFile_);
+	}
+	
+  /**
+   * Launches the pop-up command to initiate the scenario
+   * @throws Exception
+   */  
+	public void testBUJavaAxisTC50() throws Exception
+	{
+	  	IStatus status = Status.OK_STATUS;
+	    IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);
+	    JUnitUtils.disableWSIDialog(webProject);
+	    JUnitUtils.setBUScenarioDefaults();
+
+	    status = JUnitUtils.launchCreationWizard(ScenarioConstants.WIZARDID_BOTTOM_UP,ScenarioConstants.OBJECT_CLASS_ID_IFILE,initialSelection_);
+
+		if (status.getSeverity() == Status.OK)
+		  verifyOutput();
+		else
+		  throw new Exception(status.getException());
+		
+	}
+	
+  /**
+   * Verify the scenario completed successfully
+   * @throws Exception
+   */
+	private final void verifyOutput() throws Exception
+	{
+        IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);    
+		IFolder webContentFolder = (IFolder)J2EEUtils.getWebContentContainer(webProject);
+    
+        IFolder wsdlFolder = webContentFolder.getFolder("wsdl");
+		assertTrue(wsdlFolder.exists());
+		assertTrue(wsdlFolder.members().length > 0);
+		assertTrue(webContentFolder.getFolder("wsdl").members().length > 0);
+    
+        //TODO Check if wsdd contains new Web service
+        //TODO Check if Web serivce can be invoked by a client
+	}
+	
+  /**
+   * Clear workspace if necessary
+   */
+	protected void deleteInputData() throws Exception
+	{
+		// Remove the EAR from the server.
+		IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);
+		//JUnitUtils.removeModuleFromServer(server_,webProject,env_);
+		
+		// Delete the Web project.
+		webProject.delete(true,true, null);
+        assertFalse(webProject.exists());
+		
+	}
+}
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ClientAxisTC50.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ClientAxisTC50.java
new file mode 100644
index 0000000..b5862cd
--- /dev/null
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ClientAxisTC50.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 2007104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
+package org.eclipse.jst.ws.tests.unittest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.consumption.command.common.CreateModuleCommand;
+import org.eclipse.jst.ws.tests.axis.tomcat.v50.WSWizardTomcat50Test;
+import org.eclipse.jst.ws.tests.util.JUnitUtils;
+import org.eclipse.jst.ws.tests.util.ScenarioConstants;
+
+/**
+ * Client performance scenario with Axis and Tomcat v5.0
+ */
+public class ClientAxisTC50 extends WSWizardTomcat50Test {
+
+	private final String WS_RUNTIMEID_AXIS = WSJUnitConstants.WS_RUNTIMEID_AXIS;
+  
+	private String CLIENT_PROJECT_NAME = WSJUnitConstants.CLIENT_PROJECT_NAME;
+	
+	private IFile sourceFile_;
+
+	
+	public static Test suite(){
+		return new TestSuite(ClientAxisTC50.class);
+	}
+	
+    protected void createProjects() throws Exception{
+        IProject webProject = ProjectUtilities.getProject(CLIENT_PROJECT_NAME);
+        if (!webProject.exists()){
+          createWebModule(CLIENT_PROJECT_NAME, CLIENT_PROJECT_NAME,J2EEVersionConstants.J2EE_1_4_ID);
+        }
+      }
+      
+      private void createWebModule(String projectNm, String componentName, int j2eeVersion){
+
+        CreateModuleCommand cmc = new CreateModuleCommand();
+        cmc.setJ2eeLevel(new Integer(j2eeVersion).toString());
+        cmc.setModuleName(componentName);
+        cmc.setModuleType(CreateModuleCommand.WEB);
+        cmc.setProjectName(projectNm);
+        cmc.setServerFactoryId(SERVERTYPEID_TC50);
+        cmc.setServerInstanceId(server_.getId());
+        cmc.execute(null, null );
+        
+      }
+      
+	/**
+   * Sets up the input data;
+   * - create project(s),
+   * - copy resources to workspace 
+	 */
+	protected void installInputData() throws Exception {
+		
+		IProject webProject = ProjectUtilities.getProject(CLIENT_PROJECT_NAME);
+        IFolder destFolder = (IFolder)J2EEUtils.getWebContentContainer(webProject);
+        JUnitUtils.copyTestData("TDJava",destFolder,env_, null);
+		sourceFile_ = destFolder.getFile(new Path("Echo.wsdl"));		
+		JUnitUtils.syncBuildProject(webProject,env_, null);
+		
+	}
+
+  /**
+   * Set the persistent server runtime context preferences
+   */
+	protected void initJ2EEWSRuntimeServerDefaults() throws Exception {
+        // Set default preferences for Axis and Tomcat 5.0    
+		JUnitUtils.setWSRuntimeServer(WS_RUNTIMEID_AXIS, SERVERTYPEID_TC50);
+	}
+
+  /**
+   * Set the initial selection
+   */
+	protected void initInitialSelection() throws Exception {
+		initialSelection_ = new StructuredSelection(sourceFile_);
+	}
+
+  /**
+   * Launches the pop-up command to initiate the scenario
+   * @throws Exception
+   */
+	public void testClientAxisTC50() throws Exception
+	{	
+	  	IStatus status = Status.OK_STATUS;
+	  	
+		JUnitUtils.enableProxyGeneration(true);
+		JUnitUtils.enableOverwrite(true);
+        
+		status = JUnitUtils.launchCreationWizard(ScenarioConstants.WIZARDID_CLIENT,ScenarioConstants.OBJECT_CLASS_ID_IFILE,initialSelection_);
+
+	    
+		if (status.getSeverity() == Status.OK) {
+		  verifyOutput();
+		} else {
+		  throw new Exception(status.getException());
+		}
+
+	}
+	
+  /**
+   * Verify the scenario completed succesfully
+   * @throws Exception
+   */
+	private final void verifyOutput() throws Exception {
+        IProject webProject = ProjectUtilities.getProject(CLIENT_PROJECT_NAME);
+    
+        IPath destPath = ResourceUtils.getJavaSourceLocation(webProject);
+        IFolder srcFolder = (IFolder)ResourceUtils.findResource(destPath);
+    
+		//IFolder srcFolder = JUnitUtils.getSourceFolderForWebProject(CLIENT_PROJECT_NAME);
+		IFolder folder = srcFolder.getFolder("foo");
+		assertTrue(folder.exists());
+		assertTrue(folder.members().length > 0);
+		
+		//TODO Check that the client runs    
+
+	}
+	
+  /**
+   * Remove workspace if necessary
+   */
+	protected void deleteInputData() throws Exception {
+
+		// Delete the Web project.
+		IProject webProject = ProjectUtilities.getProject(CLIENT_PROJECT_NAME);
+		webProject.delete(true,true, null);
+		
+	}
+
+}
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ComponentCreationTests.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ComponentCreationTests.java
index f4780b1..bf0331b 100644
--- a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ComponentCreationTests.java
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ComponentCreationTests.java
@@ -1,6 +1,16 @@
-/**
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
  * 
- */
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 2007104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
 package org.eclipse.jst.ws.tests.unittest;
 
 import java.io.IOException;
@@ -20,8 +30,6 @@
 import org.eclipse.jst.ws.internal.consumption.command.common.CreateModuleCommand;
 import org.eclipse.jst.ws.tests.plugin.TestsPlugin;
 import org.eclipse.jst.ws.tests.util.JUnitUtils;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
 /**
  * Tests the various Component creation commands
@@ -35,7 +43,8 @@
 	public void testWebComponentCreation(){
 
         createServerRuntime();
-        createProjects();
+        createDynamicWebModule(projectNames);
+        //createProjects();
         //createWebModule(projectName, projectName, J2EEVersionConstants.J2EE_1_4_ID);
         //createWebModule(project2Name, project2Name, J2EEVersionConstants.J2EE_1_3_ID);
 
@@ -48,6 +57,7 @@
 		return util.createProjects();
 	}
 	
+
 	private static IPath getLocalPath() {
 		URL url = TestsPlugin.getDefault().find(zipFilePath);
 		try {
@@ -68,11 +78,27 @@
       }      
       
     }
+    
+    public void createDynamicWebModule(String[] projectNames){
+    	
+      for (int i=0;i<projectNames.length;i++) {
+    	  CreateModuleCommand command = new CreateModuleCommand();
+	  	  command.setProjectName(projectNames[i]);
+	  	  command.setModuleName(projectNames[i]);			
+	  	  command.setModuleType(CreateModuleCommand.WEB);
+	  	  command.setServerFactoryId(SERVERTYPEID_TC50);
+	  	  command.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_4_ID).toString());
+	  	  command.execute( null, null ) ;
+
+	      IProject p = ResourceUtils.getWorkspaceRoot().getProject(projectNames[i]);
+	      assertTrue(p.exists());
+      }
+    }
   
     public void dtestCreateEJBModule(){
      
       CreateModuleCommand cmc = new CreateModuleCommand();
-      cmc.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_3_ID).toString());
+      cmc.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_4_ID).toString());
       cmc.setModuleName(ejbComponentName);
       cmc.setModuleType(CreateModuleCommand.EJB);
       cmc.setProjectName(ejbProjectName);
@@ -81,13 +107,12 @@
       
       System.out.println("Done creating EJB component.");
       IProject p = ResourceUtils.getWorkspaceRoot().getProject(ejbProjectName);
-      IVirtualComponent vc = ComponentCore.createComponent(p);
-      assertTrue(vc.exists());      
+      assertTrue(p.exists());      
     }
     
     public void dtestCreateAppClientModule(){
       CreateModuleCommand cmc = new CreateModuleCommand();
-      cmc.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_3_ID).toString());
+      cmc.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_4_ID).toString());
       cmc.setModuleName(appClientCompName);
       cmc.setModuleType(CreateModuleCommand.APPCLIENT);
       cmc.setProjectName(appClientProjectName);
@@ -96,13 +121,12 @@
       
       System.out.println("Done creating App client component.");
       IProject p = ResourceUtils.getWorkspaceRoot().getProject(appClientProjectName);
-      IVirtualComponent vc = ComponentCore.createComponent(p);
-      assertTrue(vc.exists());       
+      assertTrue(p.exists());       
     }
 
     public void dtestCreateEARModule(){
       CreateModuleCommand cmc = new CreateModuleCommand();
-      cmc.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_3_ID).toString());
+      cmc.setJ2eeLevel(new Integer(J2EEVersionConstants.J2EE_1_4_ID).toString());
       cmc.setModuleName(earCompName);
       cmc.setModuleType(CreateModuleCommand.EAR);
       cmc.setProjectName(projectName);
@@ -111,7 +135,6 @@
       
       System.out.println("Done creating EAR component.");
       IProject p = ResourceUtils.getWorkspaceRoot().getProject(projectName);
-      IVirtualComponent vc = ComponentCore.createComponent(p);
-      assertTrue(vc.exists());       
+      assertTrue(p.exists());       
     }
 }
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/J2EEUtilsTests.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/J2EEUtilsTests.java
index 18a1354..6fa77a3 100644
--- a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/J2EEUtilsTests.java
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/J2EEUtilsTests.java
@@ -1,6 +1,16 @@
-/**
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
  * 
- */
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 2007104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
 package org.eclipse.jst.ws.tests.unittest;
 
 import junit.framework.Test;
@@ -108,7 +118,7 @@
 		  IVirtualComponent vc2 = J2EEUtils.getVirtualComponent(project2);
 		  int j2 = J2EEUtils.getJ2EEVersion(vc2);
 		  System.out.println("J2EEVersions p1: "+j2);		  
-		  assertEquals(J2EEVersionConstants.SERVLET_2_3, j2);
+		  assertEquals(J2EEVersionConstants.SERVLET_2_4, j2);
 		  
 		  System.out.println("< END: testJ2EEVersionMethods ...");
 	  }
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ServerCreationTests.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ServerCreationTests.java
index 12041b6..046d04a 100644
--- a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ServerCreationTests.java
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/ServerCreationTests.java
@@ -1,12 +1,24 @@
-/**
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
  * 
- */
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 2007104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
 package org.eclipse.jst.ws.tests.unittest;
 
+import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jst.ws.internal.consumption.command.common.CreateServerCommand;
 import org.eclipse.jst.ws.tests.util.JUnitUtils;
 import org.eclipse.wst.server.core.IServer;
@@ -45,6 +57,13 @@
 		}
 		assertNotNull(server);
 		
+		try {
+			server.delete();
+		}
+		catch (CoreException ce){
+			new AssertionFailedError();
+		}
+		
 		System.out.println("Done creating Tomcat v5 server.");
 	}
 	
@@ -61,6 +80,14 @@
 		}
 		assertNotNull(server);
 		
+		try {
+			server.delete();
+		}
+		catch (CoreException ce){
+			new AssertionFailedError();
+		}
+		
 		System.out.println("Done attempting 2nd Tomcat v5 server creation.");		
 	}
+	
 }
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/TDJavaAxisTC50.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/TDJavaAxisTC50.java
new file mode 100644
index 0000000..f8bbe91
--- /dev/null
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/unittest/TDJavaAxisTC50.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20070202   172615 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
+package org.eclipse.jst.ws.tests.unittest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.consumption.command.common.CreateModuleCommand;
+import org.eclipse.jst.ws.tests.axis.tomcat.v50.WSWizardTomcat50Test;
+import org.eclipse.jst.ws.tests.util.JUnitUtils;
+import org.eclipse.jst.ws.tests.util.ScenarioConstants;
+
+/**
+ * Top down performance scenario with Axis and Tomcat v5.0
+ */
+public class TDJavaAxisTC50 extends WSWizardTomcat50Test {
+
+  private final String WS_RUNTIMEID_AXIS = WSJUnitConstants.WS_RUNTIMEID_AXIS;
+  
+  private String PROJECT_NAME = WSJUnitConstants.TD_PROJECT_NAME;
+  
+  private IFile sourceFile_;
+	
+	
+  public static Test suite(){
+		return new TestSuite(TDJavaAxisTC50.class);
+  }
+  
+  protected void createProjects() throws Exception{
+	    IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);
+	    if (!webProject.exists()){
+	      createWebModule(PROJECT_NAME, PROJECT_NAME,J2EEVersionConstants.J2EE_1_4_ID);
+	    }
+	  }
+	  
+	  private void createWebModule(String projectNm, String componentName, int j2eeVersion){
+
+	    CreateModuleCommand cmc = new CreateModuleCommand();
+	    cmc.setJ2eeLevel(new Integer(j2eeVersion).toString());
+	    cmc.setModuleName(componentName);
+	    cmc.setModuleType(CreateModuleCommand.WEB);
+	    cmc.setProjectName(projectNm);
+	    cmc.setServerFactoryId(SERVERTYPEID_TC50);
+	    cmc.setServerInstanceId(server_.getId());
+	    cmc.execute(null, null );
+	    
+	    System.out.println("Done creating Web Project, "+projectNm);      
+	   
+	  }  
+	  
+  /**
+   * Sets up the input data;
+   * - create project(s),
+   * - copy resources to workspace 
+   */  
+	protected void installInputData() throws Exception {
+
+		IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);		
+		IFolder destFolder = (IFolder)J2EEUtils.getWebContentContainer(webProject);
+		JUnitUtils.copyTestData("TDJava",destFolder,env_, null);
+		sourceFile_ = destFolder.getFile(new Path("Echo.wsdl"));
+		JUnitUtils.syncBuildProject(webProject,env_, null);
+	}
+
+  /**
+   * Set the persistent server runtime context preferences
+   */  
+	protected void initJ2EEWSRuntimeServerDefaults() throws Exception {
+		// Set default preferences for Axis and Tomcat v5.0 server
+		JUnitUtils.setWSRuntimeServer(WS_RUNTIMEID_AXIS, SERVERTYPEID_TC50);		
+	}
+
+  /**
+   * Set the initial selection
+   */  
+	protected void initInitialSelection() throws Exception {
+		initialSelection_ = new StructuredSelection(sourceFile_);
+
+	}
+
+  /**
+   * Launches the pop-up command to initiate the scenario
+   * @throws Exception
+   */  
+	public void testTDJavaAxisTC50() throws Exception {
+	  
+	  IStatus status = Status.OK_STATUS;
+	  JUnitUtils.setTDScenarioDefaults();
+
+	  status = JUnitUtils.launchCreationWizard(ScenarioConstants.WIZARDID_TOP_DOWN,ScenarioConstants.OBJECT_CLASS_ID_IFILE,initialSelection_);
+	  
+		if (status.getSeverity() == Status.OK)
+		  verifyOutput();
+		else {
+			System.err.println(status.getMessage());
+		  throw new Exception(status.getException());
+		}
+	}
+
+  /**
+   * Verify the scenario completed successfully
+   * @throws Exception
+   */
+	private final void verifyOutput() throws Exception
+	{
+        IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);    
+        IFolder webContentFolder = (IFolder)J2EEUtils.getWebContentContainer(webProject);    
+    
+		
+		IFolder wsdlFolder = webContentFolder.getFolder("wsdl");
+		assertTrue(wsdlFolder.exists());
+		assertTrue(wsdlFolder.members().length > 0);
+
+        //TODO Verify that wsdd contains this Web service
+        //TODO Verify that the service can be invoked by a client
+	}
+	
+  /**
+   * Clear workspace if required
+   */
+	protected void deleteInputData() throws Exception {
+		// Delete the Web project.
+		IProject webProject = ProjectUtilities.getProject(PROJECT_NAME);
+		webProject.delete(true,true,null);
+		
+	}
+
+}
diff --git a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/util/JUnitUtils.java b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/util/JUnitUtils.java
index 1ec8b4a..318c5a5 100644
--- a/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/util/JUnitUtils.java
+++ b/tests/org.eclipse.jst.ws.tests/tests/org/eclipse/jst/ws/tests/util/JUnitUtils.java
@@ -6,7 +6,11 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * yyyymmdd bug      Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20070104   114835 sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20070202   172615 sengpl@ca.ibm.com - Seng Phung-Lu
  *******************************************************************************/
 package org.eclipse.jst.ws.tests.util;
 
@@ -17,15 +21,13 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.ws.internal.common.ServerUtils;
@@ -42,8 +44,10 @@
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
 import org.eclipse.wst.command.internal.env.core.context.ResourceContext;
 import org.eclipse.wst.command.internal.env.preferences.ActionDialogPreferenceType;
+import org.eclipse.wst.command.internal.env.ui.eclipse.EclipseStatusHandler;
 import org.eclipse.wst.command.internal.env.ui.eclipse.EnvironmentUtils;
 import org.eclipse.wst.common.environment.IEnvironment;
+import org.eclipse.wst.common.environment.IStatusHandler;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IRuntimeType;
@@ -299,30 +303,23 @@
 		serverRuntimeCtx.setServerFactoryId(serverTypeId);		
 	}
 	
+
 	private static IStatus launchWizard(String pluginNS,String wizardId,String objectClassId,IStructuredSelection initialSelection) throws Exception
 	{
-		IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.ui.popupMenus").getExtensions();
-		for (int i=0;i<extensions.length;i++)
-		{
-			if (extensions[i].getNamespace().equals(pluginNS));
-			{
-				IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
-				for (int j=0;j<configElements.length;j++)
-				{
-					if (configElements[j].getAttribute("id").equals(wizardId) && configElements[j].getAttribute("objectClass").equals(objectClassId))
-					{
-						IConfigurationElement actionElement = configElements[j].getChildren()[0];
-						AccumulateStatusHandler statusHandler = new AccumulateStatusHandler();
-						DynamicPopupJUnitWizard wizard = new DynamicPopupJUnitWizard(statusHandler);
-						wizard.setInitializationData(actionElement,null,null);
-						wizard.selectionChanged(null,initialSelection);
-						wizard.run(null);
-						return statusHandler.getStatus();
-					}
-				}
-			}
-		}
-		return StatusUtils.errorStatus( "No wizard found for: " );
+		IStatusHandler statusHandler = new EclipseStatusHandler();
+
+        DynamicPopupJUnitWizard wizard = new DynamicPopupJUnitWizard(statusHandler);
+        wizard.setInitialData(wizardId);
+        ProgressMonitorDialog monitor = new ProgressMonitorDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+        try {
+        	wizard.runHeadLess(initialSelection, monitor);
+        } 
+        catch (Exception e){
+        	e.printStackTrace();
+        	return StatusUtils.errorStatus(e);
+        }
+        return Status.OK_STATUS;
+
 	}
 	
 	public static IStatus launchCreationWizard(String wizardId,String objectClassId,IStructuredSelection initialSelection) throws Exception
@@ -355,4 +352,24 @@
 	  
 	}
 	
+	public static void setBUScenarioDefaults(){
+		ScenarioContext context = WebServicePlugin.getInstance().getScenarioContext();
+		context.setGenerateWebService(ScenarioContext.WS_ASSEMBLE);
+		
+		context.setGenerateProxy(false);
+		context.setInstallWebService(false);
+		context.setStartWebService(false);
+		context.setTestWebService(false);
+		
+	}
+	
+	public static void setTDScenarioDefaults(){
+		ScenarioContext context = WebServicePlugin.getInstance().getScenarioContext();
+		context.setGenerateWebService(ScenarioContext.WS_ASSEMBLE);
+		
+		context.setGenerateProxy(false);
+		context.setInstallWebService(false);
+		context.setStartWebService(false);
+		context.setTestWebService(false);
+	}
 }
\ No newline at end of file
diff --git a/tests/org.eclipse.wst.wsdl.tests/build.properties b/tests/org.eclipse.wst.wsdl.tests/build.properties
index 27c9628..32ee244 100644
--- a/tests/org.eclipse.wst.wsdl.tests/build.properties
+++ b/tests/org.eclipse.wst.wsdl.tests/build.properties
@@ -4,3 +4,4 @@
                samples/,\
                about.html
 source.wsdl.tests.jar = src/
+javacWarnings.wsdl.tests.jar=-discouraged
\ No newline at end of file
diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/BindingFaultReconciliation/BindingFaultSample.wsdl b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/BindingFaultReconciliation/BindingFaultSample.wsdl
new file mode 100644
index 0000000..55fca01
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/BindingFaultReconciliation/BindingFaultSample.wsdl
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

+	xmlns:tns="http://www.example.org/BindingFaultSample/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+	name="BindingFaultSample" targetNamespace="http://www.example.org/BindingFaultSample/">

+	<wsdl:types>

+		<xsd:schema targetNamespace="http://www.example.org/BindingFaultSample/"

+			xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+			<xsd:element name="Operation1">

+				<xsd:complexType>

+					<xsd:sequence>

+						<xsd:element name="in" type="xsd:string" />

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+			<xsd:element name="Operation1Response">

+				<xsd:complexType>

+					<xsd:sequence>

+						<xsd:element name="out" type="xsd:string" />

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+			<xsd:element name="Operation1Fault">

+				<xsd:complexType>

+					<xsd:sequence>

+						<xsd:element name="fault" type="xsd:string" />

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+			<xsd:element name="Operation2">

+				<xsd:complexType>

+					<xsd:sequence>

+

+						<xsd:element name="in" type="xsd:string"></xsd:element>

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+			<xsd:element name="Operation2Response">

+				<xsd:complexType>

+					<xsd:sequence>

+						<xsd:element name="out" type="xsd:string"></xsd:element>

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+			<xsd:element name="Operation2Fault1">

+				<xsd:complexType>

+					<xsd:sequence>

+						<xsd:element name="Operation2Fault1" type="xsd:string"></xsd:element>

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+			<xsd:element name="Operation2Fault2">

+				<xsd:complexType>

+					<xsd:sequence>

+						<xsd:element name="Operation2Fault2" type="xsd:string"></xsd:element>

+					</xsd:sequence>

+				</xsd:complexType>

+			</xsd:element>

+		</xsd:schema>

+	</wsdl:types>

+	<wsdl:message name="Operation1Request">

+		<wsdl:part element="tns:Operation1" name="parameters" />

+	</wsdl:message>

+	<wsdl:message name="Operation1Response">

+		<wsdl:part element="tns:Operation1Response" name="parameters" />

+	</wsdl:message>

+	<wsdl:message name="Operation1Fault">

+		<wsdl:part name="Fault" element="tns:Operation1Fault" />

+	</wsdl:message>

+	<wsdl:message name="Operation2Request">

+		<wsdl:part name="parameters" element="tns:Operation2"></wsdl:part>

+	</wsdl:message>

+	<wsdl:message name="Operation2Response">

+		<wsdl:part name="parameters" element="tns:Operation2Response"></wsdl:part>

+	</wsdl:message>

+	<wsdl:message name="Operation2Fault1">

+		<wsdl:part name="parameters" element="tns:Operation2Fault1"></wsdl:part>

+	</wsdl:message>

+	<wsdl:message name="Operation2Fault2">

+		<wsdl:part name="parameters" element="tns:Operation2Fault2"></wsdl:part>

+	</wsdl:message>

+	<wsdl:portType name="SamplePort">

+		<wsdl:operation name="Operation1">

+			<wsdl:input message="tns:Operation1Request" />

+			<wsdl:output message="tns:Operation1Response" />

+		</wsdl:operation>

+		<wsdl:operation name="Operation2">

+			<wsdl:input message="tns:Operation2Request" />

+			<wsdl:output message="tns:Operation2Response" />

+			<wsdl:fault name="Operation2Fault1" message="tns:Operation2Fault1" />

+			<wsdl:fault name="Operation2Fault2" message="tns:Operation2Fault2" />

+		</wsdl:operation>

+	</wsdl:portType>

+	<wsdl:binding name="SamplePortSOAPBinding" type="tns:SamplePort">

+		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

+		<wsdl:operation name="Operation1">

+			<soap:operation soapAction="http://www.example.org/BindingFaultSample/Operation1" />

+			<wsdl:input>

+				<soap:body use="literal" />

+			</wsdl:input>

+			<wsdl:output>

+				<soap:body use="literal" />

+			</wsdl:output>

+			<wsdl:fault name="Operation1Fault">

+				<soap:fault name="Operation1Fault" />

+			</wsdl:fault>

+		</wsdl:operation>

+		<wsdl:operation name="Operation2">

+			<soap:operation soapAction="http://www.example.org/BindingFaultSample/Operation2" />

+			<wsdl:input>

+				<soap:body use="literal" />

+			</wsdl:input>

+			<wsdl:output>

+				<soap:body use="literal" />

+			</wsdl:output>

+			<wsdl:fault name="Operation2Fault1">

+				<soap:fault use="literal" name="Operation2Fault1" />

+			</wsdl:fault>

+			<wsdl:fault name="Operation2Fault2">

+				<soap:fault use="literal" name="Operation2Fault2" />

+			</wsdl:fault>

+		</wsdl:operation>

+	</wsdl:binding>

+	<wsdl:service name="SampleService">

+		<wsdl:port binding="tns:SamplePortSOAPBinding" name="SamplePort">

+			<soap:address location="http://www.example.org/" />

+		</wsdl:port>

+	</wsdl:service>

+</wsdl:definitions>

diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/BindingOperationReconciliation/BindingOperationReconciliation.wsdl b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/BindingOperationReconciliation/BindingOperationReconciliation.wsdl
new file mode 100644
index 0000000..8f3026d
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/BindingOperationReconciliation/BindingOperationReconciliation.wsdl
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+	xmlns:tns="http://www.example.org/BindingOperationReconciliation/"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	name="BindingOperationReconciliation"
+	targetNamespace="http://www.example.org/BindingOperationReconciliation/">
+	<wsdl:types>
+		<xsd:schema
+			targetNamespace="http://www.example.org/BindingOperationReconciliation/"
+			xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+			<xsd:element name="NewOperation">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="in" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+			<xsd:element name="NewOperationResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="out" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:schema>
+	</wsdl:types>
+
+	<wsdl:message name="NewOperationRequest">
+		<wsdl:part element="tns:NewOperation" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="NewOperationResponse">
+		<wsdl:part element="tns:NewOperationResponse" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="NewOperationRequest2">
+		<wsdl:part element="tns:NewOperation" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="NewOperationResponse2">
+		<wsdl:part element="tns:NewOperationResponse" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="NewOperationRequest3">
+		<wsdl:part element="tns:NewOperation" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="NewOperationResponse3">
+		<wsdl:part element="tns:NewOperationResponse" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:portType name="BindingOperationReconciliation">
+		<wsdl:operation name="NewOperation">
+			<wsdl:input message="tns:NewOperationRequest" />
+			<wsdl:output message="tns:NewOperationResponse" />
+		</wsdl:operation>
+		<wsdl:operation name="NewOperation2">
+			<wsdl:input message="tns:NewOperationRequest2" />
+			<wsdl:output message="tns:NewOperationResponse2" />
+		</wsdl:operation>
+		<wsdl:operation name="NewOperation3">
+			<wsdl:input name="Input3" message="tns:NewOperationRequest3" />
+			<wsdl:output name="Output3" message="tns:NewOperationResponse3" />
+		</wsdl:operation>
+	</wsdl:portType>
+
+	<wsdl:binding name="BindingOperationReconciliationSOAP"
+		type="tns:BindingOperationReconciliation">
+		<soap:binding style="document"
+			transport="http://schemas.xmlsoap.org/soap/http" />
+		<wsdl:operation name="NewOperation">
+			<soap:operation
+				soapAction="http://www.example.org/BindingOperationReconciliation/NewOperation" />
+			<wsdl:input>
+				<soap:body use="literal" />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal" />
+			</wsdl:output>
+		</wsdl:operation>
+		<wsdl:operation name="NewOperation2">
+			<soap:operation
+				soapAction="http://www.example.org/BindingOperationReconciliation/NewOperation2" />
+			<wsdl:input name="Input2">
+				<soap:body use="literal" />
+			</wsdl:input>
+			<wsdl:output name="Output2">
+				<soap:body use="literal" />
+			</wsdl:output>
+		</wsdl:operation>
+		<wsdl:operation name="NewOperation3">
+			<soap:operation
+				soapAction="http://www.example.org/BindingOperationReconciliation/NewOperation3" />
+			<wsdl:input name="Input3">
+				<soap:body use="literal" />
+			</wsdl:input>
+			<wsdl:output name="Output3">
+				<soap:body use="literal" />
+			</wsdl:output>
+		</wsdl:operation>
+	</wsdl:binding>
+	<wsdl:service name="BindingOperationReconciliation">
+		<wsdl:port binding="tns:BindingOperationReconciliationSOAP"
+			name="BindingOperationReconciliationSOAP">
+			<soap:address location="http://www.example.org/" />
+		</wsdl:port>
+	</wsdl:service>
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/DuplicateSAXException/SAXException.wsdl b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/DuplicateSAXException/SAXException.wsdl
new file mode 100644
index 0000000..13f431f
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/DuplicateSAXException/SAXException.wsdl
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions
+	xmlns:tns="http://www.example.org/NamespacePrefixNotBound/"
+	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	name="NamespacePrefixNotBound"
+	targetNamespace="http://www.example.org/NamespacePrefixNotBound/">
+	<undefined:test />
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/OperationStyle/OperationStyleTest.wsdl b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/OperationStyle/OperationStyleTest.wsdl
new file mode 100644
index 0000000..506aec6
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.tests/samples/BugFixes/OperationStyle/OperationStyleTest.wsdl
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.org"

+	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="OperationStyleTest" targetNamespace="http://example.org">

+

+	<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

+		<jaxws:enableWrapperStyle>true</jaxws:enableWrapperStyle>

+		<jaxws:enableAsyncMapping>false</jaxws:enableAsyncMapping>

+	</jaxws:bindings>

+

+	<types>

+		<xsd:schema targetNamespace="http://example.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+			elementFormDefault="qualified" xmlns:tns="http://example.org">

+

+			<xsd:element name="quoteRequest" type="tns:quoteRequestType" />

+

+			<xsd:complexType name="quoteRequestType">

+				<xsd:sequence>

+					<xsd:element name="stockSymbol" type="xsd:int" />

+					<xsd:element name="transactionDate" type="xsd:date" />

+				</xsd:sequence>

+			</xsd:complexType>

+

+			<xsd:element name="quoteResponse" type="tns:quoteResponseType" />

+

+			<xsd:complexType name="quoteResponseType">

+				<xsd:sequence>

+					<xsd:element name="value" type="xsd:double" />

+				</xsd:sequence>

+			</xsd:complexType>

+

+			<xsd:element name="quoteError" type="xsd:string" />

+

+		</xsd:schema>

+	</types>

+

+	<message name="Quote">

+		<part name="params" element="tns:quoteRequest" />

+	</message>

+

+	<message name="QuoteResponse">

+		<part name="result" element="tns:quoteResponse" />

+	</message>

+

+	<message name="QuoteError">

+		<part name="error" element="tns:quoteError" />

+	</message>

+

+	<portType name="QuotePortType">

+

+		<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

+			<jaxws:class name="QuoteProviderImpl" />

+			<jaxws:enableWrapperStyle>true</jaxws:enableWrapperStyle>

+			<jaxws:enableAsyncMapping>false</jaxws:enableAsyncMapping>

+		</jaxws:bindings>

+

+		<operation name="GetQuote">

+

+			<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"

+				xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

+				<jaxws:method name="getQuote" />

+				<jaxws:parameter part="wsdl:definitions/wsdl:message[@name='Quote']/wsdl:part[@name='params']"

+					childElementName="tns:stockSymbol" name="symbol" />

+				<jaxws:parameter part="wsdl:definitions/wsdl:message[@name='Quote']/wsdl:part[@name='params']"

+					childElementName="tns:transactionDate" name="date" />

+				<jaxws:enableWrapperStyle>true</jaxws:enableWrapperStyle>

+				<jaxws:enableAsyncMapping>false</jaxws:enableAsyncMapping>

+			</jaxws:bindings>

+

+			<input message="tns:Quote" />

+

+			<output message="tns:QuoteResponse" />

+

+			<fault name="QuoteError" message="tns:QuoteError">

+

+				<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

+					<jaxws:class name="QuoteException" />

+				</jaxws:bindings>

+

+			</fault>

+		</operation>

+	</portType>

+

+	<binding name="QuoteBinding" type="tns:QuotePortType">

+

+		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

+

+		<operation name="GetQuote">

+			<soap:operation soapAction="" />

+			<input>

+				<soap:body use="literal" />

+			</input>

+			<output>

+				<soap:body use="literal" />

+			</output>

+			<fault name="QuoteError">

+				<soap:fault name="QuoteError" use="literal" />

+			</fault>

+		</operation>

+

+	</binding>

+

+	<service name="QuoteService">

+

+		<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

+			<jaxws:class name="QuotationService" />

+		</jaxws:bindings>

+

+		<port name="QuotePort" binding="tns:QuoteBinding">

+

+			<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

+				<jaxws:method name="getQuotationService" />

+			</jaxws:bindings>

+

+			<soap:address location="http://localhost:8080/quote" />

+

+		</port>

+

+	</service>

+

+</definitions>

diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/.cvsignore b/tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/.cvsignore
new file mode 100644
index 0000000..d192e8e
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/.cvsignore
@@ -0,0 +1 @@
+*.wsdl.out
diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/Imported.wsdl b/tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/Imported.wsdl
similarity index 100%
rename from tests/org.eclipse.wst.wsdl.tests/samples/Imported.wsdl
rename to tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/Imported.wsdl
diff --git a/tests/org.eclipse.wst.wsdl.tests/samples/LoadAndPrintTest.wsdl b/tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/LoadAndPrintTest.wsdl
similarity index 100%
rename from tests/org.eclipse.wst.wsdl.tests/samples/LoadAndPrintTest.wsdl
rename to tests/org.eclipse.wst.wsdl.tests/samples/LoadStoreCompare/LoadAndPrintTest.wsdl
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/BugFixesTest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/BugFixesTest.java
index 633aaef..f0b3027 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/BugFixesTest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/BugFixesTest.java
@@ -16,6 +16,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import javax.wsdl.OperationType;
 import javax.xml.namespace.QName;
 
 import junit.framework.Assert;
@@ -23,11 +24,14 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.wst.wsdl.Binding;
+import org.eclipse.wst.wsdl.BindingFault;
 import org.eclipse.wst.wsdl.BindingInput;
 import org.eclipse.wst.wsdl.BindingOperation;
 import org.eclipse.wst.wsdl.Definition;
+import org.eclipse.wst.wsdl.Fault;
 import org.eclipse.wst.wsdl.Import;
 import org.eclipse.wst.wsdl.Input;
 import org.eclipse.wst.wsdl.Message;
@@ -38,7 +42,6 @@
 import org.eclipse.wst.wsdl.Types;
 import org.eclipse.wst.wsdl.WSDLFactory;
 import org.eclipse.wst.wsdl.WSDLPackage;
-import org.eclipse.wst.wsdl.XSDSchemaExtensibilityElement;
 import org.eclipse.wst.wsdl.binding.mime.MIMEContent;
 import org.eclipse.wst.wsdl.binding.mime.MIMEFactory;
 import org.eclipse.wst.wsdl.binding.mime.MIMEMimeXml;
@@ -102,7 +105,7 @@
           }
         });
 
-    suite.addTest(new BugFixesTest("ImportsElementOrder")
+    suite.addTest(new BugFixesTest("ImportsElementOrder") //$NON-NLS-1$
     {
       protected void runTest()
       {
@@ -110,7 +113,7 @@
       }
     });
 
-    suite.addTest(new BugFixesTest("ResolveWSDLElement")
+    suite.addTest(new BugFixesTest("ResolveWSDLElement") //$NON-NLS-1$
     {
       protected void runTest()
       {
@@ -118,7 +121,7 @@
       }
     });
 
-    suite.addTest(new BugFixesTest("PartsSerialization")
+    suite.addTest(new BugFixesTest("PartsSerialization") //$NON-NLS-1$
     {
       protected void runTest()
       {
@@ -126,7 +129,7 @@
       }
     });
 
-    suite.addTest(new BugFixesTest("ImportsSerialization")
+    suite.addTest(new BugFixesTest("ImportsSerialization") //$NON-NLS-1$
     {
       protected void runTest()
       {
@@ -134,7 +137,7 @@
       }
     });
 
-    suite.addTest(new BugFixesTest("LocalNamespacePrefixes")
+    suite.addTest(new BugFixesTest("LocalNamespacePrefixes") //$NON-NLS-1$
     {
       protected void runTest()
       {
@@ -142,6 +145,38 @@
       }
     });
 
+    suite.addTest(new BugFixesTest("OperationExtensionElements") //$NON-NLS-1$
+    {
+      protected void runTest()
+      {
+        testTolleratesExtensionElementsForOperation();
+      }
+    });
+
+    suite.addTest(new BugFixesTest("ReconcilesBindingFaults") //$NON-NLS-1$
+    {
+      protected void runTest()
+      {
+        testReconcilesBindingFaults();
+      }
+    });
+
+    suite.addTest(new BugFixesTest("DuplicateSAXErrorDiagnostics") //$NON-NLS-1$
+    {
+      protected void runTest()
+      {
+        testAvoidDuplicateSAXExceptionDiagnostics();
+      }
+    });
+
+    suite.addTest(new BugFixesTest("BindingOperationReconciliation") //$NON-NLS-1$
+    {
+      protected void runTest()
+      {
+        testBindingOperationReconciliation();
+      }
+    });
+
     return suite;
   }
 
@@ -151,10 +186,14 @@
 
     Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("wsdl", new WSDLResourceFactoryImpl()); //$NON-NLS-1$
     WSDLPackage pkg = WSDLPackage.eINSTANCE;
+    // Silences unused variable warning.
+    pkg.eClass();
 
     // We need this for XSD <import>.
     Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xsd", new XSDResourceFactoryImpl()); //$NON-NLS-1$
     XSDPackage xsdpkg = XSDPackage.eINSTANCE;
+    // Silences unused variable warning.
+    xsdpkg.eClass();
   }
 
   protected void tearDown() throws Exception
@@ -541,4 +580,177 @@
     
     assertEquals(elementAttributeValue, "parttns:" + responseElementDeclaration.getName());
   }
-}
+  
+  /**
+   * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=157107
+   */
+  public void testTolleratesExtensionElementsForOperation()
+  {
+    Definition definition = null;
+
+    try
+    {
+      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/OperationStyle/OperationStyleTest.wsdl"); //$NON-NLS-1$
+    }
+    catch (IOException e)
+    {
+      fail(e.getMessage());
+    }
+    
+    PortType portType = (PortType) definition.getEPortTypes().get(0);
+    EList operations = portType.getEOperations();
+    
+    Operation operation = (Operation) operations.get(0);
+    OperationType operationType = operation.getStyle();
+    
+    assertEquals(OperationType.REQUEST_RESPONSE, operationType);
+  }
+  
+  /**
+   * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=164565
+   */
+  public void testReconcilesBindingFaults()
+  {
+    Definition definition = null;
+
+    try
+    {
+      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/BindingFaultReconciliation/BindingFaultSample.wsdl"); //$NON-NLS-1$
+    }
+    catch (IOException e)
+    {
+      fail(e.getMessage());
+    }
+
+    // Test the abnormal case when the binding operation tries to bind a fault
+    // but the fault is missing in the corresponding operation. In this case the
+    // fault obtained from the binding operation's fault should be null.
+
+    List bindings = definition.getEBindings();
+    Binding binding = (Binding) bindings.get(0);
+    List bindingOperations = binding.getBindingOperations();
+    BindingOperation bindingOperation = (BindingOperation) bindingOperations.get(0);
+    BindingFault bindingFault = (BindingFault) bindingOperation.getBindingFault("Operation1Fault"); //$NON-NLS-1$
+    Fault fault = bindingFault.getEFault();
+    assertNull(fault);
+
+    // Test the normal case when the operation and binding operation are in
+    // synch. In this case the fault defined in the operation should match
+    // the one obtained from the binding operation's fault.
+
+    List portTypes = definition.getEPortTypes();
+    PortType portType = (PortType) portTypes.get(0);
+    EList operations = portType.getEOperations();
+
+    Operation operation = (Operation) operations.get(1);
+    javax.wsdl.Fault expectedFault1 = operation.getFault("Operation2Fault1"); //$NON-NLS-1$
+    javax.wsdl.Fault expectedFault2 = operation.getFault("Operation2Fault2"); //$NON-NLS-1$
+
+    BindingOperation bindingOperation2 = (BindingOperation) bindingOperations.get(1);
+
+    // Make sure the fault obtained from the binding fault is not null and
+    // matches the one in the corresponding operation.
+    
+    BindingFault bindingFault1 = (BindingFault) bindingOperation2.getBindingFault("Operation2Fault1"); //$NON-NLS-1$
+    javax.wsdl.Fault actualFault1 = bindingFault1.getEFault();
+    assertNotNull(actualFault1);
+    assertEquals(expectedFault1, actualFault1);
+
+    // Make sure the fault obtained from the binding fault is not null and
+    // matches the one in the corresponding operation.
+
+    BindingFault bindingFault2 = (BindingFault) bindingOperation2.getBindingFault("Operation2Fault2"); //$NON-NLS-1$
+    javax.wsdl.Fault actualFault2 = bindingFault2.getEFault();
+    assertNotNull(actualFault2);
+    assertEquals(expectedFault2, actualFault2);
+  }
+
+  /**
+   * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=161059
+   */
+  public void testAvoidDuplicateSAXExceptionDiagnostics()
+  {
+    Definition definition = null;
+
+    try
+    {
+      // Make sure we track location to allow the WSDLParser to kick in.
+
+      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/DuplicateSAXException/SAXException.wsdl", true, true); //$NON-NLS-1$
+    }
+    catch (IOException e)
+    {
+      fail(e.getMessage());
+    }
+    
+    Resource resource = definition.eResource();
+    EList errors = resource.getErrors();
+    int expectedSize = 1;
+    int actualSize = errors.size();
+    assertEquals(expectedSize, actualSize);
+  }
+
+  /**
+   * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=172576
+   */
+  public void testBindingOperationReconciliation()
+  {
+    Definition definition = null;
+
+    try
+    {
+      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/BindingOperationReconciliation/BindingOperationReconciliation.wsdl", true); //$NON-NLS-1$
+    }
+    catch (IOException e)
+    {
+      fail(e.getMessage());
+    }
+
+    String targetNamespace = "http://www.example.org/BindingOperationReconciliation/"; //$NON-NLS-1$
+    QName portTypeQName = new QName(targetNamespace, "BindingOperationReconciliation"); //$NON-NLS-1$
+    javax.wsdl.PortType portType = definition.getPortType(portTypeQName);
+
+    String input3Name = "Input3"; //$NON-NLS-1$
+    String output3Name = "Output3"; //$NON-NLS-1$
+
+    // Check that the first operation - which has no named input/output is being
+    // found.
+
+    String operationName = "NewOperation"; //$NON-NLS-1$
+    javax.wsdl.Operation operation1 = portType.getOperation(operationName, null, null);
+
+    QName bindingQName = new QName(targetNamespace, "BindingOperationReconciliationSOAP"); //$NON-NLS-1$
+    javax.wsdl.Binding binding = definition.getBinding(bindingQName);
+
+    javax.wsdl.BindingOperation bindingOperation1 = binding.getBindingOperation(operationName, null, null);
+    javax.wsdl.Operation actualOperation1 = bindingOperation1.getOperation();
+
+    assertEquals(operation1, actualOperation1);
+
+    // The second operation - which has no named input/output is being found
+    // should not be reconciled because the binding specifies the input and
+    // output.
+
+    String input2Name = "Input2"; //$NON-NLS-1$
+    String output2Name = "Output2"; //$NON-NLS-1$
+
+    String operation2Name = "NewOperation2"; //$NON-NLS-1$
+
+    javax.wsdl.BindingOperation bindingOperation2 = binding.getBindingOperation(operation2Name, input2Name, output2Name);
+    javax.wsdl.Operation actualOperation2 = bindingOperation2.getOperation();
+
+    assertEquals(null, actualOperation2);
+
+    // The third operation specifies an input and output name, and the binding
+    // operation will reconcile fine because the it also specifies the proper
+    // input and output name.
+
+    String operation3Name = "NewOperation3"; //$NON-NLS-1$
+    javax.wsdl.Operation operation3 = portType.getOperation(operation3Name, input3Name, output3Name);
+
+    javax.wsdl.BindingOperation bindingOperation3 = binding.getBindingOperation(operation3Name, input3Name, output3Name);
+    javax.wsdl.Operation actualOperation3 = bindingOperation3.getOperation();
+
+    assertEquals(operation3, actualOperation3);
+  }
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/InlineSchemaTest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/InlineSchemaTest.java
index 587facf..b1d2db5 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/InlineSchemaTest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/InlineSchemaTest.java
@@ -110,7 +110,7 @@
   {
     try
     {
-      Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH +"samples/LoadAndPrintTest.wsdl");
+      Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH +"samples/LoadStoreCompare/LoadAndPrintTest.wsdl");
       traverseDefinition(definition);
     }
     catch (Exception e)
@@ -123,7 +123,7 @@
   {
     try
     {
-      Definition definition = loadDefinitionForWSDL4J("./samples/LoadAndPrintTest.wsdl");
+      Definition definition = loadDefinitionForWSDL4J("./samples/LoadStoreCompare/LoadAndPrintTest.wsdl");
       traverseDefinition(definition);
     }
     catch (Exception e)
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LoadAndSerializationTest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LoadAndSerializationTest.java
index c329743..a7ba14e 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LoadAndSerializationTest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LoadAndSerializationTest.java
@@ -103,7 +103,7 @@
 		dir = new File(TEST_DATA_DIR);
 	else	
 		// KB: if you are here, fix text.xml
-        dir = new File(PLUGIN_ABSOLUTE_PATH + "samples"); // fallback
+        dir = new File(PLUGIN_ABSOLUTE_PATH + "samples/LoadStoreCompare"); // fallback
 	
     if (dir.exists() && dir.isDirectory())
     {
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LocationTrackingTest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LocationTrackingTest.java
index 9c861a3..fe94ed0 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LocationTrackingTest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/LocationTrackingTest.java
@@ -61,7 +61,7 @@
   {
     try
     {
-      String fileName = WSDLTestsPlugin.getInstallURL() + "/samples/LoadAndPrintTest.wsdl"; //$NON-NLS-1$
+      String fileName = WSDLTestsPlugin.getInstallURL() + "/samples/LoadStoreCompare/LoadAndPrintTest.wsdl"; //$NON-NLS-1$
       Definition definition = DefinitionLoader.load(fileName, true, true);
       Assert.assertNotNull(definition);
       Assert.assertTrue(definition.eResource() instanceof WSDLResourceImpl);
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/SemanticTest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/SemanticTest.java
index 4119daf..d4852a9 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/SemanticTest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/SemanticTest.java
@@ -496,7 +496,7 @@
   {
     try
     {
-      Definition def = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/LoadAndPrintTest.wsdl",true);
+      Definition def = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/LoadStoreCompare/LoadAndPrintTest.wsdl",true);
       SemanticTest test = new SemanticTest(def);
       test.visit();
     }
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/UtilTest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/UtilTest.java
index 922a78a..407618b 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/UtilTest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/UtilTest.java
@@ -130,11 +130,10 @@
 	  {
         try
 		{
-		  WSDLConstants wsdlConstants = new WSDLConstants();
 		  int type = WSDLConstants.nodeType(WSDLConstants.PORT_ELEMENT_TAG);
 		  Assert.assertTrue("Node type is not that of port", type == 10);
 		  
-	      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/LoadAndPrintTest.wsdl");
+	      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/LoadStoreCompare/LoadAndPrintTest.wsdl");
 	      Assert.assertTrue(definition.eResource() instanceof WSDLResourceImpl);
 
 		  int definitionNodeType = WSDLConstants.nodeType(definition.getElement());
@@ -176,19 +175,19 @@
 		  WSDLResourceImpl resourceImpl = new WSDLResourceImpl(URI.createFileURI("./samples/createResourceTest.wsdl"));
           Assert.assertTrue("Resource is not of type WSDLResourceImpl", resourceImpl instanceof WSDLResourceImpl);
 		  
-	      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/LoadAndPrintTest.wsdl");
+	      definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/LoadStoreCompare/LoadAndPrintTest.wsdl");
 	      Assert.assertTrue(definition.eResource() instanceof WSDLResourceImpl);
 		  Element element = definition.getElement();
 		  Document document = definition.getDocument();
 
 	      if (element != null)
 	      {
-	        resourceImpl.serialize(System.out, element, null);
+          WSDLResourceImpl.serialize(System.out, element, null);
 	      }
 		  
 		  if (document != null)
 		  {
-			resourceImpl.serialize(System.out, document, null);
+        WSDLResourceImpl.serialize(System.out, document, null);
 		  }
 		  
 		  try
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDL4JAPITest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDL4JAPITest.java
index f13b19d..88da8fc 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDL4JAPITest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDL4JAPITest.java
@@ -412,7 +412,7 @@
   {
     try
     {
-      Definition def = loadDefinitionForWSDL4J("./samples/LoadAndPrintTest.wsdl");
+      Definition def = loadDefinitionForWSDL4J("./samples/LoadStoreCompare/LoadAndPrintTest.wsdl");
       WSDL4JAPITest test = new WSDL4JAPITest(def);
       test.visit();
       serialize(test.newDefinition,"./samples/ClonedLoadAndPrintTest.wsdl");
diff --git a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDLEMFAPITest.java b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDLEMFAPITest.java
index ed994b2..671466a 100644
--- a/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDLEMFAPITest.java
+++ b/tests/org.eclipse.wst.wsdl.tests/src/org/eclipse/wst/wsdl/tests/WSDLEMFAPITest.java
@@ -576,7 +576,7 @@
   {
     try
     {
-      Definition def = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH +"samples/LoadAndPrintTest.wsdl",true);
+      Definition def = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH +"samples/LoadStoreCompare/LoadAndPrintTest.wsdl",true);
       WSDLEMFAPITest test = new WSDLEMFAPITest(def);
       test.visit();      
       serialize(test.newDefinition);
diff --git a/tests/org.eclipse.wst.wsdl.validation.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.wsdl.validation.tests/META-INF/MANIFEST.MF
index b88265b..a482f0d 100644
--- a/tests/org.eclipse.wst.wsdl.validation.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.wsdl.validation.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %_PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.wst.wsdl.validation.tests
-Bundle-Version: 1.0.202
+Bundle-Version: 1.0.203
 Bundle-ClassPath: wsdlvalidatetests.jar
 Bundle-Activator: org.eclipse.wst.wsdl.validation.tests.internal.WSDLValidatorTestsPlugin
 Bundle-Vendor: %_PROVIDER_NAME
diff --git a/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/BaseTestCase.java b/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/BaseTestCase.java
index eff916f..b1cd2f9 100644
--- a/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/BaseTestCase.java
+++ b/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/BaseTestCase.java
@@ -13,6 +13,7 @@
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
@@ -25,6 +26,12 @@
 
 import org.apache.xerces.util.XMLGrammarPoolImpl;
 import org.apache.xerces.xni.grammars.XMLGrammarPool;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.wst.ws.internal.plugin.WSPlugin;
 import org.eclipse.wst.ws.internal.preferences.PersistentWSIContext;
 import org.eclipse.wst.wsdl.validation.internal.Constants;
@@ -279,4 +286,84 @@
       return "";
     }
   }
+  
+  /**
+   * Create a project in the workspace with the given name and
+   * add the specified files to the project.
+   * 
+   * @param projectName The name for the project.
+   * @param files An array of file names in the file system that
+   *              will be copied into the project.
+   * @return The created project.
+   */
+  protected IProject createSimpleProject(String projectName, String[] files)
+  {
+    final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+    final IProject project = workspace.getRoot().getProject(projectName);
+    if(!project.exists())
+    {
+      try
+	  {
+        project.create(null);
+      }
+      catch(CoreException e)
+	  {
+        fail("Could not create project " + projectName + e);
+      } 
+    }
+    if(!project.isOpen())
+    {
+      try
+	  {
+        project.open(null);
+	  }
+      catch(CoreException e)
+      {
+        fail("Could not open project " + projectName + e);
+	  }
+    }
+    try
+    {
+      IProjectDescription projectDescription = project.getDescription(); 
+      projectDescription.setName(projectName);
+      project.setDescription(projectDescription, null);
+    }
+    catch(Exception e)
+    {
+      fail("Unable to set project properties for project " + projectName + ". " + e);
+    }
+
+    if(files != null)
+    {
+      int numfiles = files.length;
+      for(int i = 0; i < numfiles; i++)
+      {
+        try
+		{
+          String filename = files[i];
+          filename = filename.replace('\\','/');
+          
+          File file = new File(filename);
+          FileInputStream in = new FileInputStream(file);
+          IFile iFile = project.getFile(file.getName());
+          if(!iFile.exists())
+          {
+            iFile.create(in, true, null);
+            in.close();
+          }
+		}
+        catch(Exception e)
+		{
+		  fail("Unable to locate file " + files[i]);
+		} 
+      }
+    }
+    try
+    {
+      project.refreshLocal(-1, null);
+    }
+    catch(Exception e)
+    {}
+    return project;
+  }
 }
diff --git a/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/PathsTest.java b/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/PathsTest.java
index 4f17bfa..e4380e5 100644
--- a/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/PathsTest.java
+++ b/tests/org.eclipse.wst.wsdl.validation.tests/src/org/eclipse/wst/wsdl/validation/tests/internal/PathsTest.java
@@ -566,4 +566,20 @@
     
     runTest(testfile, loglocation, idealloglocation);
   }
+  
+  /**
+   * Test /Paths/PlatformURL/one.wsdl
+   */
+  public void testPlatformURL()
+  {
+	String testname = "one";
+	String testfile = PLUGIN_ABSOLUTE_PATH + SAMPLES_DIR + PATHS_DIR + "PlatformURL/" + testname + ".wsdl";
+	String testfile2 = PLUGIN_ABSOLUTE_PATH + SAMPLES_DIR + PATHS_DIR + "PlatformURL/two.wsdl";
+	String loglocation = PLUGIN_ABSOLUTE_PATH + GENERATED_RESULTS_DIR + PATHS_DIR + "PlatformURL/" + testname + ".wsdl-log";
+	String idealloglocation = PLUGIN_ABSOLUTE_PATH + IDEAL_RESULTS_DIR + PATHS_DIR + "PlatformURL/" + testname + ".wsdl-log";
+	 
+	createSimpleProject("test", new String[]{testfile,testfile2});
+	
+	runTest(FILE_PROTOCOL + testfile, loglocation, idealloglocation);
+  }
 }
diff --git a/tests/org.eclipse.wst.wsdl.validation.tests/testresources/idealResults/Paths/PlatformURL/one.wsdl-log b/tests/org.eclipse.wst.wsdl.validation.tests/testresources/idealResults/Paths/PlatformURL/one.wsdl-log
new file mode 100644
index 0000000..aa2b361
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.validation.tests/testresources/idealResults/Paths/PlatformURL/one.wsdl-log
@@ -0,0 +1,8 @@
+number of errors      : 0
+number of warnings    : 0
+
+------------error list-------------------------------------------
+(none)
+------------warning list-----------------------------------------
+(none)
+-----------------------------------------------------------------
diff --git a/tests/org.eclipse.wst.wsdl.validation.tests/testresources/samples/Paths/PlatformURL/one.wsdl b/tests/org.eclipse.wst.wsdl.validation.tests/testresources/samples/Paths/PlatformURL/one.wsdl
new file mode 100644
index 0000000..20275a5
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.validation.tests/testresources/samples/Paths/PlatformURL/one.wsdl
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/one/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="one" targetNamespace="http://www.example.org/one/">
+<wsdl:import
+  namespace="http://www.example.org/two/"
+  location="platform:/resource/test/two.wsdl"/>
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsdl.validation.tests/testresources/samples/Paths/PlatformURL/two.wsdl b/tests/org.eclipse.wst.wsdl.validation.tests/testresources/samples/Paths/PlatformURL/two.wsdl
new file mode 100644
index 0000000..f530db0
--- /dev/null
+++ b/tests/org.eclipse.wst.wsdl.validation.tests/testresources/samples/Paths/PlatformURL/two.wsdl
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/two/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="two" targetNamespace="http://www.example.org/two/">
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/CoreMessageLogConformanceTest.java b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/CoreMessageLogConformanceTest.java
index 153c1ae..25d5f73 100644
--- a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/CoreMessageLogConformanceTest.java
+++ b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/CoreMessageLogConformanceTest.java
@@ -21,6 +21,8 @@
   public static final String MESSAGE_LOG_BASE_DIRECTORY =
       "testResources/samples/messageLogs";
   public static final String MESSAGE_LOG_EXTENSION = ".wsimsg";
+  public static final String WSDL_BASE_DIRECTORY = "testResources/samples/wsdl";
+  public static final String WSDL_EXTENSION = ".wsdl";
 
   public CoreMessageLogConformanceTest(String name) 
   {
@@ -76,4 +78,62 @@
       }	
       return analyzer;
   }
+
+  
+  
+  /**
+   * JUnit test: validate the message log with a WSDL file
+   * @param wsdlFile URI of the WSDL file
+   * @param WSData String array containing: elementname, namespace, parentname, type
+   * @param filename the name of the log and wsdl file (they should be located in the log and wsdl paths respectively)
+   */
+  
+  protected void runTestWithWSDL(String category, String testName, String[] WSData) {	
+
+      assertNotNull("Problems determining base url", pluginURI);
+      String testDirectory  = pluginURI + MESSAGE_LOG_BASE_DIRECTORY + "/" +
+              category + "/" + testName;
+      String messageLogFile = "file://" + testDirectory + "/" + testName +
+              MESSAGE_LOG_EXTENSION;
+      String testcaseFile = testDirectory +  "/" + TEST_CASE_FILE;
+      String wsdlFile = "file://" + pluginURI + WSDL_BASE_DIRECTORY + "/" + category + "/" + testName + WSDL_EXTENSION;
+      
+      // validate the message log document
+      MessageAnalyzer analyzer = validateConformanceWithWSDL(messageLogFile, wsdlFile, WSData);
+      assertNotNull("Unknown problems during validation", analyzer);
+
+      // retrieve the expected assertion failures
+      List expectedErrors = getExpectedAssertionFailures(testcaseFile);
+      assertNotNull("Problems retrieving expected failures", expectedErrors);
+
+      // compare the actual errors with the expected errors
+      analyzeResults(analyzer.getAssertionErrors(), expectedErrors);
+  }
+
+
+  /**
+   * Validate log with a WSDL file
+   * @param wsdlFile URI of the WSDL file
+   * @param WSData String array containing: elementname, namespace, parentname, type
+   * @param filename the name of the log and wsdl file (they should be located in the log and wsdl paths respectively)
+   * @return the WSDLAnalyzer object containing the validation results
+   */  
+
+	protected MessageAnalyzer validateConformanceWithWSDL(String filename, String wsdlFile, String[] WSData) {
+	    MessageAnalyzer analyzer = null;
+	    try {
+	        WSIPreferences preferences = new WSIPreferences();
+	        preferences.setComplianceLevel( WSITestToolsProperties.STOP_NON_WSI);
+	        preferences.setTADFile(getTADURI(tadID));
+	
+	        analyzer = new MessageAnalyzer(filename, wsdlFile, WSData[0],  WSData[1], WSData[2], WSData[3], preferences);
+	
+	        // run the conformance check and add errors and warnings as needed
+	        analyzer.validateConformance();
+	    } catch (Exception e) {
+	        return null;
+	    }	
+	    return analyzer;
+	}
+
 }
diff --git a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/MessageLogConformanceSecureWSTest.java b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/MessageLogConformanceSecureWSTest.java
new file mode 100644
index 0000000..c523eca
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/MessageLogConformanceSecureWSTest.java
@@ -0,0 +1,29 @@
+package org.eclipse.wst.wsi.tests.internal;
+
+import org.eclipse.wst.wsi.internal.analyzer.MessageAnalyzer;
+
+
+
+/**
+ * JUnit tests that test message logs against the WS-I Attachments profile.
+ */
+public class MessageLogConformanceSecureWSTest extends CoreMessageLogConformanceTest {
+
+	public static final String DEFAULT_LOG_FILENAME = "log.wsimsg";
+	
+    public MessageLogConformanceSecureWSTest(String name) {
+        super(name);
+    }
+
+    public void test_SecureWS_NoSecuriy() { runTestWithWSDL("SecureWS", "NoSecurity", new String[] {"WebService", "http://main", "WebServiceService", "port"}); } 
+
+    public void test_SecureWS_Signature() { runTestWithWSDL("SecureWS", "Signature", new String[] {"WebService", "http://main", "WebServiceService", "port"}); } 
+    
+    public void test_SecureWS_Encryption() { runTestWithWSDL("SecureWS", "Encryption", new String[] {"WebService", "http://main", "WebServiceService", "port"}); }
+       
+    public void test_SecureWS_SignatureAndEncryption() { runTestWithWSDL("SecureWS", "SignatureAndEncryption", new String[] {"WebService", "http://main", "WebServiceService", "port"}); } 
+    
+
+
+
+}
diff --git a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/RegressionBucket.java b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/RegressionBucket.java
index 118fc7b..d01da9a 100644
--- a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/RegressionBucket.java
+++ b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/RegressionBucket.java
@@ -31,6 +31,7 @@
 	    if (tadIsAvailable(WSITestToolsProperties.SSBP_ASSERTION_FILE)) {
               suite.addTest(new TestSuite(WSDLConformanceSSBPTest.class));
               suite.addTest(new TestSuite(MessageLogConformanceSSBPTest.class));
+              suite.addTest(new TestSuite(MessageLogConformanceSecureWSTest.class));
         }
 	    if (tadIsAvailable(WSITestToolsProperties.AP_ASSERTION_FILE)) {
               suite.addTest(new TestSuite(WSDLConformanceAPTest.class));
diff --git a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceAPTest.java b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceAPTest.java
index 2c105e8..91f470a 100644
--- a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceAPTest.java
+++ b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceAPTest.java
@@ -23,7 +23,7 @@
 //ws-i wsdls
   public void test_addressBook() { runTest("wsi", "addressBook", TAD_ID_AP); }
   public void test_addressBook_rpc() { runTest("wsi", "addressBook-rpc", TAD_ID_AP); }
-  public void test_sampleAppCatalog() { runTest("wsi", "sampleAppCatalog", TAD_ID_AP); }  
+ // public void test_sampleAppCatalog() { runTest("wsi", "sampleAppCatalog", TAD_ID_AP); }  
   public void test_sampleAppManufacturer() { runTest("wsi", "sampleAppManufacturer", TAD_ID_AP); }  
   public void test_sampleAppWarehouse() { runTest("wsi", "sampleAppWarehouse", TAD_ID_AP); } 
 
diff --git a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceSSBPTest.java b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceSSBPTest.java
index 9db221c..c20d540 100644
--- a/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceSSBPTest.java
+++ b/tests/org.eclipse.wst.wsi.tests/src/org/eclipse/wst/wsi/tests/internal/WSDLConformanceSSBPTest.java
@@ -23,7 +23,7 @@
   // ws-i wsdls
   public void test_addressBook() { runTest("wsi", "addressBook", TAD_ID_SSBP); }
   public void test_addressBook_rpc() { runTest("wsi", "addressBook-rpc", TAD_ID_SSBP); }
-  public void test_sampleAppCatalog() { runTest("wsi", "sampleAppCatalog", TAD_ID_SSBP); }  
+  //public void test_sampleAppCatalog() { runTest("wsi", "sampleAppCatalog", TAD_ID_SSBP); }  
   public void test_sampleAppManufacturer() { runTest("wsi", "sampleAppManufacturer", TAD_ID_SSBP); }  
   public void test_sampleAppWarehouse() { runTest("wsi", "sampleAppWarehouse", TAD_ID_SSBP); } 
 
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Encryption/Encryption.wsimsg b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Encryption/Encryption.wsimsg
new file mode 100644
index 0000000..4986058
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Encryption/Encryption.wsimsg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<log timestamp="2007-01-16T12:15:58.325"
+    xmlns="http://www.ws-i.org/testing/2004/07/log/"
+    xmlns:wsi-monConfig="http://www.ws-i.org/testing/2004/07/monitorConfig/"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <monitor version="1.0" releaseDate="2003-03-20">
+    <implementer name="IBM" location=""/>
+    <environment>
+      <runtime name="Java(TM) 2 Runtime Environment, Standard Edition" version="pwi32dev-20061002a (SR3)"/>
+      <operatingSystem name="Windows XP" version="5.1 build 2600 Service Pack 2"/>
+      <xmlParser name="Apache Xerces" version="XML4J 4.4.6"/>
+    </environment>
+    <wsi-monConfig:configuration>
+    <wsi-monConfig:comment>Comment</wsi-monConfig:comment>
+      <wsi-monConfig:logFile replace="true" location="URL">
+      <wsi-monConfig:addStyleSheet href="null" type="null" />
+    </wsi-monConfig:logFile>
+      <wsi-monConfig:logDuration>600</wsi-monConfig:logDuration>
+      <wsi-monConfig:cleanupTimeoutSeconds>3</wsi-monConfig:cleanupTimeoutSeconds>
+      <wsi-monConfig:manInTheMiddle>
+      </wsi-monConfig:manInTheMiddle>
+    </wsi-monConfig:configuration>
+  </monitor>
+
+<messageEntry xsi:type="httpMessageEntry" ID="1" conversationID="1" type="request" timestamp="2007-01-16T10:47:30.653Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsse:Security soapenv:mustUnderstand=&quot;1&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;&gt;&lt;EncryptedKey xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#rsa-1_5&quot;/&gt;&lt;ds:KeyInfo xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:KeyIdentifier ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier&quot;&gt;/62wXObED7z6c1yX7QkvN1thQdY=&lt;/wsse:KeyIdentifier&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;CipherData&gt;&lt;CipherValue&gt;jqdoeKEKKqXgQnvWzDO/WyHPb35UYWRzzwyXAvSHFYThg3O8YM7HbfYF5JUAv89bii8HuT/52oEXRvLOdAFIPUlYE0nRSH+JCb/tin+3XDlqm0HSb/pjzxKG074llcHftvRzhsJ2R+CSzXi9pCoxGVTbLR9MhcsWx1i/VvDPLZE=&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;ReferenceList&gt;&lt;DataReference URI=&quot;#wssecurity_encryption_id_0&quot;/&gt;&lt;/ReferenceList&gt;&lt;/EncryptedKey&gt;&lt;/wsse:Security&gt;&lt;wsa:To&gt;http://localhost:9082/WebProjectWithEncription/services/WebService&lt;/wsa:To&gt;&lt;wsa:Action&gt;increment&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2B9757CC-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body&gt;&lt;EncryptedData Id=&quot;wssecurity_encryption_id_0&quot; Type=&quot;http://www.w3.org/2001/04/xmlenc#Content&quot; xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&quot;/&gt;&lt;CipherData&gt;&lt;CipherValue&gt;vdU42sOo6/Wv1V3roMIVpbJuvgsIEx6mOwlNWDrr8jgkKv65VBCv2WIMASwHZVLZZAqJ4zgiEV9rpCXs7Qj+8GMfmVR9VZYvKK5j5HEv1xbzB0HPOsa5BA==&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;/EncryptedData&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9082</senderHostAndPort>
+<receiverHostAndPort>localhost:9080</receiverHostAndPort>
+<httpHeaders>POST /WebProjectWithEncription/services/WebService HTTP/1.1&#xd;
+Host: localhost:9080&#xd;
+Accept: application/soap+xml,multipart/related,text/*&#xd;
+User-Agent: IBM WebServices/1.0&#xd;
+Cache-Control: no-cache&#xd;
+Pragma: no-cache&#xd;
+SOAPAction: &quot;increment&quot;&#xd;
+Connection: Keep-Alive&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Length: 1871&#xd;
+Date: Tue, 16 Jan 2007 15:47:30 GMT&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+<messageEntry xsi:type="httpMessageEntry" ID="2" conversationID="1" type="response" timestamp="2007-01-16T10:47:31.074Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsse:Security soapenv:mustUnderstand=&quot;1&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;&gt;&lt;EncryptedKey xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#rsa-1_5&quot;/&gt;&lt;ds:KeyInfo xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:KeyIdentifier ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier&quot;&gt;tyBU3qQufYZ71tJAU7gVIqgROuQ=&lt;/wsse:KeyIdentifier&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;CipherData&gt;&lt;CipherValue&gt;PVUO0afdAuOYFP1nMvezP6UqY4rIo83xPGJ4rW+s7NkPOHdErD/tmbtbG8uXAyeT4iLXM/K2+fSylni8GFiJZkxoz08kMEd19/6aeafbA0izU9DVAUKRM/ehCg2KCYi2wXhQajYfkQuFMGumA9VKVgrY7Ndu7f/Yc/pmIWtQ/so=&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;ReferenceList&gt;&lt;DataReference URI=&quot;#wssecurity_encryption_id_1&quot;/&gt;&lt;/ReferenceList&gt;&lt;/EncryptedKey&gt;&lt;/wsse:Security&gt;&lt;wsa:To&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/wsa:To&gt;&lt;wsa:Action&gt;http://main/WebService/incrementResponse&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2B977678-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;wsa:RelatesTo&gt;uuid:2B9757CC-0110-4000-E000-035C091A9DD9&lt;/wsa:RelatesTo&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body&gt;&lt;EncryptedData Id=&quot;wssecurity_encryption_id_1&quot; Type=&quot;http://www.w3.org/2001/04/xmlenc#Content&quot; xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&quot;/&gt;&lt;CipherData&gt;&lt;CipherValue&gt;RDSS9LpkpIu5lWOZr+hfsEzNouljD6/NRIfsYPH0XCtwpom4an/gZS1vl5u9r5DZUuq+WpSJOpe8Ns9mqZljCFJvVmMLGb+kC3ig7jEJCvbqc78qDIQCmgLPOrcl1Q0ZSlh25Ax73de4HWWOPJQjKPHZYopcU8MK&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;/EncryptedData&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9080</senderHostAndPort>
+<receiverHostAndPort>localhost:9082</receiverHostAndPort>
+<httpHeaders>HTTP/1.1 200 OK&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Language: en-US&#xd;
+Content-Length: 1994&#xd;
+Date: Tue, 16 Jan 2007 15:47:30 GMT&#xd;
+Server: WebSphere Application Server/6.1&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+</log>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Encryption/testcase.xml b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Encryption/testcase.xml
new file mode 100644
index 0000000..2995808
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Encryption/testcase.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testcase name="Encryption">
+  <description>
+    This is an example of a message log file that contains a message with encryption.
+  </description>
+  <expectedFailures/>
+</testcase>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/NoSecurity/NoSecurity.wsimsg b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/NoSecurity/NoSecurity.wsimsg
new file mode 100644
index 0000000..20c92a9
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/NoSecurity/NoSecurity.wsimsg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<log timestamp="2007-01-16T18:14:06.005"
+    xmlns="http://www.ws-i.org/testing/2004/07/log/"
+    xmlns:wsi-monConfig="http://www.ws-i.org/testing/2004/07/monitorConfig/"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <monitor version="1.0" releaseDate="2003-03-20">
+    <implementer name="IBM" location=""/>
+    <environment>
+      <runtime name="Java(TM) 2 Runtime Environment, Standard Edition" version="pwi32dev-20061002a (SR3)"/>
+      <operatingSystem name="Windows XP" version="5.1 build 2600 Service Pack 2"/>
+      <xmlParser name="Apache Xerces" version="XML4J 4.4.6"/>
+    </environment>
+    <wsi-monConfig:configuration>
+    <wsi-monConfig:comment>Comment</wsi-monConfig:comment>
+      <wsi-monConfig:logFile replace="true" location="URL">
+      <wsi-monConfig:addStyleSheet href="null" type="null" />
+    </wsi-monConfig:logFile>
+      <wsi-monConfig:logDuration>600</wsi-monConfig:logDuration>
+      <wsi-monConfig:cleanupTimeoutSeconds>3</wsi-monConfig:cleanupTimeoutSeconds>
+      <wsi-monConfig:manInTheMiddle>
+      </wsi-monConfig:manInTheMiddle>
+    </wsi-monConfig:configuration>
+  </monitor>
+
+<messageEntry xsi:type="httpMessageEntry" ID="1" conversationID="1" type="request" timestamp="2007-01-16T18:13:52.836Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsa:To&gt;http://localhost:9082/WebProjectNoSecurity/services/WebService&lt;/wsa:To&gt;&lt;wsa:Action&gt;increment&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2D301EA6-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body&gt;&lt;p619:increment xmlns:p619=&quot;http://main&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/p619:increment&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9082</senderHostAndPort>
+<receiverHostAndPort>localhost:9080</receiverHostAndPort>
+<httpHeaders>POST /WebProjectNoSecurity/services/WebService HTTP/1.1&#xd;
+Host: localhost:9080&#xd;
+Accept: application/soap+xml,multipart/related,text/*&#xd;
+User-Agent: IBM WebServices/1.0&#xd;
+Cache-Control: no-cache&#xd;
+Pragma: no-cache&#xd;
+SOAPAction: &quot;increment&quot;&#xd;
+Connection: Keep-Alive&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Length: 622&#xd;
+Date: Tue, 16 Jan 2007 23:13:52 GMT&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+<messageEntry xsi:type="httpMessageEntry" ID="2" conversationID="1" type="response" timestamp="2007-01-16T18:13:52.976Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsa:To&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/wsa:To&gt;&lt;wsa:Action&gt;http://main/WebService/incrementResponse&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2D301F50-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;wsa:RelatesTo&gt;uuid:2D301EA6-0110-4000-E000-035C091A9DD9&lt;/wsa:RelatesTo&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body&gt;&lt;p619:incrementResponse xmlns:p619=&quot;http://main&quot;&gt;&lt;incrementReturn&gt;2&lt;/incrementReturn&gt;&lt;/p619:incrementResponse&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9080</senderHostAndPort>
+<receiverHostAndPort>localhost:9082</receiverHostAndPort>
+<httpHeaders>HTTP/1.1 200 OK&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Language: en-US&#xd;
+Content-Length: 745&#xd;
+Date: Tue, 16 Jan 2007 23:13:52 GMT&#xd;
+Server: WebSphere Application Server/6.1&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+</log>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/NoSecurity/testcase.xml b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/NoSecurity/testcase.xml
new file mode 100644
index 0000000..5befda8
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/NoSecurity/testcase.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testcase name="Encryption">
+  <description>
+    This is an example of a message log file that contains a message with no security.
+  </description>
+  <expectedFailures/>
+</testcase>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Signature/Signature.wsimsg b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Signature/Signature.wsimsg
new file mode 100644
index 0000000..6cd05ed
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Signature/Signature.wsimsg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<log timestamp="2007-01-16T18:08:38.524"
+    xmlns="http://www.ws-i.org/testing/2004/07/log/"
+    xmlns:wsi-monConfig="http://www.ws-i.org/testing/2004/07/monitorConfig/"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <monitor version="1.0" releaseDate="2003-03-20">
+    <implementer name="IBM" location=""/>
+    <environment>
+      <runtime name="Java(TM) 2 Runtime Environment, Standard Edition" version="pwi32dev-20061002a (SR3)"/>
+      <operatingSystem name="Windows XP" version="5.1 build 2600 Service Pack 2"/>
+      <xmlParser name="Apache Xerces" version="XML4J 4.4.6"/>
+    </environment>
+    <wsi-monConfig:configuration>
+    <wsi-monConfig:comment>Comment</wsi-monConfig:comment>
+      <wsi-monConfig:logFile replace="true" location="URL">
+      <wsi-monConfig:addStyleSheet href="null" type="null" />
+    </wsi-monConfig:logFile>
+      <wsi-monConfig:logDuration>600</wsi-monConfig:logDuration>
+      <wsi-monConfig:cleanupTimeoutSeconds>3</wsi-monConfig:cleanupTimeoutSeconds>
+      <wsi-monConfig:manInTheMiddle>
+      </wsi-monConfig:manInTheMiddle>
+    </wsi-monConfig:configuration>
+  </monitor>
+
+<messageEntry xsi:type="httpMessageEntry" ID="1" conversationID="1" type="request" timestamp="2007-01-16T18:08:26.006Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsse:Security soapenv:mustUnderstand=&quot;1&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;&gt;&lt;wsse:BinarySecurityToken EncodingType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot; wsu:Id=&quot;x509bst_16&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;MIIDQTCCAqqgAwIBAgICAQQwDQYJKoZIhvcNAQEFBQAwTjELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEthbmFnYXdhMQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1RSTDEQMA4GA1UEAxMHSW50IENBMjAeFw0wMTEwMDEwOTU0MDZaFw0xMTEwMDEwOTU0MDZaMFQxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNUUkwxFjAUBgNVBAMTDVNPQVBSZXF1ZXN0ZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMy3PfZ1mPhrEsBvYiOuIlPV3Uis5Yy6hmxo2YwYC2nNDBPzKslWUi/Q+fK+DNdY6KEHmuDrcVcEma48J9X1a5avRlksQfKptKoVn4eBys2i/wkwyzQhDaFji79/MvnTRW8EVy99FNKw4PFnhOoe1tlDcNBuIH/fIuGOz9ElTV+fAgMBAAGjggEmMIIBIjAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFIW3FD1cXie4j4zw1gAp4cuOAZ4lMIG6BgNVHSMEgbIwga+AFL35INU4+WRy09vaf9zOsP7QvO9voYGSpIGPMIGMMQswCQYDVQQGEwJKUDERMA8GA1UECBMIS2FuYWdhd2ExDzANBgNVBAcTBllhbWF0bzEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNUUkwxGTAXBgNVBAMTEFNPQVAgMi4xIFRlc3QgQ0ExIjAgBgkqhkiG9w0BCQEWE21hcnV5YW1hQGpwLmlibS5jb22CAgEBMA0GCSqGSIb3DQEBBQUAA4GBAHkthdGDgCvdIL9/vXUo74xpfOQd/rr1owBmMdb1TWdOyzwbOHC7lkUlnKrkI7SofwSLSDUP571iiMXUx3tRdmAVCoDMMFuDXh9V7212luXccx0s1S5KN0D3xW97LLNegQC0/b+aFD8XKw2U5ZtwbnFTRgs097dmz09RosDKkLlM&lt;/wsse:BinarySecurityToken&gt;&lt;ds:Signature xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;ds:SignedInfo&gt;&lt;ds:CanonicalizationMethod Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsse ds &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:CanonicalizationMethod&gt;&lt;ds:SignatureMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/&gt;&lt;ds:Reference URI=&quot;#wssecurity_signature_id_15&quot;&gt;&lt;ds:Transforms&gt;&lt;ds:Transform Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsu p619 &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:Transform&gt;&lt;/ds:Transforms&gt;&lt;ds:DigestMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot;/&gt;&lt;ds:DigestValue&gt;dHNCiEcqxXYSDrbBk3ahCatzwKg=&lt;/ds:DigestValue&gt;&lt;/ds:Reference&gt;&lt;/ds:SignedInfo&gt;&lt;ds:SignatureValue&gt;O6miQ9l6amWnaWi5VWxogwy6GJKMSudmhs417/qGO9yZvAtcGxpAHIrEOWzE/Mt/pFMH3lUKlRW13KvGlmRUuMqMrdkpEhD5tgCQZArT0XWEaUZek+MmmfMhCnB8aAlEpTIaRcWp/0RnNdJXozkyjboT7ouUSIJN/KtmBhMWlkg=&lt;/ds:SignatureValue&gt;&lt;ds:KeyInfo&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:Reference URI=&quot;#x509bst_16&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot;/&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;/ds:Signature&gt;&lt;/wsse:Security&gt;&lt;wsa:To&gt;http://localhost:9082/WebProjectWithSignature/services/WebService&lt;/wsa:To&gt;&lt;wsa:Action&gt;increment&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2D2B21BC-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body wsu:Id=&quot;wssecurity_signature_id_15&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;&lt;p619:increment xmlns:p619=&quot;http://main&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/p619:increment&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9082</senderHostAndPort>
+<receiverHostAndPort>localhost:9080</receiverHostAndPort>
+<httpHeaders>POST /WebProjectWithSignature/services/WebService HTTP/1.1&#xd;
+Host: localhost:9080&#xd;
+Accept: application/soap+xml,multipart/related,text/*&#xd;
+User-Agent: IBM WebServices/1.0&#xd;
+Cache-Control: no-cache&#xd;
+Pragma: no-cache&#xd;
+SOAPAction: &quot;increment&quot;&#xd;
+Connection: Keep-Alive&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Length: 3672&#xd;
+Date: Tue, 16 Jan 2007 23:08:25 GMT&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+<messageEntry xsi:type="httpMessageEntry" ID="2" conversationID="1" type="response" timestamp="2007-01-16T18:08:26.126Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsse:Security soapenv:mustUnderstand=&quot;1&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;&gt;&lt;wsse:BinarySecurityToken EncodingType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot; wsu:Id=&quot;x509bst_18&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;MIIDQDCCAqmgAwIBAgICAQUwDQYJKoZIhvcNAQEFBQAwTjELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEthbmFnYXdhMQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1RSTDEQMA4GA1UEAxMHSW50IENBMjAeFw0wMTEwMDExMDAwMzlaFw0xMTEwMDExMDAwMzlaMFMxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNUUkwxFTATBgNVBAMTDFNPQVBQcm92aWRlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAraakNJ1JzkPUuvPdXRvPOOCl12nBwmqvt65dk/x+QzxxarDNwH+eWRbLyyKcrAyd0XGV+Zbvj6V3O9DSVCZUCJttw6bbqqeYhwAP3V8s24sID77tk3gOhUTEGYxsljX2orL26SLqFJMrvnvk2FRS2mrdkZEBUG97mD4QWcln4d0CAwEAAaOCASYwggEiMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlXSsrVRfZOLGdJdjEIwTbuSTe4UwgboGA1UdIwSBsjCBr4AUvfkg1Tj5ZHLT29p/3M6w/tC872+hgZKkgY8wgYwxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTEPMA0GA1UEBxMGWWFtYXRvMQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1RSTDEZMBcGA1UEAxMQU09BUCAyLjEgVGVzdCBDQTEiMCAGCSqGSIb3DQEJARYTbWFydXlhbWFAanAuaWJtLmNvbYICAQEwDQYJKoZIhvcNAQEFBQADgYEAXE7mE1RPb3lYAYJFzBb3VAHvkCWa/HQtCOZdyniCHp3MJ9EbNTq+QpOHV60YE8u0+5SejCzFSOHOpyBgLPjWoz8JXQnjV7VcAbTglw+ZoOSYy64rfhRdr9giSs47F4D6woPsAd2ubg/YhMaXLTSyGxPdV3VqQsutuSgDUDoqWCA=&lt;/wsse:BinarySecurityToken&gt;&lt;ds:Signature xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;ds:SignedInfo&gt;&lt;ds:CanonicalizationMethod Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsse ds &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:CanonicalizationMethod&gt;&lt;ds:SignatureMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/&gt;&lt;ds:Reference URI=&quot;#wssecurity_signature_id_17&quot;&gt;&lt;ds:Transforms&gt;&lt;ds:Transform Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsu p619 &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:Transform&gt;&lt;/ds:Transforms&gt;&lt;ds:DigestMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot;/&gt;&lt;ds:DigestValue&gt;toHD25ng+LU4/TJVnXSw4qqYfOg=&lt;/ds:DigestValue&gt;&lt;/ds:Reference&gt;&lt;/ds:SignedInfo&gt;&lt;ds:SignatureValue&gt;k6V0J3rVaIN5zkrklNNlzAslLdbI4pIIbBXh4L8oh477URpIW9k1Qp3ccaaGEoJazeogyq8YqWGliJD0f5qfZz7oBq6BRi2JxB63Ez1IxfXm0uBZRNRGx9IVpdA0y4iVyFiAgUR5e7cJTy/Xun7tLqmN3XrGH0dvdqFTOKzi/Ws=&lt;/ds:SignatureValue&gt;&lt;ds:KeyInfo&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:Reference URI=&quot;#x509bst_18&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot;/&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;/ds:Signature&gt;&lt;/wsse:Security&gt;&lt;wsa:To&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/wsa:To&gt;&lt;wsa:Action&gt;http://main/WebService/incrementResponse&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2D2B227A-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;wsa:RelatesTo&gt;uuid:2D2B21BC-0110-4000-E000-035C091A9DD9&lt;/wsa:RelatesTo&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body wsu:Id=&quot;wssecurity_signature_id_17&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;&lt;p619:incrementResponse xmlns:p619=&quot;http://main&quot;&gt;&lt;incrementReturn&gt;2&lt;/incrementReturn&gt;&lt;/p619:incrementResponse&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9080</senderHostAndPort>
+<receiverHostAndPort>localhost:9082</receiverHostAndPort>
+<httpHeaders>HTTP/1.1 200 OK&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Language: en-US&#xd;
+Content-Length: 3792&#xd;
+Date: Tue, 16 Jan 2007 23:08:25 GMT&#xd;
+Server: WebSphere Application Server/6.1&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+</log>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Signature/testcase.xml b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Signature/testcase.xml
new file mode 100644
index 0000000..708b88a
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/Signature/testcase.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testcase name="Encryption">
+  <description>
+    This is an example of a message log file that contains a message with signature.
+  </description>
+  <expectedFailures/>
+</testcase>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/SignatureAndEncryption/SignatureAndEncryption.wsimsg b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/SignatureAndEncryption/SignatureAndEncryption.wsimsg
new file mode 100644
index 0000000..58e6310
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/SignatureAndEncryption/SignatureAndEncryption.wsimsg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<log timestamp="2007-01-16T18:20:09.878"
+    xmlns="http://www.ws-i.org/testing/2004/07/log/"
+    xmlns:wsi-monConfig="http://www.ws-i.org/testing/2004/07/monitorConfig/"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <monitor version="1.0" releaseDate="2003-03-20">
+    <implementer name="IBM" location=""/>
+    <environment>
+      <runtime name="Java(TM) 2 Runtime Environment, Standard Edition" version="pwi32dev-20061002a (SR3)"/>
+      <operatingSystem name="Windows XP" version="5.1 build 2600 Service Pack 2"/>
+      <xmlParser name="Apache Xerces" version="XML4J 4.4.6"/>
+    </environment>
+    <wsi-monConfig:configuration>
+    <wsi-monConfig:comment>Comment</wsi-monConfig:comment>
+      <wsi-monConfig:logFile replace="true" location="URL">
+      <wsi-monConfig:addStyleSheet href="null" type="null" />
+    </wsi-monConfig:logFile>
+      <wsi-monConfig:logDuration>600</wsi-monConfig:logDuration>
+      <wsi-monConfig:cleanupTimeoutSeconds>3</wsi-monConfig:cleanupTimeoutSeconds>
+      <wsi-monConfig:manInTheMiddle>
+      </wsi-monConfig:manInTheMiddle>
+    </wsi-monConfig:configuration>
+  </monitor>
+
+<messageEntry xsi:type="httpMessageEntry" ID="1" conversationID="1" type="request" timestamp="2007-01-16T18:19:58.061Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsse:Security soapenv:mustUnderstand=&quot;1&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;&gt;&lt;wsse:BinarySecurityToken EncodingType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot; wsu:Id=&quot;x509bst_20&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;MIIDQTCCAqqgAwIBAgICAQQwDQYJKoZIhvcNAQEFBQAwTjELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEthbmFnYXdhMQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1RSTDEQMA4GA1UEAxMHSW50IENBMjAeFw0wMTEwMDEwOTU0MDZaFw0xMTEwMDEwOTU0MDZaMFQxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNUUkwxFjAUBgNVBAMTDVNPQVBSZXF1ZXN0ZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMy3PfZ1mPhrEsBvYiOuIlPV3Uis5Yy6hmxo2YwYC2nNDBPzKslWUi/Q+fK+DNdY6KEHmuDrcVcEma48J9X1a5avRlksQfKptKoVn4eBys2i/wkwyzQhDaFji79/MvnTRW8EVy99FNKw4PFnhOoe1tlDcNBuIH/fIuGOz9ElTV+fAgMBAAGjggEmMIIBIjAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFIW3FD1cXie4j4zw1gAp4cuOAZ4lMIG6BgNVHSMEgbIwga+AFL35INU4+WRy09vaf9zOsP7QvO9voYGSpIGPMIGMMQswCQYDVQQGEwJKUDERMA8GA1UECBMIS2FuYWdhd2ExDzANBgNVBAcTBllhbWF0bzEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNUUkwxGTAXBgNVBAMTEFNPQVAgMi4xIFRlc3QgQ0ExIjAgBgkqhkiG9w0BCQEWE21hcnV5YW1hQGpwLmlibS5jb22CAgEBMA0GCSqGSIb3DQEBBQUAA4GBAHkthdGDgCvdIL9/vXUo74xpfOQd/rr1owBmMdb1TWdOyzwbOHC7lkUlnKrkI7SofwSLSDUP571iiMXUx3tRdmAVCoDMMFuDXh9V7212luXccx0s1S5KN0D3xW97LLNegQC0/b+aFD8XKw2U5ZtwbnFTRgs097dmz09RosDKkLlM&lt;/wsse:BinarySecurityToken&gt;&lt;EncryptedKey xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#rsa-1_5&quot;/&gt;&lt;ds:KeyInfo xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:KeyIdentifier ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier&quot;&gt;/62wXObED7z6c1yX7QkvN1thQdY=&lt;/wsse:KeyIdentifier&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;CipherData&gt;&lt;CipherValue&gt;guuArIgK20ZQklsNkcj1XzaCmStg+0rx59teuD2pEAXeRvKbCTzkfglRvX8Cn/DiTBYNexbNhvOljX/sue5UKJA5JsmhSCjssGfswJjYXZnRcncAwCTxfottIqawWQF165Baz87uOR0yY7aGimOHipE7SNkR5ll/8AhmwV5gGWk=&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;ReferenceList&gt;&lt;DataReference URI=&quot;#wssecurity_encryption_id_21&quot;/&gt;&lt;/ReferenceList&gt;&lt;/EncryptedKey&gt;&lt;ds:Signature xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;ds:SignedInfo&gt;&lt;ds:CanonicalizationMethod Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsse ds &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:CanonicalizationMethod&gt;&lt;ds:SignatureMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/&gt;&lt;ds:Reference URI=&quot;#wssecurity_signature_id_19&quot;&gt;&lt;ds:Transforms&gt;&lt;ds:Transform Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsu p619 &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:Transform&gt;&lt;/ds:Transforms&gt;&lt;ds:DigestMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot;/&gt;&lt;ds:DigestValue&gt;Oz4zg1AS9dypLRkyllY9IXNtOAU=&lt;/ds:DigestValue&gt;&lt;/ds:Reference&gt;&lt;/ds:SignedInfo&gt;&lt;ds:SignatureValue&gt;GoRB2eClHj7kn4VsyBQYWveMFlxQFk5aoXE/PWFsBCVmTGzyRw+IsZmDxyMPP1Evt5mzIIVsapt5fjFXzq5lkKJEQp+t8TvdRWSIK+UB/jXxuUtkmt+ZSeKWjcecRtTZtdGoLy0A/06xj+bAWV4iG6ffLuP26YhG8Ys+qJB4ZGU=&lt;/ds:SignatureValue&gt;&lt;ds:KeyInfo&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:Reference URI=&quot;#x509bst_20&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot;/&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;/ds:Signature&gt;&lt;/wsse:Security&gt;&lt;wsa:To&gt;http://localhost:9082/WebProjectWithSignatureAndEncryption/services/WebService&lt;/wsa:To&gt;&lt;wsa:Action&gt;increment&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2D35B109-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body wsu:Id=&quot;wssecurity_signature_id_19&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;&lt;EncryptedData Id=&quot;wssecurity_encryption_id_21&quot; Type=&quot;http://www.w3.org/2001/04/xmlenc#Content&quot; xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&quot;/&gt;&lt;CipherData&gt;&lt;CipherValue&gt;ddAkxtyaufLLc13ePe1tDSiCQz+h5HL2QN0gV6hc6R3i3WqKo5gQBzwU8JsZWbp9vQ1VMrQYme2TYHjszKncCZzxIvSbjLZ7nMOuWFF7Ad8p67cWm/mPJw==&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;/EncryptedData&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9082</senderHostAndPort>
+<receiverHostAndPort>localhost:9080</receiverHostAndPort>
+<httpHeaders>POST /WebProjectWithSignatureAndEncryption/services/WebService HTTP/1.1&#xd;
+Host: localhost:9080&#xd;
+Accept: application/soap+xml,multipart/related,text/*&#xd;
+User-Agent: IBM WebServices/1.0&#xd;
+Cache-Control: no-cache&#xd;
+Pragma: no-cache&#xd;
+SOAPAction: &quot;increment&quot;&#xd;
+Connection: Keep-Alive&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Length: 4779&#xd;
+Date: Tue, 16 Jan 2007 23:19:57 GMT&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+<messageEntry xsi:type="httpMessageEntry" ID="2" conversationID="1" type="response" timestamp="2007-01-16T18:19:58.291Z">
+<messageContent>&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:soapenc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:wsa=&quot;http://www.w3.org/2005/08/addressing&quot;&gt;&lt;soapenv:Header&gt;&lt;wsse:Security soapenv:mustUnderstand=&quot;1&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;&gt;&lt;wsse:BinarySecurityToken EncodingType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot; wsu:Id=&quot;x509bst_23&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;MIIDQDCCAqmgAwIBAgICAQUwDQYJKoZIhvcNAQEFBQAwTjELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEthbmFnYXdhMQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1RSTDEQMA4GA1UEAxMHSW50IENBMjAeFw0wMTEwMDExMDAwMzlaFw0xMTEwMDExMDAwMzlaMFMxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTEMMAoGA1UEChMDSUJNMQwwCgYDVQQLEwNUUkwxFTATBgNVBAMTDFNPQVBQcm92aWRlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAraakNJ1JzkPUuvPdXRvPOOCl12nBwmqvt65dk/x+QzxxarDNwH+eWRbLyyKcrAyd0XGV+Zbvj6V3O9DSVCZUCJttw6bbqqeYhwAP3V8s24sID77tk3gOhUTEGYxsljX2orL26SLqFJMrvnvk2FRS2mrdkZEBUG97mD4QWcln4d0CAwEAAaOCASYwggEiMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlXSsrVRfZOLGdJdjEIwTbuSTe4UwgboGA1UdIwSBsjCBr4AUvfkg1Tj5ZHLT29p/3M6w/tC872+hgZKkgY8wgYwxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTEPMA0GA1UEBxMGWWFtYXRvMQwwCgYDVQQKEwNJQk0xDDAKBgNVBAsTA1RSTDEZMBcGA1UEAxMQU09BUCAyLjEgVGVzdCBDQTEiMCAGCSqGSIb3DQEJARYTbWFydXlhbWFAanAuaWJtLmNvbYICAQEwDQYJKoZIhvcNAQEFBQADgYEAXE7mE1RPb3lYAYJFzBb3VAHvkCWa/HQtCOZdyniCHp3MJ9EbNTq+QpOHV60YE8u0+5SejCzFSOHOpyBgLPjWoz8JXQnjV7VcAbTglw+ZoOSYy64rfhRdr9giSs47F4D6woPsAd2ubg/YhMaXLTSyGxPdV3VqQsutuSgDUDoqWCA=&lt;/wsse:BinarySecurityToken&gt;&lt;EncryptedKey xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#rsa-1_5&quot;/&gt;&lt;ds:KeyInfo xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:KeyIdentifier ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier&quot;&gt;tyBU3qQufYZ71tJAU7gVIqgROuQ=&lt;/wsse:KeyIdentifier&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;CipherData&gt;&lt;CipherValue&gt;Y1nJ/cSHzoQRnFQ8xy0oYwMAZe+W2jbkmWFMrqGS/98FQxponuK9TKVQRb7NU1bMwSoNYMmpNjbn3OFmwQgVXxsxgFuJHSw7UYXf2cSWcdq9ALXMR7O4MOK32KOV38GgmQ4FRGhwjpXTpPjmRJ/OK5fKoNbRtwH2j9eiarkYwMU=&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;ReferenceList&gt;&lt;DataReference URI=&quot;#wssecurity_encryption_id_24&quot;/&gt;&lt;/ReferenceList&gt;&lt;/EncryptedKey&gt;&lt;ds:Signature xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;ds:SignedInfo&gt;&lt;ds:CanonicalizationMethod Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsse ds &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:CanonicalizationMethod&gt;&lt;ds:SignatureMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/&gt;&lt;ds:Reference URI=&quot;#wssecurity_signature_id_22&quot;&gt;&lt;ds:Transforms&gt;&lt;ds:Transform Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;&gt;&lt;ec:InclusiveNamespaces PrefixList=&quot;xsi xsd wsa soapenv soapenc wsu p619 &quot; xmlns:ec=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/&gt;&lt;/ds:Transform&gt;&lt;/ds:Transforms&gt;&lt;ds:DigestMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot;/&gt;&lt;ds:DigestValue&gt;SrvVwlKUw7h9gwQVgZtwzHBde3Y=&lt;/ds:DigestValue&gt;&lt;/ds:Reference&gt;&lt;/ds:SignedInfo&gt;&lt;ds:SignatureValue&gt;rRzWsKDh+FDyG7xoyed7gUBXairWG/nNdvLER4w5/YfYQAcLFVGMNc24fl1IsVzEpZfErZlu4kwZyHjptGEDVR4Nh4cr+ZOJXVmpVOtxOvbJNl4pjLU1/N3wlQyYIG0qBrEmFILs3RLWk1+XeE2NlKVWAlJCDGYmNdErrrZh0kE=&lt;/ds:SignatureValue&gt;&lt;ds:KeyInfo&gt;&lt;wsse:SecurityTokenReference&gt;&lt;wsse:Reference URI=&quot;#x509bst_23&quot; ValueType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509&quot;/&gt;&lt;/wsse:SecurityTokenReference&gt;&lt;/ds:KeyInfo&gt;&lt;/ds:Signature&gt;&lt;/wsse:Security&gt;&lt;wsa:To&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/wsa:To&gt;&lt;wsa:Action&gt;http://main/WebService/incrementResponse&lt;/wsa:Action&gt;&lt;wsa:MessageID&gt;uuid:2D35B23F-0110-4000-E000-035C091A9DD9&lt;/wsa:MessageID&gt;&lt;wsa:RelatesTo&gt;uuid:2D35B109-0110-4000-E000-035C091A9DD9&lt;/wsa:RelatesTo&gt;&lt;/soapenv:Header&gt;&lt;soapenv:Body wsu:Id=&quot;wssecurity_signature_id_22&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;&gt;&lt;EncryptedData Id=&quot;wssecurity_encryption_id_24&quot; Type=&quot;http://www.w3.org/2001/04/xmlenc#Content&quot; xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&quot;/&gt;&lt;CipherData&gt;&lt;CipherValue&gt;7YeEI9CMtj0DjpFLypjBMpxRAgdmnnq3d8320kBvMhrQub/AHyPw6k1Wajb8IQ5nGBfNIrC4m0FehtZXUESXyjPfbSGF7scOjr1wxzN4VARz/tWnuXSyZQx6LmJ7KopMeqvymdP03hihsiEZFK8SLBIaGcmlmAHi&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;/EncryptedData&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:9080</senderHostAndPort>
+<receiverHostAndPort>localhost:9082</receiverHostAndPort>
+<httpHeaders>HTTP/1.1 200 OK&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Content-Language: en-US&#xd;
+Content-Length: 4890&#xd;
+Date: Tue, 16 Jan 2007 23:19:57 GMT&#xd;
+Server: WebSphere Application Server/6.1&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+</log>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/SignatureAndEncryption/testcase.xml b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/SignatureAndEncryption/testcase.xml
new file mode 100644
index 0000000..0450ced
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/SecureWS/SignatureAndEncryption/testcase.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testcase name="Encryption">
+  <description>
+    This is an example of a message log file that contains a message with signature and encryption.
+  </description>
+  <expectedFailures/>
+</testcase>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/bugzilla/141966/141966.wsimsg b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/bugzilla/141966/141966.wsimsg
new file mode 100644
index 0000000..4245fa8
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/bugzilla/141966/141966.wsimsg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<log timestamp="2006-04-13T18:52:32.488"
+    xmlns="http://www.ws-i.org/testing/2004/07/log/"
+    xmlns:wsi-monConfig="http://www.ws-i.org/testing/2004/07/monitorConfig/"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <monitor version="1.0" releaseDate="2003-03-20">
+    <implementer name="IBM" location=""/>
+    <environment>
+      <runtime name="Java(TM) 2 Runtime Environment, Standard Edition" version="1.4.2"/>
+      <operatingSystem name="Linux" version="2.6.15.1"/>
+      <xmlParser name="Apache Xerces" version="XML4J 4.3.6"/>
+    </environment>
+    <wsi-monConfig:configuration>
+    <wsi-monConfig:comment>Comment</wsi-monConfig:comment>
+      <wsi-monConfig:logFile replace="true" location="URL">
+      <wsi-monConfig:addStyleSheet href="null" type="null" />
+    </wsi-monConfig:logFile>
+      <wsi-monConfig:logDuration>600</wsi-monConfig:logDuration>
+      <wsi-monConfig:cleanupTimeoutSeconds>3</wsi-monConfig:cleanupTimeoutSeconds>
+      <wsi-monConfig:manInTheMiddle>
+      </wsi-monConfig:manInTheMiddle>
+    </wsi-monConfig:configuration>
+  </monitor>
+
+<messageEntry xsi:type="httpMessageEntry" ID="1" conversationID="1" type="request" timestamp="2006-04-13T18:51:30.193Z">
+<messageContent>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;&lt;soapenv:Body&gt;&lt;celsiusToFarenheit xmlns=&quot;http://wtp&quot;&gt;&lt;celsius&gt;37.0&lt;/celsius&gt;&lt;/celsiusToFarenheit&gt;&lt;/soapenv:Body&gt;&lt;soapenv:badChild/&gt;&lt;/soapenv:Envelope&gt;</messageContent>
+<senderHostAndPort>localhost:8185</senderHostAndPort>
+<receiverHostAndPort>localhost:8080</receiverHostAndPort>
+<httpHeaders>POST /ConverterProj/services/Converter HTTP/1.1&#xd;
+Content-Type: text/xml; charset=utf-8&#xd;
+Accept: application/soap+xml, application/dime, multipart/related, text/*&#xd;
+User-Agent: Axis/1.2.1&#xd;
+Host: localhost:8080&#xd;
+Cache-Control: no-cache&#xd;
+Pragma: no-cache&#xd;
+SOAPAction: &quot;&quot;&#xd;
+Content-Length: 344&#xd;
+&#xd;
+</httpHeaders>
+</messageEntry>
+</log>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/bugzilla/141966/testcase.xml b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/bugzilla/141966/testcase.xml
new file mode 100644
index 0000000..65281b0
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/messageLogs/bugzilla/141966/testcase.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testcase name="141966">
+  <description>
+    This is an example of a message log file that contains only a request and
+    breaks requirement 1011.
+  </description>
+  <expectedFailures>
+	<assertion id="BP1309" tadID="SSBP10"/>
+	<assertion id="BP1309" tadID="AP10"/>
+  </expectedFailures>
+</testcase>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/Encryption.wsdl b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/Encryption.wsdl
new file mode 100644
index 0000000..6b96364
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/Encryption.wsdl
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://main" xmlns:impl="http://main" xmlns:intf="http://main" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+  <schema targetNamespace="http://main" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+   <element name="incrementResponse">
+    <complexType>
+     <sequence>
+      <element name="incrementReturn" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+   <element name="increment">
+    <complexType>
+     <sequence>
+      <element name="value" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+  </schema>
+ </wsdl:types>
+
+   <wsdl:message name="incrementResponse">
+     <wsdl:part element="intf:incrementResponse" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:message name="incrementRequest">
+     <wsdl:part element="intf:increment" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:portType name="WebService">
+     <wsdl:operation name="increment">
+       <wsdl:input message="intf:incrementRequest" name="incrementRequest"/>
+
+       <wsdl:output message="intf:incrementResponse" name="incrementResponse"/>
+
+    </wsdl:operation>
+
+  </wsdl:portType>
+
+   <wsdl:binding name="WebServiceSoapBinding" type="intf:WebService">
+ <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
+
+     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+
+     <wsdl:operation name="increment">
+       <wsdlsoap:operation soapAction="increment"/>
+
+       <wsdl:input name="incrementRequest">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:input>
+
+       <wsdl:output name="incrementResponse">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+  </wsdl:binding>
+
+   <wsdl:service name="WebServiceService">
+     <wsdl:port binding="intf:WebServiceSoapBinding" name="WebService">
+       <wsdlsoap:address location="http://localhost:9080/WebProjectWithEncription/services/WebService"/>
+
+    </wsdl:port>
+
+  </wsdl:service>
+
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/NoSecurity.wsdl b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/NoSecurity.wsdl
new file mode 100644
index 0000000..6b96364
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/NoSecurity.wsdl
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://main" xmlns:impl="http://main" xmlns:intf="http://main" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+  <schema targetNamespace="http://main" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+   <element name="incrementResponse">
+    <complexType>
+     <sequence>
+      <element name="incrementReturn" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+   <element name="increment">
+    <complexType>
+     <sequence>
+      <element name="value" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+  </schema>
+ </wsdl:types>
+
+   <wsdl:message name="incrementResponse">
+     <wsdl:part element="intf:incrementResponse" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:message name="incrementRequest">
+     <wsdl:part element="intf:increment" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:portType name="WebService">
+     <wsdl:operation name="increment">
+       <wsdl:input message="intf:incrementRequest" name="incrementRequest"/>
+
+       <wsdl:output message="intf:incrementResponse" name="incrementResponse"/>
+
+    </wsdl:operation>
+
+  </wsdl:portType>
+
+   <wsdl:binding name="WebServiceSoapBinding" type="intf:WebService">
+ <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
+
+     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+
+     <wsdl:operation name="increment">
+       <wsdlsoap:operation soapAction="increment"/>
+
+       <wsdl:input name="incrementRequest">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:input>
+
+       <wsdl:output name="incrementResponse">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+  </wsdl:binding>
+
+   <wsdl:service name="WebServiceService">
+     <wsdl:port binding="intf:WebServiceSoapBinding" name="WebService">
+       <wsdlsoap:address location="http://localhost:9080/WebProjectWithEncription/services/WebService"/>
+
+    </wsdl:port>
+
+  </wsdl:service>
+
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/Signature.wsdl b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/Signature.wsdl
new file mode 100644
index 0000000..6b96364
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/Signature.wsdl
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://main" xmlns:impl="http://main" xmlns:intf="http://main" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+  <schema targetNamespace="http://main" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+   <element name="incrementResponse">
+    <complexType>
+     <sequence>
+      <element name="incrementReturn" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+   <element name="increment">
+    <complexType>
+     <sequence>
+      <element name="value" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+  </schema>
+ </wsdl:types>
+
+   <wsdl:message name="incrementResponse">
+     <wsdl:part element="intf:incrementResponse" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:message name="incrementRequest">
+     <wsdl:part element="intf:increment" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:portType name="WebService">
+     <wsdl:operation name="increment">
+       <wsdl:input message="intf:incrementRequest" name="incrementRequest"/>
+
+       <wsdl:output message="intf:incrementResponse" name="incrementResponse"/>
+
+    </wsdl:operation>
+
+  </wsdl:portType>
+
+   <wsdl:binding name="WebServiceSoapBinding" type="intf:WebService">
+ <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
+
+     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+
+     <wsdl:operation name="increment">
+       <wsdlsoap:operation soapAction="increment"/>
+
+       <wsdl:input name="incrementRequest">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:input>
+
+       <wsdl:output name="incrementResponse">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+  </wsdl:binding>
+
+   <wsdl:service name="WebServiceService">
+     <wsdl:port binding="intf:WebServiceSoapBinding" name="WebService">
+       <wsdlsoap:address location="http://localhost:9080/WebProjectWithEncription/services/WebService"/>
+
+    </wsdl:port>
+
+  </wsdl:service>
+
+</wsdl:definitions>
diff --git a/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/SignatureAndEncryption.wsdl b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/SignatureAndEncryption.wsdl
new file mode 100644
index 0000000..6b96364
--- /dev/null
+++ b/tests/org.eclipse.wst.wsi.tests/testResources/samples/wsdl/SecureWS/SignatureAndEncryption.wsdl
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://main" xmlns:impl="http://main" xmlns:intf="http://main" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+  <schema targetNamespace="http://main" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+   <element name="incrementResponse">
+    <complexType>
+     <sequence>
+      <element name="incrementReturn" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+   <element name="increment">
+    <complexType>
+     <sequence>
+      <element name="value" type="xsd:int"/>
+     </sequence>
+    </complexType>
+   </element>
+  </schema>
+ </wsdl:types>
+
+   <wsdl:message name="incrementResponse">
+     <wsdl:part element="intf:incrementResponse" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:message name="incrementRequest">
+     <wsdl:part element="intf:increment" name="parameters"/>
+
+  </wsdl:message>
+
+   <wsdl:portType name="WebService">
+     <wsdl:operation name="increment">
+       <wsdl:input message="intf:incrementRequest" name="incrementRequest"/>
+
+       <wsdl:output message="intf:incrementResponse" name="incrementResponse"/>
+
+    </wsdl:operation>
+
+  </wsdl:portType>
+
+   <wsdl:binding name="WebServiceSoapBinding" type="intf:WebService">
+ <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/>
+
+     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+
+     <wsdl:operation name="increment">
+       <wsdlsoap:operation soapAction="increment"/>
+
+       <wsdl:input name="incrementRequest">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:input>
+
+       <wsdl:output name="incrementResponse">
+         <wsdlsoap:body use="literal"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+  </wsdl:binding>
+
+   <wsdl:service name="WebServiceService">
+     <wsdl:port binding="intf:WebServiceSoapBinding" name="WebService">
+       <wsdlsoap:address location="http://localhost:9080/WebProjectWithEncription/services/WebService"/>
+
+    </wsdl:port>
+
+  </wsdl:service>
+
+</wsdl:definitions>