Author: chamikara
Date: Sun May 20 09:36:45 2007
New Revision: 539890
URL: http://svn.apache.org/viewvc?view=rev&rev=539890
Log:
Changed the SenderWorker.checkForsyncResponse to accept an response MsgContext
if one is alread available.
A bug fix in the MsgInitializer
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java?view=diff&rev=539890&r1=539889&r2=539890
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/MsgInitializer.java
Sun May 20 09:36:45 2007
@@ -147,7 +147,9 @@
if (elements.getMakeConnection() != null) {
rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.MAKE_CONNECTION,
elements.getMakeConnection());
- rmNamespace =
elements.getMakeConnection().getNamespaceValue();
+ String makeConnectionNamespace =
elements.getMakeConnection().getNamespaceValue();
+ if
(Sandesha2Constants.SPEC_2007_02.MC_NS_URI.equals(makeConnectionNamespace))
+ rmNamespace =
Sandesha2Constants.SPEC_2007_02.NS_URI;
}
if (elements.getMessagePending() != null) {
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=539890&r1=539889&r2=539890
==============================================================================
---
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
(original)
+++
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
Sun May 20 09:36:45 2007
@@ -16,6 +16,7 @@
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.OutInAxisOperation;
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.engine.Handler.InvocationResponse;
import org.apache.axis2.transport.RequestResponseTransport;
@@ -464,91 +465,88 @@
try {
- boolean responsePresent =
(msgCtx.getProperty(MessageContext.TRANSPORT_IN) != null);
- if (!responsePresent) {
- if(log.isDebugEnabled()) log.debug("Exit:
SenderWorker::checkForSyncResponses, no response present");
- return;
- }
-
// create the responseMessageContext
- MessageContext responseMessageContext = new
MessageContext();
-
- OperationContext requestMsgOpCtx =
msgCtx.getOperationContext();
-
responseMessageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
requestMsgOpCtx
-
.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING));
-
responseMessageContext.setProperty(Constants.Configuration.CONTENT_TYPE,
requestMsgOpCtx
-
.getProperty(Constants.Configuration.CONTENT_TYPE));
-
responseMessageContext.setProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE,
requestMsgOpCtx
-
.getProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE));
-
- //If the response MsgCtx was not available Axis2 would hv put the
transport info into a
- //HashMap, getting the data from it.
- HashMap transportInfoMap = (HashMap)
msgCtx.getProperty(Constants.Configuration.TRANSPORT_INFO_MAP);
- if (transportInfoMap != null) {
-
responseMessageContext.setProperty(Constants.Configuration.CONTENT_TYPE,
-
transportInfoMap.get(Constants.Configuration.CONTENT_TYPE));
-
responseMessageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-
transportInfoMap.get(Constants.Configuration.CHARACTER_SET_ENCODING));
- }
-
- //setting the message as serverSide will let it go
through the MessageReceiver (may be callback MR).
- responseMessageContext.setServerSide(true);
-
- if (responseMessageContext.getSoapAction()==null) {
- //if there is no SOAP action in the response
message, Axis2 will wrongly identify it as a REST message
- //This happens because we set serverSide to
True in a previous step.
- //So we have to add a empty SOAPAction here.
- responseMessageContext.setSoapAction("");
- }
-
-
responseMessageContext.setConfigurationContext(msgCtx.getConfigurationContext());
-
responseMessageContext.setTransportIn(msgCtx.getTransportIn());
-
responseMessageContext.setTransportOut(msgCtx.getTransportOut());
-
-
responseMessageContext.setProperty(MessageContext.TRANSPORT_IN, msgCtx
-
.getProperty(MessageContext.TRANSPORT_IN));
-
responseMessageContext.setServiceContext(msgCtx.getServiceContext());
-
responseMessageContext.setServiceGroupContext(msgCtx.getServiceGroupContext());
-
-
responseMessageContext.setProperty(Sandesha2Constants.MessageContextProperties.MAKECONNECTION_ENTRY,
-
msgCtx.getProperty(Sandesha2Constants.MessageContextProperties.MAKECONNECTION_ENTRY));
-
- // If request is REST we assume the
responseMessageContext is REST,
- // so set the variable
-
-
responseMessageContext.setDoingREST(msgCtx.isDoingREST());
-
+ MessageContext responseMessageContext =
msgCtx.getOperationContext().getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
SOAPEnvelope resenvelope = null;
- try {
- // MessageContext is modified in
TransportUtils.createSOAPMessage(). It might be used by axis.engine or handler.
- // To catch the modification and pass it to
engine or handler, resenvelope is created by responseMessageContext.
- resenvelope =
TransportUtils.createSOAPMessage(responseMessageContext);
- } catch (AxisFault e) {
- //Cannot find a valid SOAP envelope.
- if (log.isErrorEnabled() ) {
- log.error (SandeshaMessageHelper
-
.getMessage(SandeshaMessageKeys.soapEnvNotSet));
- log.error ("Caught exception", e);
- }
-
+
+ boolean transportInPresent =
(msgCtx.getProperty(MessageContext.TRANSPORT_IN) != null);
+ if (!transportInPresent &&
(responseMessageContext==null || responseMessageContext.getEnvelope()==null)) {
+ if(log.isDebugEnabled()) log.debug("Exit:
SenderWorker::checkForSyncResponses, no response present");
return;
}
-
- if (resenvelope != null) {
- if (log.isDebugEnabled())
- log.debug("Response " +
resenvelope.getHeader());
- responseMessageContext.setEnvelope(resenvelope);
-
+
+ if (responseMessageContext==null ||
responseMessageContext.getEnvelope()==null) {
+ if (responseMessageContext==null)
+ responseMessageContext = new
MessageContext();
+
+ OperationContext requestMsgOpCtx =
msgCtx.getOperationContext();
+
responseMessageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
requestMsgOpCtx
+
.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING));
+
responseMessageContext.setProperty(Constants.Configuration.CONTENT_TYPE,
requestMsgOpCtx
+
.getProperty(Constants.Configuration.CONTENT_TYPE));
+
responseMessageContext.setProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE,
requestMsgOpCtx
+
.getProperty(HTTPConstants.MTOM_RECEIVED_CONTENT_TYPE));
+
+ //If the response MsgCtx was not available
Axis2 would hv put the transport info into a
+ //HashMap, getting the data from it.
+ HashMap transportInfoMap = (HashMap)
msgCtx.getProperty(Constants.Configuration.TRANSPORT_INFO_MAP);
+ if (transportInfoMap != null) {
+
responseMessageContext.setProperty(Constants.Configuration.CONTENT_TYPE,
+
transportInfoMap.get(Constants.Configuration.CONTENT_TYPE));
+
responseMessageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
+
transportInfoMap.get(Constants.Configuration.CHARACTER_SET_ENCODING));
+ }
+
+ //setting the message as serverSide will let it
go through the MessageReceiver (may be callback MR).
+ responseMessageContext.setServerSide(true);
+
+ if
(responseMessageContext.getSoapAction()==null) {
+ //if there is no SOAP action in the
response message, Axis2 will wrongly identify it as a REST message
+ //This happens because we set
serverSide to True in a previous step.
+ //So we have to add a empty SOAPAction
here.
+
responseMessageContext.setSoapAction("");
+ }
+
+
responseMessageContext.setConfigurationContext(msgCtx.getConfigurationContext());
+
responseMessageContext.setTransportIn(msgCtx.getTransportIn());
+
responseMessageContext.setTransportOut(msgCtx.getTransportOut());
+
+
responseMessageContext.setProperty(MessageContext.TRANSPORT_IN, msgCtx
+
.getProperty(MessageContext.TRANSPORT_IN));
+
responseMessageContext.setServiceContext(msgCtx.getServiceContext());
+
responseMessageContext.setServiceGroupContext(msgCtx.getServiceGroupContext());
+
+
responseMessageContext.setProperty(Sandesha2Constants.MessageContextProperties.MAKECONNECTION_ENTRY,
+
msgCtx.getProperty(Sandesha2Constants.MessageContextProperties.MAKECONNECTION_ENTRY));
+
+ // If request is REST we assume the
responseMessageContext is REST,
+ // so set the variable
+
+
responseMessageContext.setDoingREST(msgCtx.isDoingREST());
+
+ resenvelope =
responseMessageContext.getEnvelope();
+ try {
+ // MessageContext is modified in
TransportUtils.createSOAPMessage(). It might be used by axis.engine or handler.
+ // To catch the modification and pass
it to engine or handler, resenvelope is created by responseMessageContext.
+
+ if (resenvelope==null) {
+ //We try to build the response
out of the transport stream.
+ resenvelope =
TransportUtils.createSOAPMessage(responseMessageContext);
+
responseMessageContext.setEnvelope(resenvelope);
+ } else {
+
+ }
+ } catch (AxisFault e) {
+ //Cannot find a valid SOAP envelope.
+ if (log.isErrorEnabled() ) {
+ log.error (SandeshaMessageHelper
+
.getMessage(SandeshaMessageKeys.soapEnvNotSet));
+ log.error ("Caught exception", e);
+ }
-// //If this message is an RM Control message it
should not be assumed as an application message.
-// //So dispatching etc should happen just like
for a new message comming into the system.
-// RMMsgContext responseRMMsg =
MsgInitializer.initializeMessage(responseMessageContext);
-// if
(responseRMMsg.getMessageType()!=Sandesha2Constants.MessageTypes.UNKNOWN &&
-//
responseRMMsg.getMessageType()!=Sandesha2Constants.MessageTypes.APPLICATION
) {
-//
responseMessageContext.setAxisOperation(null);
-//
responseMessageContext.setOperationContext(null);
-// }
+ return;
+ }
//If addressing is disabled we will be adding
this message simply as the application response of the request message.
Boolean addressingDisabled = (Boolean)
msgCtx.getOptions().getProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES);
@@ -569,6 +567,11 @@
responseMessageContext.setOperationContext(responseMsgOpCtx);
}
+ AxisOperation operation =
msgCtx.getAxisOperation();
+ if (operation!=null &&
responseMessageContext.getAxisMessage()==null
+ && (operation instanceof
OutInAxisOperation))
+
responseMessageContext.setAxisMessage(operation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE));
+
RMMsgContext responseRMMessage =
MsgInitializer.initializeMessage(responseMessageContext);
if
(responseRMMessage.getMessageType()==Sandesha2Constants.MessageTypes.ACK) {
responseMessageContext.setAxisOperation(SpecSpecificConstants.getWSRMOperation
@@ -576,8 +579,11 @@
responseMessageContext.setOperationContext(null);
}
- AxisEngine engine = new
AxisEngine(msgCtx.getConfigurationContext());
-
+ }
+
+ AxisEngine engine = new
AxisEngine(msgCtx.getConfigurationContext());
+ if (resenvelope!=null) {
+ //we proceed only if we hv found a valid
envelope.
if (isFaultEnvelope(resenvelope)) {
engine.receiveFault(responseMessageContext);
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]