You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by pr...@apache.org on 2007/06/29 20:54:51 UTC

svn commit: r551999 [8/9] - in /webservices/axis2/branches/java/jaxws21: modules/adb-codegen/src/org/apache/axis2/schema/ modules/adb-codegen/src/org/apache/axis2/schema/template/ modules/adb-codegen/test-resources/testsuite/ modules/adb-codegen/test/o...

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisService2WSDL11.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisService2WSDL11.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisService2WSDL11.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisService2WSDL11.java Fri Jun 29 11:54:44 2007
@@ -90,7 +90,18 @@
         // EPRs now to be used later, especially when we generate the WSDL.
         serviceEndpointURLs = service.getEPRs();
         if (serviceEndpointURLs == null) {
-            serviceEndpointURLs = new String[]{service.getEndpointName()};
+            Map endpointMap = service.getEndpoints();
+             if (endpointMap.size() > 0) {
+                Iterator endpointItr = endpointMap.values().iterator();
+                while (endpointItr.hasNext()) {
+                    AxisEndpoint endpoint = (AxisEndpoint) endpointItr.next();
+                    serviceEndpointURLs =  new String[]{endpoint.getEndpointURL()};
+                    break;
+                }
+
+            } else {
+                 serviceEndpointURLs = new String[]{service.getEndpointName()};
+             }
         }
 
         this.targetNamespace = service.getTargetNamespace();

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisServiceGroup.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisServiceGroup.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisServiceGroup.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/AxisServiceGroup.java Fri Jun 29 11:54:44 2007
@@ -98,15 +98,10 @@
                 } else {
                     throw new AxisFault(Messages.getMessage("modulenotavailble"));
                 }
-                Module moduleImpl = axisModule.getModule();
-                if (moduleImpl != null) {
-                    // notyfying module for service engagement
-                    moduleImpl.engageNotify(service);
-                }
                 service.engageModule(axisModule);
             }
-        }
 
+        }
         service.setLastupdate();
         addChild(service);
         if (axisConfig != null) {

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/OutOnlyAxisOperation.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/OutOnlyAxisOperation.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/OutOnlyAxisOperation.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/OutOnlyAxisOperation.java Fri Jun 29 11:54:44 2007
@@ -17,6 +17,8 @@
 
 import org.apache.axiom.om.util.UUIDGenerator;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants.Final;
+import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.OperationClient;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.async.Callback;
@@ -241,11 +243,17 @@
         }
         ConfigurationContext cc = sc.getConfigurationContext();
         prepareMessageContext(cc, mc);
-        // setting message ID if it null
 
+        //As this is an out-only MEP we add a sensible default for
+        //the replyTo.
+        EndpointReference epr = mc.getReplyTo();
+        if (epr == null)
+            mc.setReplyTo(new EndpointReference(Final.WSA_NONE_URI));
+        
         // create the operation context for myself
         OperationContext oc = sc.createOperationContext(axisOp);
         oc.addMessageContext(mc);
+        
         // ship it out
         AxisEngine engine = new AxisEngine(cc);
         if (!block) {

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java Fri Jun 29 11:54:44 2007
@@ -60,6 +60,11 @@
         axisServices = new ArrayList();   // create an empty ArrayList
     }
 
+     public WSDL11ToAllAxisServicesBuilder(Definition def, String portName) {
+        super(def, null, portName);
+        axisServices = new ArrayList();   // create an empty ArrayList
+    }
+
 
     /**
      * Public method to access the wsdl 1.1 file and create a List of AxisService objects.
@@ -88,8 +93,11 @@
 
             if (wsdl4jDefinition.getServices().size() > 0) {
                 Iterator wsdlServIter = wsdl4jDefinition.getServices().values().iterator();
-                // let the wsdlToservice builder to decide the port to generate binding
-                portName = null;
+                if (wsdl4jDefinition.getServices().size() > 1){
+                     // let the wsdlToservice builder to decide the port to generate binding
+                     portName = null;
+                } 
+
                 while (wsdlServIter.hasNext()) {
                     Service service = (Service) wsdlServIter.next();
                     // set the serviceName on the parent to setup call to populateService

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java Fri Jun 29 11:54:44 2007
@@ -165,6 +165,8 @@
     // As bindings are processed add it to this array so that we dont process the same binding twice
     private Map processedBindings;
 
+    private boolean isAllPorts;
+
     /**
      * constructor taking in the service name and the port name
      *
@@ -188,8 +190,24 @@
         super(null, serviceName);
         this.wsdl4jDefinition = def;
         this.portName = portName;
+        this.isAllPorts = false;
+    }
+
+    /**
+     * @param def
+     * @param serviceName
+     * @param portName
+     */
+    public WSDL11ToAxisServiceBuilder(Definition def,
+                                      QName serviceName,
+                                      String portName,
+                                      boolean isAllPorts) {
+        this(def,serviceName,portName);
+        this.isAllPorts = isAllPorts;
     }
 
