Index: META-INF/MANIFEST.MF
===================================================================
--- META-INF/MANIFEST.MF	(revision 23085)
+++ META-INF/MANIFEST.MF	(working copy)
@@ -29,7 +29,8 @@
  org.eclipse.wst.internet.monitor.core,
  org.eclipse.wst.internet.monitor.ui,
  javax.wsdl;bundle-version="1.6.2",
- org.jdom
+ org.jdom,
+ javax.xml.ws
 Bundle-ActivationPolicy: lazy
 Export-Package: org.jboss.tools.ws.ui,
  org.jboss.tools.ws.ui.messages,
Index: src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties
===================================================================
--- src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties	(revision 23085)
+++ src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties	(working copy)
@@ -2,8 +2,6 @@
 Command=wsconsume.sh
 Bin=bin
 Client=client
-DelimitedStringList_NO_COMMAS_WARNING=There are no commas delimiting the name and value for this key/value pair.
-DelimitedStringList_NO_EQUALS_DELIMITER_WARNING=Parameters should be in 'name=value' format.
 Lib=lib
 Endorsed=endorsed
 # END NON-TRANSLATABLE
@@ -124,3 +122,11 @@
 WSDLBrowseDialog_WSDL_URI_Field=WSDL URI:
 WSDLBrowseDialog_WSDL_URL_Dialog_Title=WSDL URL
 WSDLBrowseDialog_WSDL_URL_Prompt=Type the URL for the WSDL:
+DelimitedStringList_Msg_No_Btn=No
+DelimitedStringList_Msg_Text_ParseByAmpersand=Should we parse the string to be added by ampersands '&&' and add each individual string?
+DelimitedStringList_Msg_Text_ParseByComma=Should we parse the string to be added by commas ',' and add each individual string?
+DelimitedStringList_Msg_Title_ParseByAmpersand=Parse String by '&'?
+DelimitedStringList_Msg_Title_ParseByComma=Parse String by ','?
+DelimitedStringList_Msg_Yes_Btn=Yes
+DelimitedStringList_NO_COMMAS_WARNING=There are no commas delimiting the name and value for this key/value pair.
+DelimitedStringList_NO_EQUALS_DELIMITER_WARNING=Parameters should be in 'name=value' format.
Index: src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java
===================================================================
--- src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java	(revision 23085)
+++ src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java	(working copy)
@@ -27,6 +27,12 @@
 	public static String Bin;
 	public static String Command;
 	public static String Client;
+	public static String DelimitedStringList_Msg_No_Btn;
+	public static String DelimitedStringList_Msg_Text_ParseByAmpersand;
+	public static String DelimitedStringList_Msg_Text_ParseByComma;
+	public static String DelimitedStringList_Msg_Title_ParseByAmpersand;
+	public static String DelimitedStringList_Msg_Title_ParseByComma;
+	public static String DelimitedStringList_Msg_Yes_Btn;
 	public static String DelimitedStringList_NO_COMMAS_WARNING;
 	public static String DelimitedStringList_NO_EQUALS_DELIMITER_WARNING;
 	public static String Lib;
Index: src/org/jboss/tools/ws/ui/views/DelimitedStringList.java
===================================================================
--- src/org/jboss/tools/ws/ui/views/DelimitedStringList.java	(revision 23085)
+++ src/org/jboss/tools/ws/ui/views/DelimitedStringList.java	(working copy)
@@ -16,6 +16,7 @@
 
 import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
