You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ch...@apache.org on 2007/05/20 18:36:51 UTC
svn commit: r539890 - in
/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2:
util/MsgInitializer.java workers/SenderWorker.java
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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org