+
+
     /**
      * @param in
      * @param service
@@ -244,6 +262,8 @@
             Service wsdl4jService = findService(wsdl4jDefinition);
             Binding binding = findBinding(wsdl4jDefinition, wsdl4jService);
 
+
+
             if (binding.getPortType() == null) {
                 throw new AxisFault("There is no port type associated with the binding");
             }
@@ -456,7 +476,7 @@
             wsdl4jBindingOperation = (BindingOperation) iterator.next();
             wsdl4jOperation = findOperation(portType, wsdl4jBindingOperation);
 
-            axisBindingOperation.setName(new QName("", wsdl4jBindingOperation.getName()));
+            axisBindingOperation.setName(new QName(targetNamespace, wsdl4jBindingOperation.getName()));
             addDocumentation(axisBindingOperation, wsdl4jBindingOperation.getDocumentationElement());
 
             axisOperation = axisService.getOperation(new QName(targetNamespace, wsdl4jOperation.getName()));
@@ -485,6 +505,16 @@
 
                 AxisMessage axisInMessage =
                         axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                //This is a hack to get AXIS2-2771 working , I had to copy soap headers
+                //  from binding message to AxisMessage
+                List soapHeaders =
+                            (List) axisBindingInMessage.getProperty(WSDL2Constants.ATTR_WSOAP_HEADER);
+                    if (soapHeaders != null) {
+                        for (int i = 0; i < soapHeaders.size(); i++) {
+                            SOAPHeaderMessage headerMessage = (SOAPHeaderMessage) soapHeaders.get(i);
+                            axisInMessage.addSoapHeader(headerMessage);
+                        }
+                    }
 
                 if (isSetMessageQNames) {
                     addQNameReference(axisInMessage, wsdl4jOperation,
@@ -512,6 +542,17 @@
                                        wsdl4jDefinition,
                                        axisBindingOutMessage, BINDING_OPERATION_OUTPUT);
 
+                //This is a hack to get AXIS2-2771 working , I had to copy soap headers
+                //  from binding message to AxisMessage
+                List soapHeaders =
+                        (List) axisBindingOutMessage.getProperty(WSDL2Constants.ATTR_WSOAP_HEADER);
+                if (soapHeaders != null) {
+                    for (int i = 0; i < soapHeaders.size(); i++) {
+                        SOAPHeaderMessage headerMessage = (SOAPHeaderMessage) soapHeaders.get(i);
+                        axisOutMessage.addSoapHeader(headerMessage);
+                    }
+                }
+
                 if (isSetMessageQNames) {
                     addQNameReference(axisOutMessage, wsdl4jOperation,
                                       wsdl4jBindingOutput,
@@ -682,14 +723,13 @@
             // i.e if user has specified a service
             port = service.getPort(portName);
             if (port == null) {
-                throw new AxisFault("No port found for the given name :"
-                        + portName);
+                throw new AxisFault("No port found for the given name :" + portName);
             }
         } else {
             Map ports = service.getPorts();
             if (ports != null && ports.size() > 0) {
                 // pick the port with the SOAP address as the default port
-                port = findSOAPPort(ports);
+                port = findPort(ports);
                 if (port == null) {
                     // a SOAP port was not found - log a warning
                     // and use the first port in the list
@@ -697,6 +737,15 @@
                             + "picking a random port!");
                     port = (Port) ports.values().toArray()[0];
                 }
+
+                if (port != null){
+                    // i.e we have find a correct port
+                    if (!this.isAllPorts){
+                        // if user has not set all option
+                        // we have to generate code only for that option.
+                        this.portName = port.getName();
+                    }
+                }
             }
         }
 
@@ -717,10 +766,22 @@
     /**
      * Finds a SOAP port given the port map
      *
-     * @param ports
+     * @param pHttpAddressHttpAddressorts
      */
-    private Port findSOAPPort(Map ports) {
+    private Port findPort(Map ports) {
         Port port;
+        for (Iterator portsIterator = ports.values().iterator(); portsIterator.hasNext();) {
+            port = (Port) portsIterator.next();
+            List extensibilityElements = port.getExtensibilityElements();
+            for (int i = 0; i < extensibilityElements.size(); i++) {
+                Object extElement = extensibilityElements.get(i);
+                if (extElement instanceof SOAP12Address) {
+                    // SOAP 1.2 address found - return that port and we are done
+                    return port;
+                }
+            }
+        }
+
         for (Iterator portsIterator = ports.values().iterator(); portsIterator
                 .hasNext();) {
             port = (Port) portsIterator.next();
@@ -731,9 +792,17 @@
                     // SOAP 1.1 address found - return that port and we are done
                     return port;
                 }
+            }
+        }
 
-                if (extElement instanceof SOAP12Address) {
-                    // SOAP 1.2 address found - return that port and we are done
+        for (Iterator portsIterator = ports.values().iterator(); portsIterator
+                .hasNext();) {
+            port = (Port) portsIterator.next();
+            List extensibilityElements = port.getExtensibilityElements();
+            for (int i = 0; i < extensibilityElements.size(); i++) {
+                Object extElement = extensibilityElements.get(i);
+                if (extElement instanceof HTTPAddress) {
+                    // SOAP 1.1 address found - return that port and we are done
                     return port;
                 }
             }
@@ -2408,7 +2477,15 @@
         }
 
     }
-    
+
+    public boolean isAllPorts() {
+        return isAllPorts;
+    }
+
+    public void setAllPorts(boolean allPorts) {
+        isAllPorts = allPorts;
+    }
+
 //    private void processPoliciesInDefinition() {
 //        
 //        Object obj;

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java Fri Jun 29 11:54:44 2007
@@ -86,6 +86,9 @@
     protected Class serviceClass = null;
     protected AxisService service;
 