@@ -245,11 +246,42 @@
 	 */
 	private void addStringToList() {
 		if (this.mAddText.getText().length() > 0) {
-			this.mPropsList.add(this.mAddText.getText().trim());
+			String text = this.mAddText.getText().trim();
+			if (text.indexOf('&') > -1) {
+				MessageDialog dialog = new MessageDialog(
+						null, JBossWSUIMessages.DelimitedStringList_Msg_Title_ParseByAmpersand, null, 
+						JBossWSUIMessages.DelimitedStringList_Msg_Text_ParseByAmpersand,
+						MessageDialog.QUESTION,
+						new String[] {JBossWSUIMessages.DelimitedStringList_Msg_Yes_Btn, JBossWSUIMessages.DelimitedStringList_Msg_No_Btn},
+						0); // yes is the default
+				int result = dialog.open();
+				if (result == 0) {
+					String[] parsed = parseString(text, "&"); //$NON-NLS-1$
+					for (int i = 0; i < parsed.length; i++) {
+						this.mPropsList.add(parsed[i]);
+					}
+				}
+			} else if (text.indexOf(',') > -1) {
+					MessageDialog dialog = new MessageDialog(
+							null, JBossWSUIMessages.DelimitedStringList_Msg_Title_ParseByComma, null, 
+							JBossWSUIMessages.DelimitedStringList_Msg_Text_ParseByComma,
+							MessageDialog.QUESTION,
+							new String[] {JBossWSUIMessages.DelimitedStringList_Msg_Yes_Btn, JBossWSUIMessages.DelimitedStringList_Msg_No_Btn},
+							0); // yes is the default
+					int result = dialog.open();
+					if (result == 0) {
+						String[] parsed = parseString(text, ","); //$NON-NLS-1$
+						for (int i = 0; i < parsed.length; i++) {
+							this.mPropsList.add(parsed[i]);
+						}
+					}
+			} else {
+				this.mPropsList.add(text);
+			}
 			if (!isReadOnly){
 				this.mClearAllButton.setEnabled(true);
 			}
-			this.mAddText.setSelection(0, this.mAddText.getText().length());
+			this.mAddText.setSelection(0, text.length());
 			this.mAddText.setFocus();
 		}
 	}
