diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/codegen/javamofvisitoractions/JavaMofTypeVisitorAction.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/codegen/javamofvisitoractions/JavaMofTypeVisitorAction.java
index 88aa459..ff98fbe 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/codegen/javamofvisitoractions/JavaMofTypeVisitorAction.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/codegen/javamofvisitoractions/JavaMofTypeVisitorAction.java
@@ -1,23 +1,32 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 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
  * 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
+ * -------- -------- -----------------------------------------------------------
+ * 20070410   180952 makandre@ca.ibm.com - Andrew Mak, Sample JSP generator chokes on interfaces and abstract classes
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.codegen.javamofvisitoractions;
 
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jem.java.JavaClass;
 import org.eclipse.jem.java.JavaHelpers;
+import org.eclipse.jem.java.JavaVisibilityKind;
+import org.eclipse.jem.java.Method;
 import org.eclipse.jst.ws.internal.consumption.ConsumptionMessages;
 import org.eclipse.jst.ws.internal.consumption.codegen.javamofvisitors.JavaMofBeanVisitor;
 import org.eclipse.jst.ws.internal.consumption.datamodel.beanmodel.BeanModelElementsFactory;
+import org.eclipse.jst.ws.internal.consumption.datamodel.beanmodel.TypeElement;
 import org.eclipse.jst.ws.internal.consumption.datamodel.beanmodel.TypeFactory;
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
 import org.eclipse.wst.common.environment.Choice;
@@ -83,6 +92,13 @@
       {
 	      BeanModelElementsFactory.getBeanModelElement(typeNavigator,fParentElement);
 	    }
+	    else if (javaClass != null && !getReturnParam() &&
+				// the following cases cannot be instantiated for input
+				(javaClass.isInterface() || javaClass.isAbstract() || !hasDefaultConstructor(javaClass))) {
+	    	
+	    	Element element = BeanModelElementsFactory.getBeanModelElement(typeNavigator,fParentElement);
+	    	element.setPropertyAsObject(TypeElement.NON_INSTANTIABLE, Boolean.TRUE);
+	    }
 	    else{
 	      JavaMofBeanVisitorAction beanVisitorAction = new JavaMofBeanVisitorAction(fParentElement,clientProject, env_);
 	      beanVisitorAction.setStatusMonitor(getStatusMonitor());
@@ -111,4 +127,30 @@
      //
      return status;
    }
+
+  /**
+   * Determine if the given javaClass has a default constructor.
+   * @param javaClass The java class
+   * @return true if javaClass has a default constructor, false otherwise
+   */
+  private boolean hasDefaultConstructor(JavaClass javaClass) {
+	   
+	  List methods = javaClass.getMethods();
+	  Iterator iter = methods.iterator();
+	   
+	  boolean foundConstructor = false;
+	   
+	  while (iter.hasNext()) {
+		  Method method = (Method) iter.next();
+		   
+		  if (method.getName().equals(javaClass.getName())) {
+			  if (method.listParametersWithoutReturn().length == 0)
+				  return method.getJavaVisibility().getValue() == JavaVisibilityKind.PUBLIC;
+			  foundConstructor = true;
+		  }
+	  }
+	   
+	  // if no constructor is found at this point, a default one is implicitly provided
+	  return !foundConstructor;
+  }
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/datamodel/beanmodel/TypeElement.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/datamodel/beanmodel/TypeElement.java
index f1592f6..af80d7f 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/datamodel/beanmodel/TypeElement.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/datamodel/beanmodel/TypeElement.java
@@ -1,12 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 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
  * 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
+ * -------- -------- -----------------------------------------------------------
+ * 20070410   180952 makandre@ca.ibm.com - Andrew Mak, Sample JSP generator chokes on interfaces and abstract classes
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.datamodel.beanmodel;
@@ -24,7 +27,7 @@
 
   // Copyright
   public static final String copyright = "(c) Copyright IBM Corporation 2000, 2002.";