+    //To check whether we need to generate Schema element for Exception
+    protected boolean generateBaseException ;
+
     public NamespaceGenerator getNsGen() throws Exception {
         if (nsGen == null) {
             nsGen = new DefaultNamespaceGenerator();
@@ -235,20 +238,37 @@
                     if (AxisFault.class.getName().equals(extype.getQualifiedName())) {
                         continue;
                     }
-                    String partQname = extype.getSimpleName() + "Fault";
+                    if (!generateBaseException) {
+                        methodSchemaType = createSchemaTypeForMethodPart("Exception");
+                        sequence = new XmlSchemaSequence();
+                        QName schemaTypeName = typeTable.getSimpleSchemaTypeName(Exception.class.getName());
+                        addContentToMethodSchemaType(sequence,
+                                schemaTypeName,
+                                "Exception",
+                                false);
+                        methodSchemaType.setParticle(sequence);
+                        generateBaseException = true;
+                    }
+                    String partQname = extype.getSimpleName();
                     methodSchemaType = createSchemaTypeForMethodPart(partQname);
                     sequence = new XmlSchemaSequence();
-                    generateSchemaForType(sequence, extype, extype.getSimpleName());
-                    methodSchemaType.setParticle(sequence);
+                    if (Exception.class.getName().equals(extype.getQualifiedName())) {
+                        addContentToMethodSchemaType(sequence,
+                                typeTable.getComplexSchemaType("Exception"),
+                                partQname,
+                                false);
+                        methodSchemaType.setParticle(sequence);
+                        typeTable.addComplexSchema(Exception.class.getPackage().getName(),
+                                methodSchemaType.getQName());
+                    } else {
+                        generateSchemaForType(sequence, extype, extype.getSimpleName());
+                        methodSchemaType.setParticle(sequence);
+                    }
                     if (AxisFault.class.getName().equals(extype.getQualifiedName())) {
                         continue;
                     }
                     AxisMessage faultMessage = new AxisMessage();
-                    if (extypes.length > 1) {
-                        faultMessage.setName(methodName + "Fault" + j);
-                    } else {
-                        faultMessage.setName(methodName + "Fault");
-                    }
+                    faultMessage.setName(extype.getSimpleName());
                     faultMessage.setElementQName(typeTable.getQNamefortheType(partQname));
                     axisOperation.setFaultMessages(faultMessage);
                 }
@@ -419,7 +439,7 @@
 
             complexType.setName(simpleName);
 
-            xmlSchema.getItems().add(eltOuter);
+//            xmlSchema.getItems().add(eltOuter);
             xmlSchema.getElements().add(schemaTypeName, eltOuter);
             eltOuter.setSchemaTypeName(complexType.getQName());
 
@@ -494,7 +514,6 @@
 
             for (int i = 0; i < froperties.length; i++) {
                 JField field = froperties[i];
-                String propertyName = field.getType().getQualifiedName();
                 boolean isArryType = field.getType().isArrayType();
 
                 this.generateSchemaforFieldsandProperties(xmlSchema, sequence, field.getType(),

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DocLitBareSchemaGenerator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DocLitBareSchemaGenerator.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DocLitBareSchemaGenerator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/description/java2wsdl/DocLitBareSchemaGenerator.java Fri Jun 29 11:54:44 2007
@@ -99,20 +99,37 @@
                     if (AxisFault.class.getName().equals(extype.getQualifiedName())) {
                         continue;
                     }
-                    String partQname = extype.getSimpleName() + "Fault";
+                     if (!generateBaseException) {
+                        methodSchemaType = createSchemaTypeForMethodPart("Exception");
+                        sequence = new XmlSchemaSequence();
+                        QName schemaTypeName = typeTable.getSimpleSchemaTypeName(Exception.class.getName());
+                        addContentToMethodSchemaType(sequence,
+                                schemaTypeName,
+                                "Exception",
+                                false);
+                        methodSchemaType.setParticle(sequence);
+                        generateBaseException = true;
+                    }
+                    String partQname = extype.getSimpleName();
                     methodSchemaType = createSchemaTypeForMethodPart(partQname);
                     sequence = new XmlSchemaSequence();
-                    generateSchemaForType(sequence, extype, extype.getSimpleName());
-                    methodSchemaType.setParticle(sequence);
+                    if (Exception.class.getName().equals(extype.getQualifiedName())) {
+                        addContentToMethodSchemaType(sequence,
+                                typeTable.getComplexSchemaType("Exception"),
+                                partQname,
+                                false);
+                        methodSchemaType.setParticle(sequence);
+                        typeTable.addComplexSchema(Exception.class.getPackage().getName(),
+                                methodSchemaType.getQName());
+                    } else {
+                        generateSchemaForType(sequence, extype, extype.getSimpleName());
+                        methodSchemaType.setParticle(sequence);
+                    }
                     if (AxisFault.class.getName().equals(extype.getQualifiedName())) {
                         continue;
                     }
                     AxisMessage faultMessage = new AxisMessage();
-                    if (extypes.length > 1) {
-                        faultMessage.setName(methodName + "Fault" + j);
-                    } else {
-                        faultMessage.setName(methodName + "Fault");
-                    }
+                    faultMessage.setName(extype.getSimpleName());
                     faultMessage.setElementQName(typeTable.getQNamefortheType(partQname));
                     axisOperation.setFaultMessages(faultMessage);
                 }
@@ -178,6 +195,7 @@
                         generateSchemaForType(null, paras[0].getType(), parameterName);
                         inMessage.setElementQName(typeTable.getQNamefortheType(parameterName));
                         inMessage.setPartName(parameterName);
+                        inMessage.setWrapped(false);
                         service.addMessageElementQNameToOperationMapping(typeTable.getQNamefortheType(parameterName),
                                 axisOperation);
                     }
@@ -211,7 +229,7 @@
                     }
                 } else {
                     generateSchemaForType(null, returnType, methodName + RESULT);
-
+                    outMessage.setWrapped(false);
                 }
                 outMessage.setElementQName(typeTable.getQNamefortheType(methodName + RESULT));
                 outMessage.setName(methodName + "ResponseMessage");
@@ -289,7 +307,9 @@
             String schemaNamespace = resolveSchemaNamespace(getQualifiedName(
                     type.getContainingPackage()));
             addImport(getXmlSchema(schemaNamespace), schemaTypeName);
-
+            if(sequence==null){
+                 generateSchemaForSingleElement(schemaTypeName, partName, isArrayType, type);
+            }
         } else {
             if (sequence == null) {
                 generateSchemaForSingleElement(schemaTypeName, partName, isArrayType, type);
@@ -394,7 +414,7 @@
 
             complexType.setName(simpleName);
 
-            xmlSchema.getItems().add(eltOuter);
+//            xmlSchema.getItems().add(eltOuter);
             xmlSchema.getElements().add(schemaTypeName, eltOuter);
             eltOuter.setSchemaTypeName(complexType.getQName());
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java Fri Jun 29 11:54:44 2007
@@ -172,6 +172,7 @@
             }
         }
         catch (AxisFault e) {
+            msgContext.setFailureReason(e);
             flowComplete(msgContext);
             throw e;
         }
@@ -422,6 +423,7 @@
             }
         }
         catch (AxisFault e) {
+            msgContext.setFailureReason(e);
             flowComplete(msgContext);
             throw e;
         }
@@ -470,6 +472,7 @@
                 }
             }
             catch (AxisFault e) {
+                msgContext.setFailureReason(e);
                 flowComplete(msgContext);
                 throw e;
             }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java Fri Jun 29 11:54:44 2007
@@ -20,6 +20,7 @@
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPHeader;
 
@@ -106,35 +107,32 @@
             msgContext.setAxisService(msgContext.getServiceContext().getAxisService());
         }
 
-        
-        //We do not send the status even though it is In-Only to allow Sandesha to send a ack
-        //https://issues.apache.org/jira/browse/AXIS2-2191. At F2F 2007 summer june, we decided may be 
-        //providing a option might not give us that much. I will keep the code commented so we might want to do this later. 
-//        if (msgContext.getAxisOperation().getMessageExchangePattern()
-//                .equals(WSDL20_2004_Constants.MEP_URI_IN_ONLY)) {
-//            Object requestResponseTransport =
-//                    msgContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL);
-//            if (requestResponseTransport != null) {
-//                ((RequestResponseTransport) requestResponseTransport)
-//                        .acknowledgeMessage(msgContext);
-//            }
-//        }
-        
-        if (msgContext.getAxisOperation().getMessageExchangePattern()
-                .equals(WSDL2Constants.MEP_URI_IN_OUT))
-        {   // OR, if 2 way operation but the response is intended to not use the response channel of a 2-way transport
-            // then we don't need to keep the transport waiting.
-            Object requestResponseTransport =
-                    msgContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL);
-            if (requestResponseTransport != null) {
-                if (AddressingHelper.isReplyRedirected(msgContext) &&
-                        AddressingHelper.isFaultRedirected(msgContext)) {
-                    ((RequestResponseTransport) requestResponseTransport)
-                            .acknowledgeMessage(msgContext);
-                }
-            }
+        // We should send an early ack to the transport whever possible, but some modules need
+        // to use the backchannel, so we need to check if they have disabled this code.
+        Boolean disableAck = (Boolean) msgContext.getProperty(Constants.Configuration.DISABLE_RESPONSE_ACK);
+        if(disableAck == null || disableAck.booleanValue() == false) {
+        	String mepString = msgContext.getAxisOperation().getMessageExchangePattern();
+        	if (mepString.equals(WSDL20_2006Constants.MEP_URI_IN_ONLY)
+	                || mepString.equals(WSDL20_2004_Constants.MEP_URI_IN_ONLY)) {
+	            Object requestResponseTransport =
+	                    msgContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL);
+	            if (requestResponseTransport != null) {
+	                ((RequestResponseTransport) requestResponseTransport).acknowledgeMessage(msgContext);
+	            }
+	        } else if (mepString.equals(WSDL20_2006Constants.MEP_URI_IN_OUT)
+	                || mepString.equals(WSDL20_2004_Constants.MEP_URI_IN_OUT)) { // OR, if 2 way operation but the response is intended to not use the response channel of a 2-way transport
+	            // then we don't need to keep the transport waiting.
+	            Object requestResponseTransport =
+	                    msgContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL);
+	            if (requestResponseTransport != null) {
+	                if (AddressingHelper.isReplyRedirected(msgContext)
+	                        && AddressingHelper.isFaultRedirected(msgContext)) {
+	                    ((RequestResponseTransport) requestResponseTransport).acknowledgeMessage(msgContext);
+	                }
+	            }
+	        }        
         }