@@ -431,11 +463,11 @@
 	}
 
 	private boolean validateText(String text) {
-		if (text != null && text.trim().length() > 0 && text.indexOf(",") > -1) { //$NON-NLS-1$
-			this.mWarning = JBossWSUIMessages.DelimitedStringList_NO_COMMAS_WARNING;
-			return false;
-		}
-		else if (text != null && text.trim().length() > 0 && text.indexOf("=") == -1) { //$NON-NLS-1$
+//		if (text != null && text.trim().length() > 0 && text.indexOf(",") > -1) { //$NON-NLS-1$
+//			this.mWarning = JBossWSUIMessages.DelimitedStringList_NO_COMMAS_WARNING;
+//			return false;
+//		}
+		/*else*/ if (text != null && text.trim().length() > 0 && text.indexOf("=") == -1) { //$NON-NLS-1$
 			this.mWarning = JBossWSUIMessages.DelimitedStringList_NO_EQUALS_DELIMITER_WARNING;
 			return false;
 		}
Index: src/org/jboss/tools/ws/ui/views/WSDLBrowseDialog.java
===================================================================
--- src/org/jboss/tools/ws/ui/views/WSDLBrowseDialog.java	(revision 23085)
+++ src/org/jboss/tools/ws/ui/views/WSDLBrowseDialog.java	(working copy)
@@ -223,7 +223,7 @@
 							IFile resource = (IFile) objects[0];
 							File tempFile = new File(resource.getRawLocationURI());
 							try {
-								URL testURL = tempFile.toURL();
+								URL testURL = tempFile.toURI().toURL();
 								locationCombo.setText(testURL.toExternalForm());
 								wsdlDefinition =
 									TesterWSDLUtils.readWSDLURL(testURL);
@@ -265,7 +265,7 @@
 				if (fileText != null){
 					File tempFile = new File(fileText);
 					try {
-						URL testURL = tempFile.toURL();
+						URL testURL = tempFile.toURI().toURL();
 						locationCombo.setText(testURL.toExternalForm());
 						wsdlDefinition =
 							TesterWSDLUtils.readWSDLURL(testURL);
Index: src/org/jboss/tools/ws/ui/views/JAXRSWSTestView.java
===================================================================
--- src/org/jboss/tools/ws/ui/views/JAXRSWSTestView.java	(revision 23085)
+++ src/org/jboss/tools/ws/ui/views/JAXRSWSTestView.java	(working copy)
@@ -18,9 +18,11 @@
 import java.util.Map.Entry;
 
 import javax.wsdl.Definition;
+import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
 
+import org.apache.axis.utils.XMLUtils;
 import org.eclipse.core.resources.IStorage;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -70,11 +72,12 @@
 import org.jboss.tools.ws.ui.JBossWSUIPlugin;
 import org.jboss.tools.ws.ui.messages.JBossWSUIMessages;
 import org.jboss.tools.ws.ui.utils.JAXRSTester;
-import org.jboss.tools.ws.ui.utils.JAXWSTester;
+import org.jboss.tools.ws.ui.utils.JAXWSTester2;
 import org.jboss.tools.ws.ui.utils.ResultsXMLStorage;
 import org.jboss.tools.ws.ui.utils.ResultsXMLStorageInput;
 import org.jboss.tools.ws.ui.utils.TesterWSDLUtils;
 import org.jboss.tools.ws.ui.utils.WSTestUtils;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -128,6 +131,7 @@
 	private Button addTCPIPMonitorButton;
 
 	private SOAPEnvelope envelope;
+	private SOAPBody soapbody;
 	private MenuItem openInXMLEditorAction;
 	private MenuItem openResponseTagInXMLEditor;
 	private Menu resultsTextMenu;
@@ -136,6 +140,7 @@
 	private MenuItem copyResultHeaderMenuAction;
 	
 	private boolean showSampleButton = false;
+	private String[] serviceNSMessage = null;
 
 	/**
 	 * The constructor.
@@ -287,6 +292,7 @@
 				WSDLBrowseDialog wbDialog =  new WSDLBrowseDialog(getSite().getShell());
 				int rtnCode = wbDialog.open();
 				if (rtnCode == Window.OK){
+					serviceNSMessage = null;
 					Definition wsdlDef = wbDialog.getWSDLDefinition();
 					String output = TesterWSDLUtils.getSampleSOAPInputMessage(wsdlDef, 
 							wbDialog.getServiceTextValue(), 
@@ -303,6 +309,11 @@
 							wbDialog.getPortTextValue(), 
 							wbDialog.getBindingValue(), 
 							wbDialog.getOperationTextValue());
+					serviceNSMessage = TesterWSDLUtils.getNSServiceNameAndMessageNameArray(wsdlDef, 
+							wbDialog.getServiceTextValue(), 
+							wbDialog.getPortTextValue(), 
+							wbDialog.getBindingValue(), 
+							wbDialog.getOperationTextValue());
 					String soapIn = generateSampleSOAP(output);
 					bodyText.setText(soapIn);
 					urlCombo.setText(endpointURL);
@@ -408,35 +419,41 @@
 
 			public void widgetSelected(SelectionEvent arg0) {
 				String string = null;
-				if (envelope != null){
-					try {
-						NodeList list = envelope.getBody().getChildNodes();
-						for (int i = 0; i< list.getLength(); i++){
-							Node node = list.item(i);
-							if (node.getNodeName().contains("Response")){ //$NON-NLS-1$
-								NodeList list2 = node.getChildNodes();
-								for (int j = 0; j<list2.getLength(); j++){
-									Node node2 = list2.item(j);
-									if (node2.getNodeName().contains("Result")){ //$NON-NLS-1$
-										Node node3 = node2.getChildNodes().item(0);
-										if (node3.getNodeType() == Node.TEXT_NODE) {
-											string = node3.getNodeValue();
-											break;
-										} else if (node3.getNodeType() == Node.ELEMENT_NODE) {
-											string = node2.toString();
-											break;
-										}
+				try {
+					SOAPBody body = null;
+					if (envelope != null){
+						body = envelope.getBody();
+					} else if (soapbody != null) {
+						body = soapbody;
+					}
+
+					NodeList list = body.getChildNodes();
+					for (int i = 0; i< list.getLength(); i++){
+						Node node = list.item(i);
+						if (node.getNodeName().contains("Response")){ //$NON-NLS-1$
+							NodeList list2 = node.getChildNodes();
+							for (int j = 0; j<list2.getLength(); j++){
+								Node node2 = list2.item(j);
+								if (node2.getNodeName().contains("Result")){ //$NON-NLS-1$
+									Node node3 = node2.getChildNodes().item(0);
+									if (node3.getNodeType() == Node.TEXT_NODE) {
+										string = node3.getNodeValue();
+										break;
+									} else if (node3.getNodeType() == Node.ELEMENT_NODE) {
+										Element element = (Element) node3;
+										string = XMLUtils.ElementToString(element);
+										break;
 									}
 								}
-								if (string != null) break;
 							}
-						}
-						if (string != null){
-							openXMLEditor(string);
+							if (string != null) break;
 						}
-					} catch (SOAPException e) {
-						JBossWSUIPlugin.log(e);
 					}
+					if (string != null){
+						openXMLEditor(string);
+					}
+				} catch (SOAPException e) {
+					JBossWSUIPlugin.log(e);
 				}
 			}
 
@@ -833,12 +850,16 @@
 		try {
 
 			envelope = null;
+			soapbody = null;
 			monitor.worked(10);
-			JAXWSTester tester = new JAXWSTester();
-			tester.doTest(url, action, body);
+//			JAXWSTester tester = new JAXWSTester();
+//			tester.doTest(url, action, body);
+			JAXWSTester2 tester = new JAXWSTester2();
+			tester.doTest(url, action, serviceNSMessage[0], serviceNSMessage[1], serviceNSMessage[2], body);
 			monitor.worked(70);
 			String result = tester.getResultBody();
 			envelope = tester.getResultSOAP();
+			soapbody = tester.getResultSOAPBody();
 			String cleanedUp = WSTestUtils.addNLsToXML(result);
 
 			WSTestStatus status = new WSTestStatus(IStatus.OK, 
Index: src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java
===================================================================
--- src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java	(revision 0)
+++ src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java	(revision 0)
@@ -0,0 +1,113 @@
+/******************************************************************************* 
+ * Copyright (c) 2010 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is 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: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
+package org.jboss.tools.ws.ui.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.net.URL;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+import javax.xml.ws.Service.Mode;
+import javax.xml.ws.handler.MessageContext;
+
+import org.apache.axis.message.SOAPEnvelope;
+
+/**
+ * Test a JAX-WS web service using the JAX-WS API
+ * @author bfitzpat
+ *
+ */
+public class JAXWSTester2 {
+
+	// the response message to pass back
+	private String resultBody;
+	
+	private SOAPEnvelope resultSOAP;
+	
+	private SOAPBody resultSOAPBody;
+	
+	// the result HTTP headers to pass back
+	private Map<String, String> resultHeaders;
+	
+	// utility constant
+	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+	/**
+	 * Return the response message
+	 * @return 
+	 */
+	public String getResultBody() {
+		return this.resultBody;
+	}
+	
+	public SOAPBody getResultSOAPBody() {
+		return this.resultSOAPBody;
+	}
+	
+	/**
+	 * Return a map of HTTP headers from the response
+	 * @return
+	 */
+	public Map<String, String> getResultHeaders() {
+		return this.resultHeaders;
+	}
+	
+	public SOAPEnvelope getResultSOAP(){
+		return this.resultSOAP;
+	}
+	
+	/**
+	 * Invoke the JAX-WS service
+	 * @param endpointurl
+	 * @param actionurl
+	 * @param body
+	 * @throws Exception
+	 */
+	@SuppressWarnings("unchecked")
+	public void doTest( String endpointurl, String actionurl, String ns, 
+			String serviceName, String messageName, String body ) throws Exception {
+		
+		this.resultBody = EMPTY_STRING;
+
+		URL serviceURL = new URL (endpointurl); //"http://www.ecubicle.net/gsearch_rss.asmx"
+		QName serviceQName = new QName (ns, serviceName); // "http://www.ecubicle.net/webservices", "gsearch_rss"
+		Service s = Service.create(serviceURL, serviceQName);
+		
+		QName messageQName = new QName(ns, messageName); //"http://www.ecubicle.net/webservices", "gsearch_rssSoap"
+		Dispatch<SOAPMessage> d = s.createDispatch(messageQName, SOAPMessage.class, Mode.MESSAGE);
+		d.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, actionurl); //"http://www.ecubicle.net/webservices/GetSearchResults");
+		
+		MessageFactory mf = MessageFactory.newInstance();
+		SOAPMessage m = mf.createMessage( null, new ByteArrayInputStream(body.getBytes()));
+		m.saveChanges();
+		
+		SOAPMessage o = d.invoke(m);
+		
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		o.writeTo(baos);
+		this.resultBody = baos.toString();
+		this.resultSOAPBody = o.getSOAPBody();
+		
+		if (d.getResponseContext() != null) {
+			Object responseHeaders = d.getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS);
+			if ( responseHeaders != null && responseHeaders instanceof Map) {
+				this.resultHeaders = (Map<String, String>) responseHeaders;
+			}
+		}
+	}
+}
Index: src/org/jboss/tools/ws/ui/utils/TesterWSDLUtils.java
===================================================================
--- src/org/jboss/tools/ws/ui/utils/TesterWSDLUtils.java	(revision 23085)
+++ src/org/jboss/tools/ws/ui/utils/TesterWSDLUtils.java	(working copy)
@@ -141,6 +141,12 @@
 							if (opName != null && operation.getName().contentEquals(opName)) {
 								Message inputMsg = operation.getInput().getMessage();
 								Collection<?> parts = inputMsg.getParts().values();
+								StringBuffer buf = new StringBuffer();
+								if (parts.size() > 1) {
+									buf.append('<' + operation.getName());
+									buf.append(" xmlns = \"" + ns + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+									buf.append(">\n"); //$NON-NLS-1$
+								}
 								for( Iterator<?> it4 = parts.iterator(); it4.hasNext(); ) {
 									Part part = (Part) it4.next();
 									String schemaName = null;
@@ -149,9 +155,54 @@
 									} else {
 										schemaName = part.getName();
 									}
-									String out = createMessageForSchemaElement(wsdlDefinition, schemaName, ns);
-									return out;
+									if (parts.size() > 1) {
+										if (part != null && part.getTypeName() != null && !part.getTypeName().getNamespaceURI().
+												equalsIgnoreCase("http://www.w3.org/2001/XMLSchema")) { //$NON-NLS-1$
+											buf.append(createMessageForSchemaElement(wsdlDefinition, part.getName(), part.getTypeName().getLocalPart(), ns));
+										} else {
+											buf.append('<' + part.getName());
+	//										buf.append(" xmlns = \"" + ns + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+											buf.append(">?"); //$NON-NLS-1$
+											buf.append("</" + part.getName() + ">\n");//$NON-NLS-1$//$NON-NLS-2$
+										}
+									} else {
+										String partName = part.getName();
+										if (parts.size() == 1) partName = null;
+										String out = createMessageForSchemaElement(wsdlDefinition, partName, schemaName, ns);
+										return out;
+									}
 								}
+								return buf.toString();
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+	
+	public static String[] getNSServiceNameAndMessageNameArray (Definition wsdlDefinition, String serviceName, String portName, String bindingName, String opName ) {
+		Map<?, ?> services = wsdlDefinition.getServices();
+		Set<?> serviceKeys = services.keySet();
+		for( Iterator<?> it = serviceKeys.iterator(); it.hasNext(); ) {
+			QName serviceKey = (QName) it.next();
+			if (serviceName != null && serviceKey.getLocalPart().contentEquals(serviceName)) {
+				Service service = (Service) services.get( serviceKey );
+				Map<?, ?> ports = service.getPorts();
+				Set<?> portKeys = ports.keySet();
+				for( Iterator<?> it2 = portKeys.iterator(); it2.hasNext(); ) {
+					String portKey = (String) it2.next();
+					if (portName != null && portKey.contentEquals(portName)) {
+						Port port = (Port) ports.get( portKey );
+						Binding wsdlBinding = port.getBinding();
+						PortType portType = wsdlBinding.getPortType();
+						String ns = portType.getQName().getNamespaceURI();
+						List<?> operations = portType.getOperations();
+						for (Iterator<?> it3 = operations.iterator(); it3.hasNext();){
+							Operation operation = (Operation) it3.next();
+							if (opName != null && operation.getName().contentEquals(opName)) {
+								return new String[] {ns, serviceName, portName};
 							}
 						}
 					}
@@ -317,7 +368,7 @@
 		return null;
 	}
 	
-	private static String createMessageForSchemaElementFromTypes ( Definition wsdlDefinition, Types types, String messageName, String namespace ) {
+	private static String createMessageForSchemaElementFromTypes ( Definition wsdlDefinition, Types types, String partName, String messageName, String namespace ) {
 		if (types != null &&types.getExtensibilityElements().size() > 0) {
 			Schema schema = (Schema) types.getExtensibilityElements().get(0);
 			DOMBuilder domBuilder = new DOMBuilder();
@@ -377,10 +428,27 @@
 						
 						if (rootName.equalsIgnoreCase(messageName)) {
 							StringBuffer buf = new StringBuffer();
-							buf.append('<' + rootName);
-							buf.append(" xmlns = \"" + namespace + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+							buf.append('<');
+							if (partName != null) {
+								buf.append(partName);
+							}
+							else {
+								buf.append(rootName);
+								buf.append(" xmlns = \"" + namespace + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+							}
 							buf.append(">\n"); //$NON-NLS-1$
-							if (!temp.getChildren().isEmpty()){
+							if (temp.getChildren().isEmpty()) {
+								String nstemp = namespace;
+								String typeName = temp.getAttributeValue(TYPE_ATTR);
+								String prefix = null;
+								if (typeName.indexOf(':') > 0) {
+									prefix = typeName.substring(0, typeName.indexOf(':'));
+									nstemp = temp.getNamespace(prefix).getURI();
+									typeName = typeName.substring(typeName.indexOf(':') + 1, typeName.length());
+								}
+								temp = getNodeFromSchema(temp.getParentElement(), typeName, nstemp, prefix);
+							}
+							if (temp != null && !temp.getChildren().isEmpty()){
 								org.jdom.Element temp2 = (org.jdom.Element)temp.getChildren().get(0);
 								if (temp2.getName().contains(COMPLEX_TYPE_NAME)) {
 									String elementStr = processComplexType(wsdlDefinition, temp2);
@@ -390,8 +458,32 @@
 									buf.append(elementStr);
 								}
 							}
-							buf.append("</" + rootName + ">\n");//$NON-NLS-1$//$NON-NLS-2$
+							buf.append("</");//$NON-NLS-1$
+							if (partName != null)
+								buf.append(partName);
+							else
+								buf.append(rootName);
+							buf.append(">\n");//$NON-NLS-1$
 							return buf.toString();
+						} else {
+							Message msg = wsdlDefinition.getMessage(new QName(namespace, messageName));
+							if (msg != null) {
+								StringBuffer buf = new StringBuffer();
+								buf.append('<');
+								if (partName != null)
+									buf.append(partName);
+								else
+									buf.append(rootName);
+								buf.append(" xmlns = \"" + namespace + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+								buf.append(">?"); //$NON-NLS-1$
+								buf.append("</");//$NON-NLS-1$
+								if (partName != null)
+									buf.append(partName);
+								else
+									buf.append(rootName);
+								buf.append(">\n");//$NON-NLS-1$
+								return buf.toString();
+							}
 						}
 					}
 				}
@@ -400,6 +492,25 @@
 		return null;
 	}
 	
+	private static org.jdom.Element getNodeFromSchema ( org.jdom.Element root, String name, String ns, String prefix) {
+		if (root != null) {
+			List<?> childList = root.getChildren();
+			Iterator<?> iter1 = childList.iterator();
+			while (iter1.hasNext()) {
+				Object test = iter1.next();
+				if (test instanceof org.jdom.Element) {
+					org.jdom.Element childEl = (org.jdom.Element) test;
+					if (childEl.getAttributeValue(NAME_ATTR, ns).equalsIgnoreCase(name)) {
+						String typeName = childEl.getAttributeValue(TYPE_ATTR);
+						if (typeName == null || !typeName.equalsIgnoreCase(prefix + ':' + name)) 
+							return childEl;
+					}
+				}
+			}
+		}
+		return null;
+	}
+	
 	private static String processComplexType (Definition wsdlDefinition, org.jdom.Element childEl ) {
         StringBuffer buf = new StringBuffer();
 		if (!childEl.getChildren().isEmpty()) {
@@ -426,11 +537,6 @@
 			buf.append("?"); //$NON-NLS-1$
 		} else if (type.contains(SIMPLE_TYPE_NAME)) {
 			buf.append("?"); //$NON-NLS-1$
-//			for (int j = 0; j < childEl.getChildren().size(); j++) {
-//				org.jdom.Element tempEl = (org.jdom.Element) childEl.getChildren().get(j); 
-//				String elementStr = processChild(wsdlDefinition, tempEl);
-//				buf.append(elementStr);
-//			}
 		} else if (type.contains(RESTRICTION_NAME)) {
 			for (int j = 0; j < childEl.getChildren().size(); j++) {
 				org.jdom.Element tempEl = (org.jdom.Element) childEl.getChildren().get(j); 
@@ -510,7 +616,7 @@
 		return buf.toString();
 	}
 
-	public static String createMessageForSchemaElement ( Definition wsdlDefinition, String messageName, String namespace ) {
+	public static String createMessageForSchemaElement ( Definition wsdlDefinition, String partName, String messageName, String namespace ) {
 		Types types = wsdlDefinition.getTypes();
 		if (types == null) {
 			Map<?, ?> imports = wsdlDefinition.getImports();
@@ -523,18 +629,18 @@
 					Import importInstance = (Import) iter.next();
 					if (importInstance.getDefinition().getTypes() != null) {
 						types = importInstance.getDefinition().getTypes();
-						String attempt = createMessageForSchemaElementFromTypes(wsdlDefinition, types, messageName, namespace);
+						String attempt = createMessageForSchemaElementFromTypes(wsdlDefinition, types, partName, messageName, namespace);
 						if (attempt != null)
 							return attempt;
 					} else if (importInstance.getDefinition().getImports() != null) {
-						String attempt = createMessageForSchemaElement(importInstance.getDefinition(), messageName, namespace);
+						String attempt = createMessageForSchemaElement(importInstance.getDefinition(), partName, messageName, namespace);
 						if (attempt != null)
 							return attempt;
 					}
 				}
 			}
 		} else {
-			String attempt = createMessageForSchemaElementFromTypes(wsdlDefinition, types, messageName, namespace);
+			String attempt = createMessageForSchemaElementFromTypes(wsdlDefinition, types, partName, messageName, namespace);
 			if (attempt != null)
 				return attempt;
 		}
