You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by sa...@apache.org on 2013/01/31 13:21:16 UTC

git commit: ODE-957: Changes to handle invocation of external services which doesn't specify input message.

Updated Branches:
  refs/heads/master 4846c85c9 -> d4bc4147d


ODE-957: Changes to handle invocation of external services which doesn't specify input message.


Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/d4bc4147
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/d4bc4147
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/d4bc4147

Branch: refs/heads/master
Commit: d4bc4147d20bd2c7ce3f4df8e37863eaf4eb0478
Parents: 4846c85
Author: sathwik <sa...@apache.org>
Authored: Thu Jan 31 17:23:45 2013 +0530
Committer: sathwik <sa...@apache.org>
Committed: Thu Jan 31 17:23:45 2013 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/DummyService.java    |    4 +
 .../ode/axis2/NoInputMessageInvocationTest.java    |   41 ++++++
 .../NoArgumentInvocationProcess.bpel               |  113 +++++++++++++++
 .../NoArgumentInvocationProcessArtifacts.wsdl      |  112 ++++++++++++++
 .../TestNoInputMessageInvocation/deploy.xml        |   33 +++++
 .../dummy-service.wsdl                             |   65 +++++++++
 .../TestNoInputMessageInvocation/testRequest.soap  |   28 ++++
 .../ode/axis2/util/SoapMessageConverter.java       |   23 +++-
 .../ode/bpel/engine/BpelRuntimeContextImpl.java    |   14 ++-
 .../java/org/apache/ode/bpel/runtime/INVOKE.java   |    2 +-
 .../org/apache/ode/dao/jpa/MessageDAOImpl.java     |    4 +-
 11 files changed, 429 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java b/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
index af70061..ff89390 100644
--- a/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/DummyService.java
@@ -62,4 +62,8 @@ public class DummyService {
         throw new AxisFault(new QName("http://schemas.xmlsoap.org/soap/envelope/", "Client"), "dummy reason",
                 "dummy node", "dummy role", root);
     }