-
+        
 
         ArrayList operationChain = msgContext.getAxisOperation().getRemainingPhasesInFlow();
         msgContext.setExecutionChain((ArrayList) operationChain.clone());

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/Handler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/Handler.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/Handler.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/engine/Handler.java Fri Jun 29 11:54:44 2007
@@ -32,9 +32,7 @@
 public interface Handler {
 
     /**
-     * Since this might change the whole behavior of Axis2 handlers, and since this is still under discussion
-     * (http://marc.theaimsgroup.com/?l=axis-dev&m=114504084929285&w=2) implementation of this method is deferred.
-     * Note : This method will not be automatically called, from Axis2 engine, until this is fully implemented.
+     * @deprecated This method will be going away after the 1.3 release, it was never used.
      */
     public void cleanup();
 
@@ -72,7 +70,9 @@
      * invoke(...) method called during the processing of the message, once
      * the message processing has completed.  During execution of the
      * flowComplete's, handlers are invoked in the opposite order that they
-     * were invoked originally.
+     * were invoked originally.  Note that implementations SHOULD check
+     * msgContext.getFailureReason() to see if this is an error or a normal
+     * completion.
      *
      * @param msgContext the <code>MessageContext</code> to process with this
      *                   <code>Handler</code>.

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/i18n/resource.properties
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/i18n/resource.properties?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/i18n/resource.properties (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/i18n/resource.properties Fri Jun 29 11:54:44 2007
@@ -54,7 +54,7 @@
 responseTimeOut=Time out while waiting for the server to send the response.
 callBackCompletedWithError=The callback complete, but there was no envelope element or an error.
 2channelNeedAddressing=To use two transport channels you must use the WS-Addressing module. 
-useSeparateListenerLimited=A false value for the useSeparateListener is supported by the http/tcp and tcp commons transport only when they are set as the sender and receiver.
+useSeparateListenerLimited=Setting useSeparateListener to false is not a valid option when the Sender is {0} and Listener is {1}   
 replyNeedStarting=Before requesting the ReplyTo value, the system must start the TransportListener. The Transport is {0}
 failedToOpenSocket=The system failed to open the socket.
 noRecep4Email=A recipient is not specified in the e-mail message.
@@ -172,7 +172,8 @@
 errorinschemagen=The following error occurred during schema generation: {0}
 errorininputstreamclose=An error occurred in closing input stream.
 phaseclassnotfound=The system cannot find the phase class: {0} : {1}
-modulenamecannotnull=The module name cannot be null in the version element for the side default module.
+modulenamecannotbenull=The following attribute /defaultModuleVersions/module/@name is not set in axis2.xml
+moduleversioncannotbenull=The following attribute /defaultModuleVersions/module/@version is not set in axis2.xml
 # documentcreatingerror is not used.
 #documentcreatingerror=An exception occurred when creating the document from the WSDL file: {0}
 noserviceelemtfound=The javax.wsdl.Service element cannot be found.
@@ -253,4 +254,5 @@
 wsaddressingrequirednotpresent=WS-Addressing is required, but it cannot be found.
 nomessagereciever=Message Receiver not found for AxisOperation: {0}
 duplicaterelatesto=The message is a duplicate (has the same reply relationship value) of an already processed message. RelatesTo = {0}
+getMessageContextError=The message context could not be retrieved due to the following error: {0}
 mismatchedModuleVersions=Tried to deploy (to {0}) a module ''{1}'' when ''{2}'' was already deployed - version mismatch!

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/RequestResponseTransport.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/RequestResponseTransport.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/RequestResponseTransport.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/RequestResponseTransport.java Fri Jun 29 11:54:44 2007
@@ -79,6 +79,18 @@
      * @return
      */
     public RequestResponseTransportStatus getStatus();
+    
+    /**
+     * This will indicate whether or not the response has already been written
+     */
+    public boolean isResponseWritten();
+    
+    /**
+     * This is used to set the response written flag on the RequestResponseTransport 
+     * instance
+     */
+    public void setResponseWritten(boolean responseWritten);
+    
 
     /**
      * Used to give the current status of the RequestResponseTransport object.

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java Fri Jun 29 11:54:44 2007
@@ -37,6 +37,7 @@
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.SOAPMessageFormatter;
 import org.apache.axis2.util.JavaUtils;
+import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -358,4 +359,79 @@
         }
         return messageFormatterProperty;
     }
+    
+    
+        /**
+         * This is a helper method to get the response written flag from the RequestResponseTransport
+         * instance.
+         */
+        public static boolean isResponseWritten(MessageContext messageContext) {
+            RequestResponseTransport reqResTransport = getRequestResponseTransport(messageContext);
+            if (reqResTransport != null) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Found RequestResponseTransport returning isResponseWritten()");
+                }
+                return reqResTransport.isResponseWritten();
+            } else {
+                if (log.isDebugEnabled()) {
+                    log.debug("Did not find RequestResponseTransport returning false from get"
+                            + "ResponseWritten()");
+                }
+                return false;
+            }
+        }
+    
+       /**
+         * This is a helper method to set the response written flag on the RequestResponseTransport
+         * instance.
+        */
+       public static void setResponseWritten(MessageContext messageContext, boolean responseWritten) {
+            RequestResponseTransport reqResTransport = getRequestResponseTransport(messageContext);
+            if (reqResTransport != null) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Found RequestResponseTransport setting response written");
+                }
+                reqResTransport.setResponseWritten(responseWritten);
+            } else {
+                if (log.isDebugEnabled()) {
+                   log.debug("Did not find RequestResponseTransport cannot set response written");
+               }
+           }
+       }
+   
+       /**
+        * This is an internal helper method to retrieve the RequestResponseTransport instance
+        * from the MessageContext object. The MessageContext may be the response MessageContext so
+        * in that case we will have to retrieve the request MessageContext from the OperationContext.
+        */
+       private static RequestResponseTransport getRequestResponseTransport(MessageContext messageContext) {
+    	   try {
+    		   // If this is the request MessageContext we should find it directly by the getProperty()
+               // method
+               if (messageContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL) 
+            		   != null) {
+                   return (RequestResponseTransport) messageContext.getProperty(
+                		   RequestResponseTransport.TRANSPORT_CONTROL);
+               }
+                // If this is the response MessageContext we need to look for the request MessageContext
+        		else if (messageContext.getOperationContext() != null
+        				&& messageContext.getOperationContext()
+                      		.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE) != null) {
+        						return (RequestResponseTransport) messageContext.
+        						getOperationContext().getMessageContext(
+        								WSDLConstants.MESSAGE_LABEL_IN_VALUE).getProperty(
+        										RequestResponseTransport.TRANSPORT_CONTROL);
+        		} 
+        		else {
+        			return null;
+        		} 
+    	   }
+           catch(AxisFault af) {
+           	// probably should not be fatal, so just log the message
+           	String msg = Messages.getMessage("getMessageContextError", af.toString());
+           	log.debug(msg);
+           	return null;
+           }
+    }
+    
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AbstractHTTPSender.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AbstractHTTPSender.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AbstractHTTPSender.java Fri Jun 29 11:54:44 2007
@@ -140,13 +140,17 @@
         String sessionCookie = null;
         // Process old style headers first
         Header[] cookieHeaders = method.getResponseHeaders(HTTPConstants.HEADER_SET_COOKIE);
