summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/SynchronousCallback.java
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2009-05-11 07:45:29 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2009-05-11 07:45:29 +0000
commita3cbf8e5ffabac239cd965d8c0f9c680a83246f7 (patch)
tree03eede7de9657506784538ce0e3786a808e4ab22 /branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/SynchronousCallback.java
parenta7a97f2875dc162750736b9611e3e8bc8c13f145 (diff)
Add a new soap/jms transport module copied from the Apache WS Commons transports but with the code backported to work with Axis2 1.4.1
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@773489 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/SynchronousCallback.java109
1 files changed, 109 insertions, 0 deletions
diff --git a/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/SynchronousCallback.java b/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/SynchronousCallback.java
new file mode 100644
index 0000000000..1016e88a82
--- /dev/null
+++ b/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/SynchronousCallback.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.binding.ws.axis2.transport.base;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.AxisMessage;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.wsdl.WSDLConstants;
+
+
+public class SynchronousCallback {
+
+ private MessageContext outMessageContext;
+ private MessageContext inMessageContext;
+
+ private boolean isComplete;
+
+ public SynchronousCallback(MessageContext outMessageContext) {
+ this.outMessageContext = outMessageContext;
+ this.isComplete = false;
+ }
+
+ public synchronized void setInMessageContext(MessageContext inMessageContext) throws AxisFault {
+
+ // if some other thread has access and complete then return without doing any thing.
+ // thread should have activate by the first message.
+ if (!isComplete) {
+ // this code is invoked only if the code use with axis2 at the client side
+ // when axis2 client receive messages it waits in the sending thread until the response comes.
+ // so this thread only notify the waiting thread and hence we need to build the message here.
+ inMessageContext.getEnvelope().build();
+ OperationContext operationContext = outMessageContext.getOperationContext();
+ MessageContext msgCtx =
+ operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+
+ if (msgCtx == null) {
+ // try to see whether there is a piggy back message context
+ if (outMessageContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE) != null) {
+
+ msgCtx = (MessageContext) outMessageContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE);
+ msgCtx.setTransportIn(inMessageContext.getTransportIn());
+ msgCtx.setTransportOut(inMessageContext.getTransportOut());
+ msgCtx.setServerSide(false);
+ msgCtx.setProperty(BaseConstants.MAIL_CONTENT_TYPE,
+ inMessageContext.getProperty(BaseConstants.MAIL_CONTENT_TYPE));
+ // FIXME: this class must not be transport dependent since it is used by AbstractTransportListener
+ msgCtx.setIncomingTransportName(org.apache.axis2.Constants.TRANSPORT_MAIL);
+ msgCtx.setEnvelope(inMessageContext.getEnvelope());
+
+ } else {
+ inMessageContext.setOperationContext(operationContext);
+ inMessageContext.setServiceContext(outMessageContext.getServiceContext());
+ if (!operationContext.isComplete()) {
+ operationContext.addMessageContext(inMessageContext);
+ }
+ AxisOperation axisOp = operationContext.getAxisOperation();
+ AxisMessage inMessage = axisOp.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ inMessageContext.setAxisMessage(inMessage);
+ inMessageContext.setServerSide(false);
+ }
+
+ } else {
+ msgCtx.setOperationContext(operationContext);
+ msgCtx.setServiceContext(outMessageContext.getServiceContext());
+ AxisOperation axisOp = operationContext.getAxisOperation();
+ AxisMessage inMessage = axisOp.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ msgCtx.setAxisMessage(inMessage);
+ msgCtx.setTransportIn(inMessageContext.getTransportIn());
+ msgCtx.setTransportOut(inMessageContext.getTransportOut());
+ msgCtx.setServerSide(false);
+ msgCtx.setProperty(BaseConstants.MAIL_CONTENT_TYPE,
+ inMessageContext.getProperty(BaseConstants.MAIL_CONTENT_TYPE));
+ // FIXME: this class must not be transport dependent since it is used by AbstractTransportListener
+ msgCtx.setIncomingTransportName(org.apache.axis2.Constants.TRANSPORT_MAIL);
+ msgCtx.setEnvelope(inMessageContext.getEnvelope());
+
+ }
+ this.inMessageContext = inMessageContext;
+ isComplete = true;
+ this.notifyAll();
+ }
+
+ }
+
+
+ public boolean isComplete() {
+ return isComplete;
+ }
+
+ public void setComplete(boolean complete) {
+ isComplete = complete;
+ }
+
+}