+
+    public String noArgmentMethod(){
+        return "noArgmentMethod invocation was successfull";
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/java/org/apache/ode/axis2/NoInputMessageInvocationTest.java
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/java/org/apache/ode/axis2/NoInputMessageInvocationTest.java b/axis2-war/src/test/java/org/apache/ode/axis2/NoInputMessageInvocationTest.java
new file mode 100644
index 0000000..590a267
--- /dev/null
+++ b/axis2-war/src/test/java/org/apache/ode/axis2/NoInputMessageInvocationTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.ode.axis2;
+
+import org.testng.annotations.Test;
+import static org.testng.AssertJUnit.assertTrue;
+
+public class NoInputMessageInvocationTest extends Axis2TestBase {
+    @Test(dataProvider="configs")
+    public void test() throws Exception {
+        String bundleName = "TestNoInputMessageInvocation";
+        server.deployService(DummyService.class.getCanonicalName());
+        if (server.isDeployed(bundleName)) server.undeployProcess(bundleName);
+        server.deployProcess(bundleName);
+        try {
+            String response = sendRequestFile("http://localhost:8888/ode/processes/NoArgumentInvocationProcess",
+                    bundleName, "testRequest.soap");
+            System.out.println(response);
+            assertTrue(response.contains("noArgmentMethod invocation was successfull"));
+        } finally {
+            server.undeployProcess(bundleName);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcess.bpel
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcess.bpel b/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcess.bpel
new file mode 100644
index 0000000..57c66b8
--- /dev/null
+++ b/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcess.bpel
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<!-- NoArgumentInvocationProcess BPEL Process [Generated by the Eclipse BPEL Designer] -->
+<!-- Date: Wed Jan 30 11:02:23 IST 2013 -->
+<bpel:process name="NoArgumentInvocationProcess"
+         targetNamespace="http://example.ord/samples/"
+         suppressJoinFailure="yes"
+         xmlns:tns="http://example.ord/samples/"
+         xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
+         xmlns:ns="http://axis2.ode.apache.org">
+
+    <!-- Import the client WSDL -->
+	<bpel:import location="NoArgumentInvocationProcessArtifacts.wsdl" namespace="http://example.ord/samples/"
+	        importType="http://schemas.xmlsoap.org/wsdl/" />
+
+    <!-- ================================================================= -->
+    <!-- PARTNERLINKS                                                      -->
+    <!-- List of services participating in this BPEL process               -->
+    <!-- ================================================================= -->
+    <bpel:partnerLinks>
+        <!-- The 'client' role represents the requester of this service. -->
+        <bpel:partnerLink name="client"
+                     partnerLinkType="tns:NoArgumentInvocationProcess"
+                     myRole="NoArgumentInvocationProcessProvider"
+                     />
+        <bpel:partnerLink name="axis2VersionPL" partnerLinkType="tns:axis2VersionPLT" partnerRole="myRole"></bpel:partnerLink>
+    </bpel:partnerLinks>
+
+    <!-- ================================================================= -->
+    <!-- VARIABLES                                                         -->
+    <!-- List of messages and XML documents used within this BPEL process  -->
+    <!-- ================================================================= -->
+    <bpel:variables>
+        <!-- Reference to the message passed as input during initiation -->
+        <bpel:variable name="input"
+                  messageType="tns:NoArgumentInvocationProcessRequestMessage"/>
+
+        <!--
+          Reference to the message that will be returned to the requester
+          -->
+        <bpel:variable name="output"
+                  messageType="tns:NoArgumentInvocationProcessResponseMessage">
+        </bpel:variable>
+        <bpel:variable name="noArgmentMethodResponse" messageType="ns:noArgmentMethodResponse"></bpel:variable>
+    </bpel:variables>
+
+    <!-- ================================================================= -->
+    <!-- ORCHESTRATION LOGIC                                               -->
+    <!-- Set of activities coordinating the flow of messages across the    -->
+    <!-- services integrated within this business process                  -->
+    <!-- ================================================================= -->
+    <bpel:sequence name="main">
+
+        <!-- Receive input from requester.
+             Note: This maps to operation defined in NoArgumentInvocationProcess.wsdl
+             -->
+        <bpel:receive name="receiveInput" partnerLink="client"
+                 portType="tns:NoArgumentInvocationProcess"
+                 operation="process" variable="input"
+                 createInstance="yes"/>
+
+        <!-- Generate reply to synchronous request -->
+        <bpel:assign validate="no" name="Assign">
+            <bpel:copy>
+                <bpel:from>
+                    <bpel:literal xml:space="preserve"><tns:NoArgumentInvocationProcessResponse xmlns:tns="http://example.ord/samples/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <tns:result>tns:result</tns:result>
+</tns:NoArgumentInvocationProcessResponse>
+</bpel:literal>
+                </bpel:from>
+                <bpel:to part="payload" variable="output"></bpel:to>
+            </bpel:copy>
+        </bpel:assign>
+        <bpel:invoke name="Invoke" partnerLink="axis2VersionPL" operation="noArgmentMethod" portType="ns:DummyServicePortType" inputVariable="" outputVariable="noArgmentMethodResponse"></bpel:invoke>
+
+
+        <bpel:assign validate="no" name="Assign1">
+            <bpel:copy>
+                <bpel:from part="parameters" variable="noArgmentMethodResponse">
+                    <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[return]]></bpel:query>
+                </bpel:from>
+                <bpel:to part="payload" variable="output">
+                    <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:result]]></bpel:query>
+                </bpel:to>
+            </bpel:copy>
+        </bpel:assign>
+        <bpel:reply name="replyOutput"
+               partnerLink="client"
+               portType="tns:NoArgumentInvocationProcess"
+               operation="process"
+               variable="output"
+               />
+    </bpel:sequence>
+</bpel:process>
+

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcessArtifacts.wsdl
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcessArtifacts.wsdl b/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcessArtifacts.wsdl
new file mode 100644
index 0000000..56a30ae
--- /dev/null
+++ b/axis2-war/src/test/resources/TestNoInputMessageInvocation/NoArgumentInvocationProcessArtifacts.wsdl
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://example.ord/samples/" xmlns:vprop="http://docs.oasis-open.org/wsbpel/2.0/varprop" xmlns:wsdl="http://axis2.ode.apache.org" name="NoArgumentInvocationProcess" targetNamespace="http://example.ord/samples/">
+
+<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     TYPE DEFINITION - List of types participating in this BPEL process
+     The BPEL Designer will generate default request and response types
+     but you can define or import any XML Schema type and use them as part
+     of the message types.
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <plnk:partnerLinkType name="axis2VersionPLT">
+    <plnk:role name="myRole" portType="wsdl:DummyServicePortType"/>
+  </plnk:partnerLinkType>
+    <import location="dummy-service.wsdl" namespace="http://axis2.ode.apache.org"/>
+    <types>
+        <schema xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://example.ord/samples/">
+
+            <element name="NoArgumentInvocationProcessRequest">
+                <complexType>
+                    <sequence>
+                        <element name="input" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+
+            <element name="NoArgumentInvocationProcessResponse">
+                <complexType>
+                    <sequence>
+                        <element name="result" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+        </schema>
+    </types>
+
+
+<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     MESSAGE TYPE DEFINITION - Definition of the message types used as
+     part of the port type defintions
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <message name="NoArgumentInvocationProcessRequestMessage">
+        <part element="tns:NoArgumentInvocationProcessRequest" name="payload"/>
+    </message>
+    <message name="NoArgumentInvocationProcessResponseMessage">
+        <part element="tns:NoArgumentInvocationProcessResponse" name="payload"/>
+    </message>
+
+<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     PORT TYPE DEFINITION - A port type groups a set of operations into
+     a logical service unit.
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+
+    <!-- portType implemented by the NoArgumentInvocationProcess BPEL process -->
+    <portType name="NoArgumentInvocationProcess">
+        <operation name="process">
+            <input message="tns:NoArgumentInvocationProcessRequestMessage"/>
+            <output message="tns:NoArgumentInvocationProcessResponseMessage"/>
+        </operation>
+    </portType>
+<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     PARTNER LINK TYPE DEFINITION
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <plnk:partnerLinkType name="NoArgumentInvocationProcess">
+        <plnk:role name="NoArgumentInvocationProcessProvider" portType="tns:NoArgumentInvocationProcess"/>
+    </plnk:partnerLinkType>
+
+
+<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     BINDING DEFINITION - Defines the message format and protocol details
+     for a web service.
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <binding name="NoArgumentInvocationProcessBinding" type="tns:NoArgumentInvocationProcess">
+        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+        <operation name="process">
+            <soap:operation soapAction="http://example.ord/samples//process"/>
+            <input>
+                <soap:body use="literal"/>
+            </input>
+            <output>
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+
+<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     SERVICE DEFINITION - A service groups a set of ports into
+     a service unit.
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <service name="NoArgumentInvocationProcessService">
+        <port binding="tns:NoArgumentInvocationProcessBinding" name="NoArgumentInvocationProcessPort">
+            <soap:address location="http://localhost:8888/ode/processes/NoArgumentInvocationProcess"/>
+        </port>
+    </service>
+</definitions>

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/resources/TestNoInputMessageInvocation/deploy.xml
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/resources/TestNoInputMessageInvocation/deploy.xml b/axis2-war/src/test/resources/TestNoInputMessageInvocation/deploy.xml
new file mode 100644
index 0000000..f67b4b1
--- /dev/null
+++ b/axis2-war/src/test/resources/TestNoInputMessageInvocation/deploy.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" xmlns:dns="http://axis2.ode.apache.org" xmlns:samples="http://example.ord/samples/">
+  <process name="samples:NoArgumentInvocationProcess">
+    <active>true</active>
+    <retired>false</retired>
+    <process-events generate="none"/>
+    <provide partnerLink="client">
+      <service name="samples:NoArgumentInvocationProcessService" port="NoArgumentInvocationProcessPort"/>
+    </provide>
+    <invoke partnerLink="axis2VersionPL">
+      <service name="dns:DummyService" port="DummyServiceSOAP11port_http"/>
+    </invoke>
+  </process>
+</deploy>

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/resources/TestNoInputMessageInvocation/dummy-service.wsdl
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/resources/TestNoInputMessageInvocation/dummy-service.wsdl b/axis2-war/src/test/resources/TestNoInputMessageInvocation/dummy-service.wsdl
new file mode 100644
index 0000000..eec301f
--- /dev/null
+++ b/axis2-war/src/test/resources/TestNoInputMessageInvocation/dummy-service.wsdl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+                  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+                  xmlns:ns0="http://axis2.ode.apache.org/xsd"
+                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
+                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+                  xmlns:ns1="http://axis2.ode.apache.org"
+                  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+                  targetNamespace="http://axis2.ode.apache.org">
+   <wsdl:types>
+      <xs:schema xmlns:ns="http://axis2.ode.apache.org" attributeFormDefault="qualified"
+                 elementFormDefault="unqualified" targetNamespace="http://axis2.ode.apache.org">
+         <xs:element name="noArgmentMethodResponse">
+            <xs:complexType>
+               <xs:sequence>
+                  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
+               </xs:sequence>
+            </xs:complexType>
+         </xs:element>
+
+      </xs:schema>
+   </wsdl:types>
+   <wsdl:message name="noArgmentMethodResponse">
+      <wsdl:part name="parameters" element="ns1:noArgmentMethodResponse"/>
+   </wsdl:message>
+   <wsdl:portType name="DummyServicePortType">
+      <wsdl:operation name="noArgmentMethod">
+         <wsdl:output message="ns1:noArgmentMethodResponse" wsaw:Action="urn:noArgmentMethodResponse"/>
+      </wsdl:operation>
+   </wsdl:portType>
+   <wsdl:binding name="DummyServiceSOAP11Binding" type="ns1:DummyServicePortType">
+      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+       <wsdl:operation name="noArgmentMethod">
+         <soap:operation soapAction="urn:noArgmentMethod" style="document"/>
+         <wsdl:output>
+            <soap:body use="literal"/>
+         </wsdl:output>
+      </wsdl:operation>
+   </wsdl:binding>
+   <wsdl:service name="DummyService">
+      <wsdl:port name="DummyServiceSOAP11port_http" binding="ns1:DummyServiceSOAP11Binding">
+         <soap:address location="http://localhost:8888/ode/processes/DummyService"/>
+      </wsdl:port>
+   </wsdl:service>
+</wsdl:definitions>

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2-war/src/test/resources/TestNoInputMessageInvocation/testRequest.soap
----------------------------------------------------------------------
diff --git a/axis2-war/src/test/resources/TestNoInputMessageInvocation/testRequest.soap b/axis2-war/src/test/resources/TestNoInputMessageInvocation/testRequest.soap
new file mode 100644
index 0000000..f14bf53
--- /dev/null
+++ b/axis2-war/src/test/resources/TestNoInputMessageInvocation/testRequest.soap
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://example.ord/samples/">
+   <soapenv:Header/>
+   <soapenv:Body>
+      <sam:NoArgumentInvocationProcessRequest>
+         <sam:input />
+      </sam:NoArgumentInvocationProcessRequest>
+   </soapenv:Body>
+</soapenv:Envelope>

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java b/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
index 636b468..382d3a9 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
@@ -143,7 +143,7 @@ public class SoapMessageConverter {
         if (op == null)
             throw new NullPointerException("Null operation");
         // The message can be null if the input message has no part
-        if (op.getInput().getMessage().getParts().size() > 0 && message == null)
+        if (op.getInput() != null && op.getInput().getMessage().getParts().size() > 0 && message == null)
             throw new NullPointerException("Null message.");
         if (msgCtx == null)
             throw new NullPointerException("Null msgCtx");
@@ -155,20 +155,21 @@ public class SoapMessageConverter {
 
         BindingInput bi = bop.getBindingInput();
         if (bi == null)
-            throw new OdeFault(__msgs.msgBindingInputNotFound(_serviceName, _portName, op.getName()));
+            //throw new OdeFault(__msgs.msgBindingInputNotFound(_serviceName, _portName, op.getName()));
+            __log.warn(__msgs.msgBindingInputNotFound(_serviceName, _portName, op.getName()));
 
         SOAPEnvelope soapEnv = msgCtx.getEnvelope();
         if (soapEnv == null) {
             soapEnv = _soapFactory.getDefaultEnvelope();
             msgCtx.setEnvelope(soapEnv);
         }
-
-        createSoapHeaders(soapEnv, getSOAPHeaders(bi), op.getInput().getMessage(), message.getHeaderParts());
+        Message inputMessage = (op.getInput() != null) ? op.getInput().getMessage() : null;
+        createSoapHeaders(soapEnv, getSOAPHeaders(bi), inputMessage, message.getHeaderParts());
 
         SOAPBody soapBody = getSOAPBody(bi);
         if (soapBody != null) {
             org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ? _soapFactory.createSOAPBody(soapEnv) : soapEnv.getBody();
-            createSoapBody(sb, soapBody, op.getInput().getMessage(), message.getMessage(), op.getName());
+            createSoapBody(sb, soapBody, inputMessage, message.getMessage(), op.getName());
         }
 
     }
@@ -207,6 +208,9 @@ public class SoapMessageConverter {
     }
 
     public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, Map<String,Node> headers) throws AxisFault {
+        if (msgdef == null)
+            return;
+
         for (SOAPHeader sh : headerDefs) handleSoapHeaderDef(soapEnv, sh, msgdef, headers);
 
         org.apache.axiom.soap.SOAPHeader soaphdr = soapEnv.getHeader();
@@ -343,6 +347,9 @@ public class SoapMessageConverter {
     @SuppressWarnings("unchecked")
     public void createSoapBody(org.apache.axiom.soap.SOAPBody sb, SOAPBody soapBody, Message msgDef,
                                Element message, String rpcWrapper) throws AxisFault {
+        if (msgDef == null)
+            return;
+
         OMElement partHolder = _isRPC ? _soapFactory
                 .createOMElement(new QName(soapBody.getNamespaceURI(), rpcWrapper, "odens"), sb) : sb;
 
@@ -464,11 +471,17 @@ public class SoapMessageConverter {
 
     @SuppressWarnings("unchecked")
     public static List<SOAPHeader> getSOAPHeaders(ElementExtensible eee) {
+        if (eee == null)
+            return null;
+
         return CollectionsX.filter(new ArrayList<SOAPHeader>(), (Collection<Object>) eee.getExtensibilityElements(),
                 SOAPHeader.class);
     }
 
     public static <T> T getFirstExtensibilityElement(ElementExtensible parent, Class<T> cls) {
+        if (parent == null)
+            return null;
+
         Collection<T> ee = CollectionsX.filter(parent.getExtensibilityElements(), cls);
 
         return ee.isEmpty() ? null : ee.iterator().next();

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
index b2f75ea..e73cacd 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
@@ -746,9 +746,19 @@ public class BpelRuntimeContextImpl implements BpelRuntimeContext {
         if (__log.isDebugEnabled())
             __log.debug("INVOKE PARTNER (SEP): sessionId=" + mySessionId + " partnerSessionId=" + partnerSessionId);
 
-        MessageDAO message = mexDao.createMessage(operation.getInput().getMessage().getQName());
+        MessageDAO message = null;
+
+        if (operation.getInput() != null)
+            message = mexDao.createMessage(operation.getInput().getMessage().getQName());
+        else
+            message = mexDao.createMessage(null);
+
         mexDao.setRequest(message);
-        message.setType(operation.getInput().getMessage().getQName());
+
+        if (operation.getInput() != null)
+            message.setType(operation.getInput().getMessage().getQName());
+        else
+            message.setType(null);
         buildOutgoingMessage(message, outgoingMessage);
 
         // Get he my-role EPR (if myrole exists) for optional use by partner

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
index d67d716..1a9d0a9 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/INVOKE.java
@@ -218,7 +218,7 @@ public class INVOKE extends ACTIVITY {
             initializeCorrelation(_scopeFrame.resolve(c), _scopeFrame.resolve(oinvoke.inputVar));
         }
 
-        if (oinvoke.operation.getInput().getMessage().getParts().size() > 0) {
+        if ((oinvoke.operation.getInput() != null) && (oinvoke.operation.getInput().getMessage().getParts().size() > 0)) {
             sendVariableReadEvent(_scopeFrame.resolve(oinvoke.inputVar));
             Node outboundMsg = fetchVariableData(_scopeFrame.resolve(oinvoke.inputVar), false);
             // TODO outbound message should be updated with non-initiate correlation sets

http://git-wip-us.apache.org/repos/asf/ode/blob/d4bc4147/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
----------------------------------------------------------------------
diff --git a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
index a92b7ad..1278b1d 100644
--- a/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
+++ b/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
@@ -71,7 +71,7 @@ public class MessageDAOImpl implements MessageDAO {
     }
 
     public MessageDAOImpl(QName type, MessageExchangeDAOImpl me) {
-        _type = type.toString();
+        _type = (type != null) ? type.toString() : null;
         _messageExchange = me;
     }
 
@@ -123,7 +123,7 @@ public class MessageDAOImpl implements MessageDAO {
     }
 
     public void setType(QName type) {
-        _type = type.toString();
+        _type = (type != null) ? type.toString() : null;
     }
 
 }