+        String customCoookiId = (String) msgContext.getProperty(Constants.CUSTOM_COOKIE_ID);
         for (int i = 0; i < cookieHeaders.length; i++) {
             HeaderElement[] elements = cookieHeaders[i].getElements();
             for (int e = 0; e < elements.length; e++) {
                 HeaderElement element = elements[e];
                 if (Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName()) ||
                         Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
-                    sessionCookie = element.getValue();
+                    sessionCookie = processCookieHeader(element);
+                }
+                if (customCoookiId != null && customCoookiId.equalsIgnoreCase(element.getName())) {
+                    sessionCookie = processCookieHeader(element);
                 }
             }
         }
@@ -158,7 +162,10 @@
                 HeaderElement element = elements[e];
                 if (Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName()) ||
                         Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
-                    sessionCookie = element.getValue();
+                    sessionCookie = processCookieHeader(element);
+                }
+                if(customCoookiId!=null&&customCoookiId.equalsIgnoreCase(element.getName())){
+                    sessionCookie = processCookieHeader(element);
                 }
             }
         }
@@ -168,6 +175,16 @@
         }
     }
 
+    private String processCookieHeader(HeaderElement element) {
+        String cookie = element.getName() + "=" + element.getValue();
+        NameValuePair[] parameters =  element.getParameters();
+        for (int j = 0; j < parameters.length; j++) {
+            NameValuePair parameter = parameters[j];
+            cookie = cookie + "; " + parameter.getName() + "=" + parameter.getValue();
+        }
+        return cookie;
+    }
+
     protected void processResponse(HttpMethodBase httpMethod,
                                    MessageContext msgContext)
             throws IOException {
@@ -378,8 +395,6 @@
 
         if (cookieString != null) {
             StringBuffer buffer = new StringBuffer();
-            buffer.append(Constants.SESSION_COOKIE_JSESSIONID);
-            buffer.append("=");
             buffer.append(cookieString);
             httpMethod.setRequestHeader(HTTPConstants.HEADER_COOKIE, buffer.toString());
         }
@@ -460,17 +475,11 @@
             HttpConnectionManager connManager =
                     (HttpConnectionManager) msgContext.getProperty(
                             HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER);
-            if(connManager==null){
-                connManager =
-                        new SimpleHttpConnectionManager();
-                msgContext.getConfigurationContext().
-                        setProperty(
-                                HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER,
-                                connManager);
-            }
-            if(msgContext.isServerSide()){
-                httpClient = new HttpClient();
+            if(connManager != null){
+                httpClient = new HttpClient(connManager);
             } else {
+                //Multi threaded http connection manager has set as the default 
+                connManager = new MultiThreadedHttpConnectionManager();
                 httpClient = new HttpClient(connManager);
             }
         }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/ApplicationXMLFormatter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/ApplicationXMLFormatter.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/ApplicationXMLFormatter.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/ApplicationXMLFormatter.java Fri Jun 29 11:54:44 2007
@@ -119,7 +119,7 @@
         if ((soapAction != null)
                 && !"".equals(soapAction.trim())
                 && !"\"\"".equals(soapAction.trim())) {
-            contentType = contentType + ";action=\"" + soapAction + "\";";
+            contentType = contentType;
         }
 
         return contentType;

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java Fri Jun 29 11:54:44 2007
@@ -44,6 +44,7 @@
 import org.apache.axis2.engine.ListenerManager;
 import org.apache.axis2.transport.RequestResponseTransport;
 import org.apache.axis2.transport.TransportListener;
+import org.apache.axis2.transport.TransportUtils;
 import org.apache.axis2.transport.http.server.HttpUtils;
 import org.apache.axis2.transport.http.util.RESTUtil;
 import org.apache.axis2.util.JavaUtils;
@@ -128,19 +129,16 @@
                             .getProperty(RequestResponseTransport.TRANSPORT_CONTROL))
                             .awaitResponse();
                 }
-
-                Object contextWritten = null;
-                OperationContext operationContext = msgContext.getOperationContext();
-
-                if (operationContext != null) {
-                    contextWritten = operationContext.getProperty(Constants.RESPONSE_WRITTEN);
-                }
-
                 response.setContentType("text/xml; charset="
                         + msgContext
                         .getProperty(Constants.Configuration.CHARACTER_SET_ENCODING));