-
+  public static final String NON_INSTANTIABLE = "nonInstantiable";
 
   public static int BEAN = 0;
   public static int SIMPLE = 1;
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/InputFileTypeGenerator.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/InputFileTypeGenerator.java
index af2d94e..b03521e 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/InputFileTypeGenerator.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/InputFileTypeGenerator.java
@@ -10,6 +10,7 @@
  * yyyymmdd bug      Email and other contact information
  * -------- -------- -----------------------------------------------------------
  * 20060612   145433 gilberta@ca.ibm.com - Gilbert Andrews
+ * 20070410   180952 makandre@ca.ibm.com - Andrew Mak, Sample JSP generator chokes on interfaces and abstract classes 
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.sampleapp.codegen;
 
@@ -162,6 +163,9 @@
   {
      TypeElement element = (TypeElement)object;
           
+     if (Boolean.TRUE.equals(element.getPropertyAsObject(TypeElement.NON_INSTANTIABLE)))
+	    return Status.OK_STATUS;
+     
      if (element instanceof SimpleElement) fIsSimple = true;
      else fIsSimple = false;
 
diff --git a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/ResultFileTypeGenerator.java b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/ResultFileTypeGenerator.java
index f78cd59..dea6887 100644
--- a/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/ResultFileTypeGenerator.java
+++ b/bundles/org.eclipse.jst.ws.consumption/src/org/eclipse/jst/ws/internal/consumption/sampleapp/codegen/ResultFileTypeGenerator.java
@@ -1,12 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 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
  * 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
+ * -------- -------- -----------------------------------------------------------
+ * 20070410   180952 makandre@ca.ibm.com - Andrew Mak, Sample JSP generator chokes on interfaces and abstract classes
  *******************************************************************************/
 
 package org.eclipse.jst.ws.internal.consumption.sampleapp.codegen;
@@ -69,34 +72,40 @@
        String typeName = typeElement.getName(); 
        fTypeIdName = idName(typeName);
               
-       AttributeVisitor attributeVisitor = new AttributeVisitor();
-       ResultFileAttributeGenerator resultFileAttributeGenerator = new ResultFileAttributeGenerator(fbuffer);
-       resultFileAttributeGenerator.setNumberFactory(getNumberFactory());
-       attributeVisitor.run(typeElement,resultFileAttributeGenerator);
-       setNumberFactory(resultFileAttributeGenerator.getNumberFactory());
-       fbuffer = resultFileAttributeGenerator.getStringBuffer();
-
-       FieldVisitor fieldVisitor = new FieldVisitor();
-       ResultFileAttributeGenerator resultFileAttributeGenerator2 = new ResultFileAttributeGenerator(fbuffer);
-       resultFileAttributeGenerator2.setNumberFactory(getNumberFactory());
-       fieldVisitor.run(typeElement,resultFileAttributeGenerator2);
-       setNumberFactory(resultFileAttributeGenerator2.getNumberFactory());
-       fbuffer = resultFileAttributeGenerator2.getStringBuffer();
+       if (!Boolean.TRUE.equals(typeElement.getPropertyAsObject(TypeElement.NON_INSTANTIABLE))) {
+       
+	       AttributeVisitor attributeVisitor = new AttributeVisitor();
+	       ResultFileAttributeGenerator resultFileAttributeGenerator = new ResultFileAttributeGenerator(fbuffer);
+	       resultFileAttributeGenerator.setNumberFactory(getNumberFactory());
+	       attributeVisitor.run(typeElement,resultFileAttributeGenerator);
+	       setNumberFactory(resultFileAttributeGenerator.getNumberFactory());
+	       fbuffer = resultFileAttributeGenerator.getStringBuffer();
+	
+	       FieldVisitor fieldVisitor = new FieldVisitor();
+	       ResultFileAttributeGenerator resultFileAttributeGenerator2 = new ResultFileAttributeGenerator(fbuffer);
+	       resultFileAttributeGenerator2.setNumberFactory(getNumberFactory());
+	       fieldVisitor.run(typeElement,resultFileAttributeGenerator2);
+	       setNumberFactory(resultFileAttributeGenerator2.getNumberFactory());
+	       fbuffer = resultFileAttributeGenerator2.getStringBuffer();
 
       
-       fbuffer.append(Generator.DOUBLE_TAB + "%>" + StringUtils.NEWLINE);
-       fbuffer.append(Generator.DOUBLE_TAB + "<jsp:useBean id=\"" + fTypeIdName + "\" scope=\"session\" class=\"" + typeName + "\" />" + StringUtils.NEWLINE);
-       fbuffer.append(Generator.DOUBLE_TAB + "<%" + StringUtils.NEWLINE);
-         
-       Enumeration e = resultFileAttributeGenerator.getResidentVector().elements();
-       while(e.hasMoreElements()){
-          fbuffer.append(Generator.DOUBLE_TAB + fTypeIdName + "." + e.nextElement() + StringUtils.NEWLINE);
-       }
-
-       Enumeration e2 = resultFileAttributeGenerator2.getResidentVector().elements();
-       while(e2.hasMoreElements()){
-          fbuffer.append(Generator.DOUBLE_TAB + fTypeIdName + "." + e2.nextElement() + StringUtils.NEWLINE);
-       } 
+	       fbuffer.append(Generator.DOUBLE_TAB + "%>" + StringUtils.NEWLINE);
+	       fbuffer.append(Generator.DOUBLE_TAB + "<jsp:useBean id=\"" + fTypeIdName + "\" scope=\"session\" class=\"" + typeName + "\" />" + StringUtils.NEWLINE);
+	       fbuffer.append(Generator.DOUBLE_TAB + "<%" + StringUtils.NEWLINE);
+	       
+	       Enumeration e = resultFileAttributeGenerator.getResidentVector().elements();
+	       while(e.hasMoreElements()){
+	          fbuffer.append(Generator.DOUBLE_TAB + fTypeIdName + "." + e.nextElement() + StringUtils.NEWLINE);
+	       }
+	
+	       Enumeration e2 = resultFileAttributeGenerator2.getResidentVector().elements();
+	       while(e2.hasMoreElements()){
+	          fbuffer.append(Generator.DOUBLE_TAB + fTypeIdName + "." + e2.nextElement() + StringUtils.NEWLINE);
+	       } 
+	   }
+       else
+    	   fbuffer.append(Generator.DOUBLE_TAB + typeName + " " + fTypeIdName + " = null;"+ StringUtils.NEWLINE);     
+       
        putResidentVector(fTypeIdName);
        //end of changes
      
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/fragment/XSDElementDeclarationToFragmentMapper.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/fragment/XSDElementDeclarationToFragmentMapper.java
index 939623b..7f4d6a0 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/fragment/XSDElementDeclarationToFragmentMapper.java
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/fragment/XSDElementDeclarationToFragmentMapper.java
@@ -1,12 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2004 IBM Corporation and others.
+ * Copyright (c) 2002, 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
+ * -------- -------- -----------------------------------------------------------
+ * 20070404   181065 makandre@ca.ibm.com - Andrew Mak, WSE does not handle types referenced across inline schemas
  *******************************************************************************/
 package org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment;
 
@@ -29,7 +32,7 @@
     XSDElementDeclaration element = (XSDElementDeclaration)config.getXSDComponent();
     if (element != null) {
       XSDElementDeclaration resolvedElement = resolveXSDElementDeclaration(element);
-      XSDTypeDefinition typeDef = getXSDTypeDefinition(resolvedElement);
+      XSDTypeDefinition typeDef = resolveXSDTypeDefinition(getXSDTypeDefinition(resolvedElement));
       if (typeDef != null) {
         int minOccurs = FragmentConstants.DEFAULT_MIN_OCCURS;
         int maxOccurs = FragmentConstants.DEFAULT_MAX_OCCURS;
@@ -76,6 +79,17 @@
     else
       return element;
   }
+  
+  private XSDTypeDefinition resolveXSDTypeDefinition(XSDTypeDefinition typeDef) {
+	  
+	  if (!isComponentResolvable(typeDef)) {
+		  XSDComponent resolvedComponent = getWSDLPartsToXSDTypeMapper().resolveXSDNamedComponent(typeDef);
+		  if (resolvedComponent instanceof XSDTypeDefinition)
+			  return (XSDTypeDefinition) resolvedComponent;
+	  }
+	  
+	  return typeDef;
+  }
 
   private XSDTypeDefinition getXSDTypeDefinition(XSDElementDeclaration element) {
     // port to org.eclipse.xsd
