Author: slaws
Date: Thu Jan 19 14:33:20 2012
New Revision: 1233402

URL: http://svn.apache.org/viewvc?rev=1233402&view=rev
Log:
TUSCANY-3283 - these are similar changes to those made in 1.x to correct WSDL 
gen in various areas including, generating unannotated types into the service 
interface namespace, making wrapper parameters generally non-nillable, using 
JAXB to generate wrapper XSD (which fixes other failures where our code doesn't 
support various JAXB annotations), correcting the namespace of generated 
exceptions and the way that the generated classes are cached. Fixing the WSDL 
requires other fixes, for example, a new databinding to force ServiceReference 
to map to anyType (so that we don't try and process these interfaces with JAXB) 
and a fix to correct the order of response holders. T

Added:
    
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/
    
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceDataBinding.java
    
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceTypeHelper.java
Modified:
    
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
    
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/test/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGeneratorTestCase.java
    
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
    
tuscany/sca-java-2.x/trunk/modules/databinding-axiom/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
    
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java
    
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
    
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
    tuscany/sca-java-2.x/trunk/testing/itest/ws/pom.xml

Modified: 
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
 Thu Jan 19 14:33:20 2012
@@ -25,8 +25,10 @@ import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Level;
@@ -50,6 +52,12 @@ import javax.xml.bind.annotation.XmlSeeA
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
 
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.databinding.DataBinding;
@@ -77,8 +85,16 @@ import org.apache.tuscany.sca.xsd.XSDFac
 import org.apache.tuscany.sca.xsd.XSDefinition;
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaComplexType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaException;
+import org.apache.ws.commons.schema.XmlSchemaGroupBase;
+import org.apache.ws.commons.schema.XmlSchemaImport;
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.XmlSchemaObjectCollection;
+import 
org.apache.ws.commons.schema.XmlSchemaSerializer.XmlSchemaSerializerException;
 import org.apache.ws.commons.schema.utils.NamespaceMap;
+import org.oasisopen.sca.ServiceRuntimeException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -199,11 +215,17 @@ public class Interface2WSDLGenerator {
     }
     
     private boolean outputTypeCompatible(DataType wrapperType, DataType 
outputType, Map<String, XMLTypeHelper> helpers) {
+        // TUSCANY-3283 - use same algorithm as input types as we now support 
+        //                multiple output values so the real output types will 
+        //                be wrapped in an "idl:output" data type
+        /*
         if (getTypeHelper(outputType, helpers) != getTypeHelper(wrapperType, 
helpers)) {
             return false;
         } else {
             return true;
         }
+        */
+        return inputTypesCompatible(wrapperType, outputType, helpers);
     }
     
     private void addDataType(Map<XMLTypeHelper, List<DataType>> map, DataType 
type, Map<String, XMLTypeHelper> helpers) {
@@ -349,19 +371,26 @@ public class Interface2WSDLGenerator {
         wsdlDefinition.setBinding(binding);
 
         // call each helper in turn to populate the wsdl.types element
-        XmlSchemaCollection schemaCollection = new XmlSchemaCollection(); 
+        XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
 
-        for (Map.Entry<XMLTypeHelper, List<DataType>> en: 
getDataTypes(interfaze, false, helpers).entrySet()) {
+        // TUSCANY-3283 - "true" here means also generate the include the 
wrapper types for xsd generation using JAXB
+        Map<XMLTypeHelper, List<DataType>> dataTypes = getDataTypes(interfaze, 
true, helpers);
+        for (Map.Entry<XMLTypeHelper, List<DataType>> en: 
dataTypes.entrySet()) {
             XMLTypeHelper helper = en.getKey();
             if (helper == null) {
                 continue;
             }
             List<XSDefinition> xsDefinitions = 
helper.getSchemaDefinitions(xsdFactory, resolver, en.getValue());
+            
+            // TUSCANY-3283 - move the nonamespace types into the namespace of 
the interface
+            //                as per JAXWS
+            mergeNoNamespaceSchema(namespaceURI, xsDefinitions);
+            
             for (XSDefinition xsDef: xsDefinitions) {
                 addSchemaExtension(xsDef, schemaCollection, wsdlDefinition, 
definition);
             }
         }
-
+        
         // remove global wrapper elements with schema definitions from 
generation list
         for (QName wrapperName: new HashSet<QName>(wrappers.keySet())) {
             if (wsdlDefinition.getXmlSchemaElement(wrapperName) != null) {
@@ -370,6 +399,8 @@ public class Interface2WSDLGenerator {
         }
 
         // generate schema elements for wrappers that aren't defined in the 
schemas
+        // TUSCANY-3283 - as we're generating wrappers with JAXB it won't 
+        //                go through here for all wrappers???
         if (wrappers.size() > 0) {
             int i = 0;
             int index = 0;
@@ -384,25 +415,44 @@ public class Interface2WSDLGenerator {
                     schemaDoc = xsDef.getDocument();
                     schema = schemaDoc.getDocumentElement();
                 } else {
-                    schemaDoc = createDocument();
-                    schema = schemaDoc.createElementNS(SCHEMA_NS, "xs:schema");
-                    // The elementFormDefault should be set to unqualified, 
see TUSCANY-2388
-                    schema.setAttribute("elementFormDefault", "unqualified");
-                    schema.setAttribute("attributeFormDefault", "qualified");
-                    schema.setAttribute("targetNamespace", targetNS);
-                    schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
-                    schemaDoc.appendChild(schema);
-                    Schema schemaExt = createSchemaExt(definition);
-                    schemaExt.setElement(schema);
-                    prefixMaps.put(schema, new HashMap<String, String>());
-                    xsDef = xsdFactory.createXSDefinition();
-                    xsDef.setUnresolved(true);
-                    xsDef.setNamespace(targetNS);
-                    xsDef.setDocument(schemaDoc);
-                    // TUSCANY-2465: Set the system id to avoid schema conflict
-                    xsDef.setLocation(URI.create("xsd_" + index + ".xsd"));
-                    index++;
-                    wrapperXSDs.put(targetNS, xsDef);
+                    // TUSCANY-3283 - if we have to generate a new check to 
see if the 
+                    //                WSDL doc already has a schema in this 
namespace                       
+//                    xsDef = wsdlDefinition.getSchema(targetNS);
+//                    if (xsDef != null) {
+//                        schemaDoc = xsDef.getDocument();
+//                        schema = schemaDoc.getDocumentElement();
+//                        wrapperXSDs.put(targetNS, xsDef);
+//                        Map<String, String> prefixMap = 
prefixMaps.get(schema);
+//                        if (prefixMap == null){
+//                            prefixMap = new HashMap<String, String>();
+//                            prefixMaps.put(schema, prefixMap);
+//                            String [] prefixes = 
xsDef.getSchema().getNamespaceContext().getDeclaredPrefixes();
+//                            for (int j = 0; j < prefixes.length; j++){
+//                                
prefixMap.put(xsDef.getSchema().getNamespaceContext().getNamespaceURI(prefixes[j]),
+//                                              prefixes[j]);
+//                            }
+//                        } 
+//                    } else {                    
+                        schemaDoc = createDocument();
+                        schema = schemaDoc.createElementNS(SCHEMA_NS, 
"xs:schema");
+                        // The elementFormDefault should be set to 
unqualified, see TUSCANY-2388
+                        schema.setAttribute("elementFormDefault", 
"unqualified");
+                        schema.setAttribute("attributeFormDefault", 
"qualified");
+                        schema.setAttribute("targetNamespace", targetNS);
+                        schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
+                        schemaDoc.appendChild(schema);
+                        Schema schemaExt = createSchemaExt(definition);
+                        schemaExt.setElement(schema);
+                        prefixMaps.put(schema, new HashMap<String, String>());
+                        xsDef = xsdFactory.createXSDefinition();
+                        xsDef.setUnresolved(true);
+                        xsDef.setNamespace(targetNS);
+                        xsDef.setDocument(schemaDoc);
+                        // TUSCANY-2465: Set the system id to avoid schema 
conflict
+                        xsDef.setLocation(URI.create("xsd_" + index + ".xsd"));
+                        index++;
+                        wrapperXSDs.put(targetNS, xsDef);
+//                    }
                 }
                 Element wrapper = schemaDoc.createElementNS(SCHEMA_NS, 
"xs:element");
                 schema.appendChild(wrapper);
@@ -483,6 +533,178 @@ public class Interface2WSDLGenerator {
 
         return definition;
     }
+    
+    // TUSCANY-3283 - merge the nonamespace schema into the default namespace 
schema 
+    private void mergeNoNamespaceSchema(String toNamespace, List<XSDefinition> 
xsDefinitions){
+        String fromNamespace = ""; 
+        Document fromDoc = null;
+        XSDefinition fromXsDef = null;
+        Document toDoc = null;
+        List<Document> relatedDocs = new ArrayList<Document>();
+        
+        for (XSDefinition xsDef: xsDefinitions) {
+            if(xsDef.getNamespace().equals("")){
+                fromXsDef = xsDef;
+                fromDoc = xsDef.getDocument();
+            } else if(xsDef.getNamespace().equals(toNamespace)){
+                toDoc = xsDef.getDocument();
+            } else {
+                relatedDocs.add(xsDef.getDocument());
+            }
+        }
+        
+        if (fromDoc != null && toDoc != null){
+            try {
+                List<XmlSchema> resultingDocs = mergeSchema(fromNamespace, 
fromDoc, toNamespace, toDoc, relatedDocs);
+                
+                for (XmlSchema schema : resultingDocs){
+                    for (XSDefinition xsDef: xsDefinitions) {
+                        if 
(xsDef.getNamespace().equals(schema.getTargetNamespace())){
+                            Document doc = schema.getSchemaDocument();
+                            // just for debugging
+                            //printDOM(doc);
+                            xsDef.setDocument(doc);
+                            //xsDef.setSchema(schema);
+                        }
+                    }
+                }
+                
+                xsDefinitions.remove(fromXsDef);
+            } catch (XmlSchemaSerializerException ex){
+                throw new WSDLGenerationException(ex);
+            }
+        }
+    }
+       
+    // TUSCANY-3283 - merge the nonamespace schema into the default namespace 
schema 
+    private List<XmlSchema> mergeSchema(String fromNamespace, 
+                                        Document fromDoc, 
+                                        String toNamespace, 
+                                        Document toDoc, 
+                                        List<Document> relatedDocs) throws 
XmlSchemaSerializerException{
+        // Read all the input DOMs into a schema collection so we can 
manipulate them
+        XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
+        schemaCollection.read(fromDoc.getDocumentElement());
+        schemaCollection.read(toDoc.getDocumentElement());
+        
+        for(Document doc : relatedDocs){
+            schemaCollection.read(doc.getDocumentElement());
+        }
+        
+        XmlSchema fromSchema = null;
+        XmlSchema toSchema = null;
+        List<XmlSchema> resultSchema = new ArrayList<XmlSchema>();
+        XmlSchema schemas[] = schemaCollection.getXmlSchemas();
+        for (int i=0; i < schemas.length; i++){
+            XmlSchema schema = schemas[i];
+
+            if (schema.getTargetNamespace() == null){
+                fromSchema = schema;
+            } else if (schema.getTargetNamespace().equals(toNamespace)){
+                toSchema = schema; 
+                resultSchema.add(schema);
+            } else if 
(schema.getTargetNamespace().equals("http://www.w3.org/2001/XMLSchema";)){
+                // do nothing as we're not going to print out the
+                // schema schema
+            } else {
+                resultSchema.add(schema);
+            }
+        }
+        
+        if (fromSchema == null || toSchema == null){
+            return resultSchema;
+        }
+        
+        // copy all the FROM items to the TO schema
+        XmlSchemaObjectCollection fromItems = fromSchema.getItems();
+        XmlSchemaObjectCollection toItems = toSchema.getItems();
+       
+        Iterator<XmlSchemaObject> iter = fromItems.getIterator();
+        while(iter.hasNext()){
+            // don't copy import for TO namespace
+            XmlSchemaObject obj = iter.next();
+            if (obj instanceof XmlSchemaImport &&
+                ((XmlSchemaImport)obj).getNamespace().equals(toNamespace)){
+                // do nothing
+            } else {
+                toItems.add(obj);
+                // correct any references to the item just moved
+                fixUpMovedTypeReferences(fromNamespace, toNamespace, obj, 
resultSchema);
+            }
+        }
+        
+        return resultSchema;
+    }
+    
+    // TUSCANY-3283 - fix up any references to types moved to the default 
namespace schema
+    public void fixUpMovedTypeReferences(String fromNamespace, String 
toNamespace, XmlSchemaObject fixUpObj, 
List<org.apache.ws.commons.schema.XmlSchema> relatedSchema){
+        
+        if (!(fixUpObj instanceof XmlSchemaComplexType)){
+            return;
+        }
+        
+        for (XmlSchema schema : relatedSchema){
+            int importRemoveIndex = -1;
+            for (int i = 0; i < schema.getItems().getCount(); i++){
+                XmlSchemaObject obj = schema.getItems().getItem(i);
+                
+                // if this is not the TO schema then fix up all references
+                // to items moved to the TO schema
+                if(!schema.getTargetNamespace().equals(toNamespace)){
+                    processXMLSchemaObject(toNamespace, obj, fixUpObj);
+                }
+                
+                // remove FROM imports
+                if (obj instanceof XmlSchemaImport &&
+                    
((XmlSchemaImport)obj).getNamespace().equals(fromNamespace)){
+                    importRemoveIndex = i;
+                }
+            }
+
+            if (importRemoveIndex >= 0){
+                schema.getItems().removeAt(importRemoveIndex);
+            }
+        }
+    }
+    
+    // TUSCANY-3283 - iterate down the schema tree looking for references to 
the item being moved
+    public void processXMLSchemaObject(String toNamespace, XmlSchemaObject 
obj,  XmlSchemaObject fixUpObj){
+        if (obj instanceof XmlSchemaComplexType){
+            processXMLSchemaObject(toNamespace, 
((XmlSchemaComplexType)obj).getParticle(), fixUpObj);
+        } else if (obj instanceof XmlSchemaElement){
+            XmlSchemaElement element = (XmlSchemaElement)obj;
+            if(element.getSchemaType() == fixUpObj){
+                QName name = element.getSchemaTypeName();
+                QName newName = new QName(toNamespace, name.getLocalPart());
+                element.setSchemaTypeName(newName);
+            }
+            ((XmlSchemaElement)obj).getSchemaType();
+        } else if (obj instanceof XmlSchemaGroupBase){
+            XmlSchemaObjectCollection items = 
((XmlSchemaGroupBase)obj).getItems();
+            Iterator<XmlSchemaObject> iter = items.getIterator();
+            while(iter.hasNext()){
+                processXMLSchemaObject(toNamespace, iter.next(), fixUpObj);
+            }
+        }
+        // TODO - what other structure items will be generated by JAXB?
+    }    
+    
+    /*
+     * TUSCANY-3283 - Just used when debugging DOM problems
+     */
+    private void printDOM(Document document){
+        try {
+            Transformer transformer = 
TransformerFactory.newInstance().newTransformer();
+            Source source = new DOMSource(document);
+            Result result = new StreamResult(System.out);
+            transformer.transform(source, result);
+            System.out.println("\n");
+            System.out.flush();
+        } catch (Exception ex){
+            ex.toString();
+        }
+    }
+    
 
     private static void addSchemaImport(Element schema, String nsURI, Document 
schemaDoc) {
         Element imp = schemaDoc.createElementNS(SCHEMA_NS, "xs:import");

Modified: 
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/test/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGeneratorTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/test/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGeneratorTestCase.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/test/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGeneratorTestCase.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/test/java/org/apache/tuscany/sca/binding/ws/wsdlgen/BindingWSDLGeneratorTestCase.java
 Thu Jan 19 14:33:20 2012
@@ -74,6 +74,7 @@ public class BindingWSDLGeneratorTestCas
         new JAXWSJavaInterfaceProcessor(registry).visitInterface(iface2);
         new DataBindingJavaInterfaceProcessor(registry).visitInterface(iface2);
         javaIC2.setInterface(iface2);
+        BindingWSDLGenerator.printWSDL = true;
         WSDLInterfaceContract wsdlIC2 = 
BindingWSDLGenerator.createWSDLInterfaceContract(javaIC2, false, new 
XSDModelResolver(null, null), dataBindings, wsdlFactory, xsdFactory, 
documentBuilderFactory, null);
         assertNotNull(wsdlIC2);
     }

Modified: 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
 Thu Jan 19 14:33:20 2012
@@ -138,6 +138,18 @@ public class Output2OutputTransformer ex
         for (int i = 0; i < list1.size(); i++) {
             String n1 = list1.get(i).getQName().getLocalPart();
             String n2 = list2.get(i).getQName().getLocalPart();
+            
+            // TUSCANY-3283 - strip off any leading "_" characters for this 
comparison.
+            //                Now we generate wrappers with JAXB it names the 
response
+            //                wrapper's child as "_return"
+            if (n1.startsWith("_")){
+                n1 = n1.substring(1);
+            }
+            
+            if (n2.startsWith("_")){
+                n2 = n2.substring(1);
+            }
+            
             if (!n1.equals(n2)) {
                 return false;
             }

Modified: 
tuscany/sca-java-2.x/trunk/modules/databinding-axiom/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding-axiom/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/databinding-axiom/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/databinding-axiom/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
 Thu Jan 19 14:33:20 2012
@@ -19,7 +19,9 @@
 # 
org.apache.tuscany.sca.databinding.axiom.CallableReference2OMElement;source=org.oasisopen.sca.CallableReference,target=org.apache.axiom.om.OMElement,weight=10
 # 
org.apache.tuscany.sca.databinding.axiom.OMElement2CallableReference;source=org.apache.axiom.om.OMElement,target=org.oasisopen.sca.CallableReference,weight=10
 
org.apache.tuscany.sca.databinding.axiom.Externalizable2OMElement;source=java.io.Externalizable,target=org.apache.axiom.om.OMElement,weight=10
+org.apache.tuscany.sca.databinding.axiom.Externalizable2OMElement;source=org.oasisopen.sca.ServiceReference,target=org.apache.axiom.om.OMElement,weight=10
 
org.apache.tuscany.sca.databinding.axiom.OMElement2Externalizable;source=org.apache.axiom.om.OMElement,target=java.io.Externalizable,weight=10
+org.apache.tuscany.sca.databinding.axiom.OMElement2Externalizable;source=org.apache.axiom.om.OMElement,target=org.oasisopen.sca.ServiceReference,weight=10
 
org.apache.tuscany.sca.databinding.axiom.Exception2OMElement;source=java:exception,target=org.apache.axiom.om.OMElement,weight=10
 
org.apache.tuscany.sca.databinding.axiom.OMElement2Exception;source=org.apache.axiom.om.OMElement,target=java:exception,weight=10
 # 
org.apache.tuscany.sca.databinding.axiom.Object2OMElement;source=java:simpleType,target=org.apache.axiom.om.OMElement,weight=80000

Added: 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceDataBinding.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceDataBinding.java?rev=1233402&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceDataBinding.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceDataBinding.java
 Thu Jan 19 14:33:20 2012
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.servicereference;
+
+import org.apache.tuscany.sca.databinding.BaseDataBinding;
+import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.oasisopen.sca.ServiceReference;
+
+public class ServiceReferenceDataBinding extends BaseDataBinding {
+    
+    public static final String NAME = ServiceReference.class.getName();
+
+    private ServiceReferenceTypeHelper xmlTypeHelper;
+
+    public ServiceReferenceDataBinding() {
+        super(NAME, ServiceReference.class);
+        this.xmlTypeHelper = new ServiceReferenceTypeHelper();
+    }
+
+    @Override
+    public XMLTypeHelper getXMLTypeHelper() {
+        return xmlTypeHelper;
+    }
+
+}

Added: 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceTypeHelper.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceTypeHelper.java?rev=1233402&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceTypeHelper.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/servicereference/ServiceReferenceTypeHelper.java
 Thu Jan 19 14:33:20 2012
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.servicereference;
+
+import java.beans.Introspector;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
+import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+
+/**
+ * Maps ServiceReference interfaces to AnyType
+ */
+public class ServiceReferenceTypeHelper implements XMLTypeHelper {
+    private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";;
+    private static final String ANYTYPE_NAME = "anyType";
+    private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, 
ANYTYPE_NAME);
+
+    public ServiceReferenceTypeHelper() {
+        super();
+    }
+
+    public TypeInfo getTypeInfo(Class javaType, Object logical) {
+        QName xmlType = JavaXMLMapper.getXMLType(javaType);
+        if (xmlType != null) {
+            return new TypeInfo(xmlType, true, null);
+        } else if (javaType.isInterface()) {
+            return new TypeInfo(ANYTYPE_QNAME, true, null);
+        } else {
+            if (logical instanceof XMLType) {
+                xmlType = ((XMLType)logical).getTypeName();
+            }
+            if (xmlType == null) {
+                xmlType = new 
QName(Introspector.decapitalize(javaType.getSimpleName()));
+            }
+            return new TypeInfo(xmlType, false, null);
+        }
+    }
+
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, 
ModelResolver resolver, Interface intf) {
+        return new ArrayList<XSDefinition>();
+    }
+
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, 
ModelResolver resolver, List<DataType> dataTypes) {
+        return new ArrayList<XSDefinition>();
+    }
+
+}

Modified: 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding
 Thu Jan 19 14:33:20 2012
@@ -23,4 +23,5 @@ org.apache.tuscany.sca.databinding.javab
 
org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;name=java:simpleType
 
org.apache.tuscany.sca.databinding.javabeans.JavaExceptionDataBinding;name=java:exception
 
org.apache.tuscany.sca.databinding.externalizable.ExternalizableDataBinding;name=java.io.Externalizable
+org.apache.tuscany.sca.databinding.servicereference.ServiceReferenceDataBinding;name=org.oasisopen.sca.ServiceReference
 

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
 Thu Jan 19 14:33:20 2012
@@ -48,6 +48,7 @@ import org.objectweb.asm.Opcodes;
 
 public abstract class BaseBeanGenerator implements Opcodes {
     private static final Map<String, String> COLLECTION_CLASSES = new 
HashMap<String, String>();
+    
     static {
         COLLECTION_CLASSES.put("Ljava/util/Collection;", 
"java/util/ArrayList");
         COLLECTION_CLASSES.put("Ljava/util/List;", "java/util/ArrayList");
@@ -55,7 +56,11 @@ public abstract class BaseBeanGenerator 
         COLLECTION_CLASSES.put("Ljava/util/Queue;", "java/util/LinkedList");
     }
     private final static Class[] KNOWN_JAXB_ANNOTATIONS =
-        {XmlAttachmentRef.class, XmlMimeType.class, XmlJavaTypeAdapter.class, 
XmlList.class};
+        {XmlAttachmentRef.class, 
+         XmlMimeType.class, 
+         XmlJavaTypeAdapter.class, 
+         XmlList.class};
+    
     private static final Map<String, String> JAVA_KEYWORDS = new 
HashMap<String, String>();
 
     static {
@@ -140,7 +145,7 @@ public abstract class BaseBeanGenerator 
         // Annotate the class
         annotateClass(cw, name, namespace, propOrder);
 
-        // Decalre the default constructor
+        // Declare the default constructor
         declareConstructor(cw, classSignature);
         if (properties != null) {
             for (BeanProperty p : properties) {
@@ -228,8 +233,11 @@ public abstract class BaseBeanGenerator 
             av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlElement;", 
true);
             av0.visit("name", propName);
             av0.visit("namespace", "");
+            // TUSCANY-3283 - force not nillable if it isn't
             if (isNillable) {
                 av0.visit("nillable", Boolean.TRUE);
+            } else {
+                av0.visit("nillable", Boolean.FALSE);
             }
             // FIXME:
             // av0.visit("required", Boolean.FALSE);

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java
 Thu Jan 19 14:33:20 2012
@@ -34,6 +34,8 @@ import java.util.List;
 import javax.xml.namespace.QName;
 import javax.xml.ws.WebFault;
 
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
 import org.objectweb.asm.ClassWriter;
 
@@ -72,9 +74,7 @@ public class FaultBeanGenerator extends 
         return props.toArray(new BeanProperty[0]);
     }
 
-    public byte[] generate(Class<? extends Throwable> exceptionClass) {
-        String className = getFaultBeanName(exceptionClass);
-        
+    public byte[] generate(Class<? extends Throwable> exceptionClass, 
Operation operation) {
        // The reflection code here allows for toleration of older versions of 
ASM.      
        ClassWriter cw;
        try {                   
@@ -91,35 +91,52 @@ public class FaultBeanGenerator extends 
                
        }  
 
-               
-       
+        // TUSCANY-3283 - all generated classes (including exception) should 
go in the namespace
+        //                of the interface not the namespace of the 
originating exception. 
+        //                consequently we need to create a matching package 
name for the schema
+        QName element = getElementName(exceptionClass, operation);
+        String name = element.getLocalPart();
+        String namespace = element.getNamespaceURI();
+        
+        String className = getFaultBeanName(exceptionClass, operation);
         String classDescriptor = className.replace('.', '/');
         String classSignature = "L" + classDescriptor + ";";
-        QName element = getElementName(exceptionClass);
-        String namespace = element.getNamespaceURI();
-        String name = element.getLocalPart();
+
         return defineClass(cw, classDescriptor, classSignature, namespace, 
name, getProperties(exceptionClass));
     }
 
-    public Class<?> generate(Class<? extends Throwable> exceptionClass, 
GeneratedClassLoader cl) {
+    public Class<?> generate(Class<? extends Throwable> exceptionClass, 
GeneratedClassLoader cl, Operation operation) {
         synchronized (exceptionClass) {
-            Class<?> faultBeanClass = generatedClasses.get(exceptionClass);
+            QName element = getElementName(exceptionClass, operation);
+            Class<?> faultBeanClass = generatedClasses.get(element);
             if (faultBeanClass == null) {
-                String className = getFaultBeanName(exceptionClass);
+                
+                // TUSCANY-3283 - all generated classes (including exception) 
should go in the namespace
+                //                of the interface not the namespace of the 
originating exception. 
+                //                consequently we need to create a matching 
package name for the schema
+                String name = element.getLocalPart();
+                String namespace = element.getNamespaceURI();
+                
+                String className = getFaultBeanName(exceptionClass, operation);
                 String classDescriptor = className.replace('.', '/');
                 String classSignature = "L" + classDescriptor + ";";
-                QName element = getElementName(exceptionClass);
-                String namespace = element.getNamespaceURI();
-                String name = element.getLocalPart();
-                faultBeanClass =
-                    generate(classDescriptor, classSignature, namespace, name, 
getProperties(exceptionClass), cl);
-                generatedClasses.put(exceptionClass, faultBeanClass);
+
+                faultBeanClass = generate(classDescriptor, classSignature, 
namespace, name, getProperties(exceptionClass), cl);
+                generatedClasses.put(element, faultBeanClass);
             }
             return faultBeanClass;
         }
     }
 
-    private static String getFaultBeanName(Class<?> exceptionClass) {
+    private static String getFaultBeanName(Class<?> exceptionClass, Operation 
operation) {
+        // TUSCANY-3283 - all generated classes (including exception) should 
go in the namespace
+        //                of the interface not the namespace of the 
originating exception. 
+        //                consequently we need to create a matching package 
name for the schema
+        String interfacePkg = null;
+        if (operation != null && operation.getInterface() instanceof 
JavaInterface){
+            interfacePkg = 
((JavaInterface)operation.getInterface()).getJavaClass().getPackage().getName();
+        }
+        
         String faultBeanName = null;
         WebFault webFault = exceptionClass.getAnnotation(WebFault.class);
         if (webFault != null) {
@@ -131,7 +148,12 @@ public class FaultBeanGenerator extends 
 
         String name = exceptionClass.getName();
         int index = name.lastIndexOf('.');
-        String pkg = name.substring(0, index);
+        String pkg = null;
+        if (interfacePkg != null){
+            pkg = interfacePkg;
+        } else {
+            pkg = name.substring(0, index);
+        }
         String clsName = name.substring(index + 1);
 
         // FIXME: [rfeng] This is a workaround to avoid "Prohibited package 
name: java.lang.jaxws"
@@ -142,9 +164,17 @@ public class FaultBeanGenerator extends 
         return faultBeanName;
     }
 
-    public static QName getElementName(Class<? extends Throwable> 
exceptionClass) {
+    public static QName getElementName(Class<? extends Throwable> 
exceptionClass, Operation operation) {
         WebFault webFault = exceptionClass.getAnnotation(WebFault.class);
+        
+        // TUSCANY-3283 - all generated classes (including exception) should 
go in the namespace
+        //                of the interface not the namespace of the 
originating exception. 
+        //                consequently we need to create a matching package 
name for the schema
         String namespace = null;
+        if (operation != null && operation.getInterface() instanceof 
JavaInterface){
+            namespace = 
((JavaInterface)operation.getInterface()).getQName().getNamespaceURI();
+        }
+        
         String name = null;
         if (webFault != null) {
             namespace = webFault.targetNamespace();
@@ -162,6 +192,6 @@ public class FaultBeanGenerator extends 
     public static Class<?> generateFaultBeanClass(Class<? extends Throwable> 
exceptionClass) {
         FaultBeanGenerator generator = new FaultBeanGenerator();
         GeneratedClassLoader cl = new 
GeneratedClassLoader(exceptionClass.getClassLoader());
-        return generator.generate(exceptionClass, cl);
+        return generator.generate(exceptionClass, cl, null);
     }
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java
 Thu Jan 19 14:33:20 2012
@@ -29,6 +29,8 @@ import javax.xml.namespace.QName;
 import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding;
 import org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
@@ -48,16 +50,21 @@ public class GeneratedDataTypeImpl imple
     private String wrapperName;
     private boolean request;
     private GeneratedClassLoader classLoader;
+    private Operation operation;
 
     private Class<? extends Throwable> exceptionClass;
 
-    public GeneratedDataTypeImpl(XMLAdapterExtensionPoint xmlAdapters, Class<? 
extends Throwable> exceptionClass, GeneratedClassLoader cl) {
+    public GeneratedDataTypeImpl(XMLAdapterExtensionPoint xmlAdapters, 
+                                 Class<? extends Throwable> exceptionClass, 
+                                 GeneratedClassLoader cl, 
+                                 Operation operation) {
         super();
         this.exceptionClass = exceptionClass;
         this.classLoader = cl;
-        QName name = FaultBeanGenerator.getElementName(exceptionClass);
+        QName name = FaultBeanGenerator.getElementName(exceptionClass, 
operation);
         this.logical = new XMLType(name, name);
         this.xmlAdapters = xmlAdapters;
+        this.operation = operation;
     }
 
     public GeneratedDataTypeImpl(XMLAdapterExtensionPoint xmlAdapters,
@@ -103,7 +110,7 @@ public class GeneratedDataTypeImpl imple
             } else if (exceptionClass != null) {
                 FaultBeanGenerator faultBeanGenerator = new 
FaultBeanGenerator();
                 faultBeanGenerator.setXmlAdapters(xmlAdapters);
-                physical = faultBeanGenerator.generate(exceptionClass, 
classLoader);
+                physical = faultBeanGenerator.generate(exceptionClass, 
classLoader, operation);
             }
         }
         return physical;

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
 Thu Jan 19 14:33:20 2012
@@ -290,7 +290,7 @@ public class JAXWSFaultExceptionMapper i
 
     @SuppressWarnings("unchecked")
     public boolean introspectFaultDataType(DataType<DataType> exceptionType, 
final Operation operation, final boolean generatingFaultBean) {
-        QName faultName = null;
+        
         boolean result = false;
 
         final Class<?> cls = exceptionType.getPhysical();
@@ -298,6 +298,7 @@ public class JAXWSFaultExceptionMapper i
             return true;
         }
         DataType faultType = (DataType)exceptionType.getLogical();
+        QName faultName = ((XMLType)faultType.getLogical()).getElementName();
         Class<?> faultBean = null;
         final WebFault fault = cls.getAnnotation(WebFault.class);
         if (fault != null) {
@@ -346,7 +347,7 @@ public class JAXWSFaultExceptionMapper i
                                 operation == null ? t.getClassLoader() : 
((JavaInterface)operation.getInterface())
                                     .getJavaClass().getClassLoader();
                             GeneratedClassLoader cl = new 
GeneratedClassLoader(parent);
-                            GeneratedDataTypeImpl dt = new 
GeneratedDataTypeImpl(xmlAdapterExtensionPoint, t, cl);
+                            GeneratedDataTypeImpl dt = new 
GeneratedDataTypeImpl(xmlAdapterExtensionPoint, t, cl, operation);
                             return dt;
                         } else {
                             return new DataTypeImpl<XMLType>(cls, new 
XMLType(qname, qname));

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java
 Thu Jan 19 14:33:20 2012
@@ -205,7 +205,9 @@ public class WrapperBeanGenerator extend
                     Type genericReturnType = asyncMethod? returnType : 
m.getGenericReturnType();
                     BeanProperty prop = new BeanProperty(propNS, propName, 
returnType, genericReturnType, true);
                     prop.getJaxbAnnotaions().addAll(jaxb);
-                    properties.add(prop);
+                    // TUSCANY-3283 - As per JAXWS spec () the "return" value 
should come first in the 
+                    //                list when there are holders. 
+                    properties.add(0, prop);
                 }
                 wrapperClass =
                     generate(wrapperClassDescriptor, wrapperClassSignature, 
wrapperNamespace, wrapperName, properties

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java
 Thu Jan 19 14:33:20 2012
@@ -40,7 +40,7 @@ public class FaultBeanGeneratorTestCase 
 
     @Test
     public void testGenerate() throws IOException {
-        byte[] content = new FaultBeanGenerator().generate(MyException.class);
+        byte[] content = new FaultBeanGenerator().generate(MyException.class, 
null);
         ClassReader cr = new ClassReader(content);
         PrintWriter pw = new PrintWriter(System.out);
         CheckClassAdapter.verify(cr, false, pw);

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
 Thu Jan 19 14:33:20 2012
@@ -185,6 +185,14 @@ public interface WSDLDefinition extends 
      * Gets the wsdli:location attribute namespace mappings
      * @return a Map with key being namespace and value the location
      */
-    Map<String, String> getWsdliLocations();    
+    Map<String, String> getWsdliLocations();  
+    
+    /**
+     * Find the schema definition for the provided namespace
+     * 
+     * @param namespace
+     * @return the schema definition relating to the provided namespace or 
null if not found
+     */
+    XSDefinition getSchema(String namespace);
 
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
 Thu Jan 19 14:33:20 2012
@@ -361,4 +361,13 @@ public class WSDLDefinitionImpl implemen
     public Map<String, String> getWsdliLocations() {
         return wsdliLocations ;
     }
+    
+    public XSDefinition getSchema(String namespace){
+        for (XSDefinition xsDef : schemas){
+            if (xsDef.getNamespace().equals(namespace)){
+                return xsDef;
+            }
+        }
+        return null;
+    }
 }

Modified: tuscany/sca-java-2.x/trunk/testing/itest/ws/pom.xml
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/ws/pom.xml?rev=1233402&r1=1233401&r2=1233402&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/testing/itest/ws/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/testing/itest/ws/pom.xml Thu Jan 19 14:33:20 2012
@@ -61,6 +61,7 @@
     <module>external-client</module>
     <module>external-service</module>
     <module>launcher-axis2</module>
+    <module>wsdlgen</module>
   </modules>
 
 </project>


Reply via email to