-
-                if ((contextWritten == null) || !Constants.VALUE_TRUE.equals(contextWritten)) {
+                // if data has not been sent back and this is not a signal response
+                if (!TransportUtils.isResponseWritten(msgContext)  
+                		&& (((RequestResponseTransport) 
+                				msgContext.getProperty(
+                						RequestResponseTransport.TRANSPORT_CONTROL)).
+                						getStatus() != RequestResponseTransport.
+                						RequestResponseTransportStatus.SIGNALLED)) {
                     response.setStatus(HttpServletResponse.SC_ACCEPTED);
                 }
 
@@ -365,7 +363,6 @@
 
         MessageContext faultContext =
                 MessageContextBuilder.createFaultMessageContext(msgContext, e);
-        msgContext.setEnvelope(faultContext.getEnvelope());
         // SOAP 1.2 specification mentions that we should send HTTP code 400 in a fault if the
         // fault code Sender
         HttpServletResponse response =
@@ -671,6 +668,7 @@
 
     protected class ServletRequestResponseTransport implements RequestResponseTransport {
         private HttpServletResponse response;
+        private boolean responseWritten = false;
         private CountDownLatch responseReadySignal = new CountDownLatch(1);
         RequestResponseTransportStatus status = RequestResponseTransportStatus.INITIAL;
         AxisFault faultToBeThrownOut = null;
@@ -721,6 +719,15 @@
             faultToBeThrownOut = fault;
             signalResponseReady();
         }
+        
+        public boolean isResponseWritten() {
+        	return responseWritten;
+        }
+        
+        public void setResponseWritten(boolean responseWritten) {
+        	this.responseWritten = responseWritten;
+        }
+        
     }
 
     private void setResponseState(MessageContext messageContext, HttpServletResponse response) {
@@ -779,13 +786,8 @@
         }
 
         private void checkResponseWritten() {
-            OperationContext operationContext = messageContext.getOperationContext();
-            if (operationContext != null) {
-                Object contextWritten =
-                        operationContext.getProperty(Constants.RESPONSE_WRITTEN);
-                if ((contextWritten == null) || !Constants.VALUE_TRUE.equals(contextWritten)) {
-                    response.setStatus(HttpServletResponse.SC_ACCEPTED);
-                }
+        	if (!TransportUtils.isResponseWritten(messageContext)) {
+        		response.setStatus(HttpServletResponse.SC_ACCEPTED);
             }
         }
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java Fri Jun 29 11:54:44 2007
@@ -209,15 +209,8 @@
                 }
             }
 
-            /**
-             * We should only set the property Constants.RESPONSE_WRITTEN=true only if we are in the
-             * server side. If it is in the client side we may not know whether we have received the response
-             * in an async request/response case.
-             **/
-             if (msgContext.isServerSide()&& msgContext.getOperationContext() != null) {
-                msgContext.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
-                                                             Constants.VALUE_TRUE);
-            }
+            TransportUtils.setResponseWritten(msgContext, true);
+            
         } catch (XMLStreamException e) {
             log.debug(e);
             throw AxisFault.makeFault(e);

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java Fri Jun 29 11:54:44 2007
@@ -54,6 +54,9 @@
 public class HTTPTransportUtils {
 
 
+    /**
+     * @deprecated This was used only by the now deprecated processHTTPGetRequest() method. 
+     */
     public static SOAPEnvelope createEnvelopeFromGetRequest(String requestUrl,
                                                             Map map, ConfigurationContext configCtx)
             throws AxisFault {

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPWorker.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPWorker.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPWorker.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/HTTPWorker.java Fri Jun 29 11:54:44 2007
@@ -32,6 +32,7 @@
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.engine.Handler.InvocationResponse;
 import org.apache.axis2.transport.RequestResponseTransport;
+import org.apache.axis2.transport.TransportUtils;
 import org.apache.axis2.transport.http.server.AxisHttpRequest;
 import org.apache.axis2.transport.http.server.AxisHttpResponse;
 import org.apache.axis2.transport.http.server.HttpUtils;
@@ -280,14 +281,12 @@
         
         // Finalize response
         OperationContext operationContext = msgContext.getOperationContext();
-        Object contextWritten = null;
         Object isTwoChannel = null;
         if (operationContext != null) {
-            contextWritten = operationContext.getProperty(Constants.RESPONSE_WRITTEN);
             isTwoChannel = operationContext.getProperty(Constants.DIFFERENT_EPR);
         }
 
-        if ((contextWritten != null) && Constants.VALUE_TRUE.equals(contextWritten)) {
+        if (TransportUtils.isResponseWritten(msgContext)) {
             if ((isTwoChannel != null) && Constants.VALUE_TRUE.equals(isTwoChannel)) {
                 response.setStatus(HttpStatus.SC_ACCEPTED);
             }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/server/AxisHttpService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/server/AxisHttpService.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/server/AxisHttpService.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/server/AxisHttpService.java Fri Jun 29 11:54:44 2007
@@ -301,9 +301,10 @@
 
     class SimpleHTTPRequestResponseTransport implements RequestResponseTransport {
 
-        private CountDownLatch responseReadySignal = new CountDownLatch(1);
+		private CountDownLatch responseReadySignal = new CountDownLatch(1);
         RequestResponseTransportStatus status = RequestResponseTransportStatus.INITIAL;
         AxisFault faultToBeThrownOut = null;
+        private boolean responseWritten = false;
 
         public void acknowledgeMessage(MessageContext msgContext) throws AxisFault {
             //TODO: Once the core HTTP API allows us to return an ack before unwinding, then the should be fixed
@@ -332,6 +333,14 @@
             faultToBeThrownOut = fault;
             signalResponseReady();
         }
+        
+        public boolean isResponseWritten() {
+			return responseWritten;
+		}
+
+		public void setResponseWritten(boolean responseWritten) {
+			this.responseWritten = responseWritten;
+		}
 
     }
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/util/SOAPUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/util/SOAPUtil.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/util/SOAPUtil.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/http/util/SOAPUtil.java Fri Jun 29 11:54:44 2007
@@ -21,6 +21,7 @@
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.Parameter;
+import org.apache.axis2.transport.TransportUtils;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HTTPTransportUtils;
 import org.apache.axis2.util.JavaUtils;
@@ -67,16 +68,10 @@
                                                       soapAction,
                                                       request.getRequestURL().toString());
 
-            Object contextWritten = null;
-            if (msgContext.getOperationContext() != null) {
-                contextWritten =
-                        msgContext.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN);
-            }
-
             response.setContentType("text/xml; charset="
                     + msgContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING));
 
-            if ((contextWritten == null) || !Constants.VALUE_TRUE.equals(contextWritten)) {
+            if (!TransportUtils.isResponseWritten(msgContext)) {
                 Integer statusCode = (Integer) msgContext.getProperty(Constants.RESPONSE_CODE);
                 if (statusCode != null) {
                     response.setStatus(statusCode.intValue());

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java Fri Jun 29 11:54:44 2007
@@ -97,12 +97,8 @@
             }
         }
 
-        // TODO fix this, we do not set the value if the operation context is
-        // not available
-        if (msgContext.getOperationContext() != null) {
-            msgContext.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
-                                                         Constants.VALUE_TRUE);
-        }
+        TransportUtils.setResponseWritten(msgContext, true);
+        
         return InvocationResponse.CONTINUE;
     }
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java Fri Jun 29 11:54:44 2007
@@ -94,12 +94,8 @@
             }
         }
 
-        // TODO fix this, we do not set the value if the operation context is
-        // not available
-        if (msgContext.getOperationContext() != null) {
-            msgContext.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
-                                                         Constants.VALUE_TRUE);
-        }
+        TransportUtils.setResponseWritten(msgContext, true);
+        
         return InvocationResponse.CONTINUE;
     }
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/nhttp/HttpCoreRequestResponseTransport.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/nhttp/HttpCoreRequestResponseTransport.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/nhttp/HttpCoreRequestResponseTransport.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/nhttp/HttpCoreRequestResponseTransport.java Fri Jun 29 11:54:44 2007
@@ -37,9 +37,10 @@
  */
 public class HttpCoreRequestResponseTransport implements RequestResponseTransport {
 
-    private static final Log log = LogFactory.getLog(HttpCoreRequestResponseTransport.class);
+	private static final Log log = LogFactory.getLog(HttpCoreRequestResponseTransport.class);
     private RequestResponseTransportStatus status = RequestResponseTransportStatus.INITIAL;
     private MessageContext msgContext = null;
+    private boolean responseWritten = false;
 
     HttpCoreRequestResponseTransport(MessageContext msgContext) {
         this.msgContext = msgContext;
@@ -66,4 +67,12 @@
 
     public void signalFaultReady(AxisFault fault) {
     }
+    
+    public boolean isResponseWritten() {
+		return responseWritten;
+	}
+
+	public void setResponseWritten(boolean responseWritten) {
+		this.responseWritten = responseWritten;
+	}
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/tcp/TCPTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/tcp/TCPTransportSender.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/tcp/TCPTransportSender.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/transport/tcp/TCPTransportSender.java Fri Jun 29 11:54:44 2007
@@ -102,12 +102,8 @@
             }
         }
 
-        // TODO fix this, we do not set the value if the operation context is
-        // not available
-        if (msgContext.getOperationContext() != null) {
-            msgContext.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
-                                                         Constants.VALUE_TRUE);
-        }
+        TransportUtils.setResponseWritten(msgContext, true);
+        
         return InvocationResponse.CONTINUE;
     }
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/util/CommandLineOptionConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/util/CommandLineOptionConstants.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/util/CommandLineOptionConstants.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/util/CommandLineOptionConstants.java Fri Jun 29 11:54:44 2007
@@ -47,6 +47,8 @@
         String SOURCE_FOLDER_NAME_OPTION = "S";
         String RESOURCE_FOLDER_OPTION = "R";
         String XSDCONFIG_OPTION = "xc";
+        String All_PORTS_OPTION = "ap";
+        String OVERRIDE_OPTION = "or";
 
         //long option constants
         String OUTPUT_LOCATION_OPTION_LONG = "output";
@@ -76,6 +78,8 @@
         String SOURCE_FOLDER_NAME_OPTION_LONG = "source-folder";
         String RESOURCE_FOLDER_OPTION_LONG = "resource-folder";
         String XSDCONFIG_OPTION_LONG = "xsdconfig";
+        String All_PORTS_OPTION_LONG = "all-ports";
+        String OVERRIDE_OPTION_LONG = "over-ride";
 
         String WSDL_VERSION_2 = "2.0";
         String WSDL_VERSION_2_OPTIONAL = "2";

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/description/RegistryTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/description/RegistryTest.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/description/RegistryTest.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/description/RegistryTest.java Fri Jun 29 11:54:44 2007
@@ -89,7 +89,6 @@
         handler.init(new HandlerDescription());
         assertNull(handler.getName());
         assertNull(handler.getParameter("hello"));
-        handler.cleanup();
     }
 
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/EnginePausingTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/EnginePausingTest.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/EnginePausingTest.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/EnginePausingTest.java Fri Jun 29 11:54:44 2007
@@ -47,6 +47,9 @@
 
 public class EnginePausingTest extends TestCase {
 
+    public static final String FAULT_IDX = "FaultIndex";
+    public static final String FAULT_REASON = "I faulted because I was told to!";
+
     private QName serviceName = new QName("NullService");
     private QName operationName = new QName("DummyOp");
     private ConfigurationContext configContext;
@@ -182,21 +185,36 @@
     public void testReceive() throws Exception {
         mc.setTo(new EndpointReference("/axis2/services/NullService"));
         mc.setWSAAction("DummyOp");
-        AxisEngine engine = new AxisEngine(configContext);
-        engine.receive(mc);
+        AxisEngine.receive(mc);
         assertEquals(14, executedHandlers.size());
         for (int i = 0; i < 14; i++) {
             assertEquals(((Integer) executedHandlers.get(i)).intValue(),
                          i + 1);
         }
-        engine.resume(mc);
+        AxisEngine.resume(mc);
 
         assertEquals(27, executedHandlers.size());
         for (int i = 15; i < 27; i++) {
             assertEquals(((Integer) executedHandlers.get(i)).intValue(),
                          i + 1);
         }
+    }
 
+    public void testFlowComplete() throws Exception {
+        mc.setTo(new EndpointReference("/axis2/services/NullService"));
+        mc.setWSAAction("DummyOp");
+
+        // Fault on Handler #5
+        mc.setProperty(FAULT_IDX, new Integer(5));
+
+        try {
+            AxisEngine.receive(mc);
+        } catch (AxisFault axisFault) {
+            // Expected this fault.
+            assertEquals(4, executedHandlers.size());
+            return;
+        }
+        fail("Expected fault did not occur");
     }
 
     public class TempHandler extends AbstractHandler {
@@ -219,11 +237,27 @@
                 msgContext.pause();
                 pause = false;
                 return InvocationResponse.SUSPEND;
-            } else {
-                executedHandlers.add(index);
-                return InvocationResponse.CONTINUE;
             }
+
+            Integer faultIndex = (Integer)msgContext.getProperty(FAULT_IDX);
+            if (faultIndex != null && faultIndex.equals(index)) {
+                throw new AxisFault(FAULT_REASON);
+            }
+
+            executedHandlers.add(index);
+            return InvocationResponse.CONTINUE;
         }
 
+
+        public void flowComplete(MessageContext msgContext) {
+            if (msgContext.getProperty(FAULT_IDX) != null) {
+                // If we're here on an invocation where someone was supposed to fault...
+                AxisFault fault = (AxisFault)msgContext.getFailureReason();
+                assertNotNull("No fault!", fault);
+
+                // Make sure it's the right fault.
+                assertEquals(FAULT_REASON, fault.getReason());
+            }
+        }
     }
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextChangeTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextChangeTest.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextChangeTest.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextChangeTest.java Fri Jun 29 11:54:44 2007
@@ -109,6 +109,7 @@
                                  "class$org$apache$axis2$context$MessageContext"),
             new FieldDescription("java.lang.Class",
                                  "class$org$apache$axis2$context$SelfManagedDataManager"),
+            new FieldDescription("java.lang.Exception", "failureReason"),
     };
 
 

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java Fri Jun 29 11:54:44 2007
@@ -859,7 +859,7 @@
                 Integer value3 = (Integer) restoredSimpleMsg.getProperty("key3");
                 Long value4 = (Long) restoredSimpleMsg.getProperty("key4");
 
-                assertEquals(value1, "value1");
+                assertEquals("value1", value1);
                 assertNull(value2);
 
                 boolean isOk = false;

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/SOAPActionBasedDispatcherTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/SOAPActionBasedDispatcherTest.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/SOAPActionBasedDispatcherTest.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/test/org/apache/axis2/engine/SOAPActionBasedDispatcherTest.java Fri Jun 29 11:54:44 2007
@@ -15,6 +15,7 @@
 
 import junit.framework.TestCase;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.InOnlyAxisOperation;
@@ -25,7 +26,8 @@
 public class SOAPActionBasedDispatcherTest extends TestCase {
 
     public void testFindOperation() throws Exception {
-        MessageContext messageContext = new MessageContext();
+        ConfigurationContext cc = new ConfigurationContext(new AxisConfiguration());
+        MessageContext messageContext = cc.createMessageContext();
         AxisService as = new AxisService("Service1");
         messageContext.setAxisService(as);
 

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointInterfaceDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointInterfaceDescription.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointInterfaceDescription.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointInterfaceDescription.java Fri Jun 29 11:54:44 2007
@@ -49,6 +49,14 @@
  */
 
 public interface EndpointInterfaceDescription {
+    
+    /**
+     * The name of a special operation added to EndpointInterfaceDescriptions for provider 
+     * endpoints that do not specify WSDL, and therefore do not have specific WSDL operations
+     * created. Note that this is currently only supported for HTTP bindings, not for SOAP bindings.
+     */
+    public static String JAXWS_NOWSDL_PROVIDER_OPERATION_NAME = "jaxwsNoWSDLProviderOperation";
+
     public abstract EndpointDescription getEndpointDescription();
 
     public abstract String getTargetNamespace();

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java Fri Jun 29 11:54:44 2007
@@ -190,5 +190,18 @@
 
     public void setOperationRuntimeDesc(OperationRuntimeDescription ord);
 
+    /**
+     * For JAX-WS client-side async operations, this will return the corresponding sync 
+     * OperationDescription.
+     * 
+     * Note that if this method is used within the metadata layer, it is possible that it will return
+     * null.  That will happen if the metadata layer is constructed from annotations on the SEI 
+     * (not WSDL).  In that case, it is possible that the async methods on the SEI are processed 
+     * before the sync method.  In that case, there will be no sync method yet.  If this method
+     * is called outside the metadata layer, then if the async methods exist, the sync method
+     * should also exist.  
+     * 
+     * @return OperationDescription corresponding to the sync operation, or null (see note above).
+     */
     public OperationDescription getSyncOperation();
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Fri Jun 29 11:54:44 2007
@@ -336,8 +336,8 @@
 
         } else if (composite.getWsdlDefinition() == null) {
             //This is a SOAP12 binding that does not contain a WSDL definition, log a WARNING
-            log.warn("This implementation does not contain a WSDL definition and uses a SOAP 1.2 based binding. " +
-                    "Per JAXWS spec. - a WSDL definition cannot be generated for this implementation. Name: "
+            log.warn("This implementation does not contain a WSDL definition and is not a SOAP 1.1 based binding. "
+                    + "Per JAXWS spec. - a WSDL definition cannot be generated for this implementation. Name: "
                     + composite.getClassName());
         }
 
@@ -547,7 +547,15 @@
                 }
             }
         } else {
-            //TODO: process a WebServiceProvider
+            if (log.isDebugEnabled()) {
+                log.debug("WebServiceProvider without WSDL encountered");
+            }
+            // REVIEW: Currently this is only supported for HTTP Bindings; SOAPBindings
+            //     for providers currently require that there be WSDL.
+            String bindingType = getBindingType();
+            if (javax.xml.ws.http.HTTPBinding.HTTP_BINDING.equals(bindingType)) {
+                endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(composite, this);
+            }
         }
     }
 

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java?view=diff&rev=551999&r1=551998&r2=551999
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java Fri Jun 29 11:54:44 2007
@@ -18,7 +18,9 @@
 
 package org.apache.axis2.jaxws.description.impl;
 
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.description.EndpointDescription;
@@ -30,6 +32,7 @@
 import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
 import org.apache.axis2.jaxws.description.builder.MDQConstants;
 import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite;
+import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -124,10 +127,52 @@
             }
         }
     }
+    /**
+     * Construct as Provider-based endpoint which does not have specific WSDL operations.  Since there
+     * are no specific WSDL operations in this case, there will be a single generic operation that
+     * will accept any incoming operation.
+     * 
+     * @param dbc
+     * @param parent
+     */
+    EndpointInterfaceDescriptionImpl(DescriptionBuilderComposite dbc, 
+                                     EndpointDescriptionImpl parent) {
+        if (log.isDebugEnabled()) {
+            log.debug("Creating a EndpointInterfaceDescription for a generic WSDL-less provider");
+        }
+        parentEndpointDescription = parent;
+        this.dbc = dbc;
+        
+        // Construct the generic provider AxisOperation to use then construct
+        // an OperactionDescription for it.
+        AxisOperation genericProviderAxisOp = null;
+        try {
+            genericProviderAxisOp = 
+                AxisOperationFactory.getOperationDescription(WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_OUT);
+        } catch (AxisFault e) {
+            if (log.isDebugEnabled()) {
+                log.debug("Unable to build AxisOperation for generic Provider; caught exception.", e);
+            }
+            // TODO: NLS & RAS
+            throw ExceptionFactory.makeWebServiceException("Caught exception trying to create AxisOperation",
+                                                           e);
+        }
+        
+        genericProviderAxisOp.setName(new QName(JAXWS_NOWSDL_PROVIDER_OPERATION_NAME));
+        OperationDescription opDesc = new OperationDescriptionImpl(genericProviderAxisOp, this);
+        
+        addOperation(opDesc);
+        AxisService axisService = getEndpointDescription().getAxisService();
+        axisService.addOperation(genericProviderAxisOp);
+    }
 
     /**
-     * Build an EndpointInterfaceDescription from a DescriptionBuilderComposite
-     *
+     * Build an EndpointInterfaceDescription from a DescriptionBuilderComposite.  This EID has
+     * WSDL operations associated with it.  It could represent an SEI-based endpoint built from
+     * WSDL or annotations, OR it could represent a Provider-based enpoint built from WSDL.  It will
+     * not represent a Provider-based endpoint built without WSDL (which does not know about
+     * specific WSDL operations). For that type of EID, see:
+     * @see  #EndpointInterfaceDescriptionImpl(DescriptionBuilderComposite dbc, EndpointDescriptionImpl parent)
      * @param dbc
      * @param isClass
      * @param parent



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org