You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by th...@apache.org on 2007/01/31 15:19:45 UTC

svn commit: r501849 - /webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java

Author: thilina
Date: Wed Jan 31 06:19:44 2007
New Revision: 501849

URL: http://svn.apache.org/viewvc?view=rev&rev=501849
Log:
Fixing the coordination context missing issue

Modified:
    webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java

Modified: webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java
URL: http://svn.apache.org/viewvc/webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java?view=diff&rev=501849&r1=501848&r2=501849
==============================================================================
--- webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java (original)
+++ webservices/kandula/trunk/java/src/org/apache/kandula/initiator/TransactionOutHandler.java Wed Jan 31 06:19:44 2007
@@ -16,6 +16,16 @@
  */
 package org.apache.kandula.initiator;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
@@ -25,41 +35,91 @@
 import org.apache.kandula.Constants;
 import org.apache.kandula.context.AbstractContext;
 import org.apache.kandula.context.CoordinationContext;
+import org.apache.kandula.faults.AbstractKandulaException;
+import org.apache.kandula.faults.KandulaGeneralException;
+import org.oasis_open.docs.ws_tx.wscoor._2006._06.CoordinationContext_type3;
+import org.xmlsoap.schemas.ws._2004._08.addressing.ReferenceParametersType;
 
 public class TransactionOutHandler extends AbstractHandler {
-	
+
 	/**
 	 * Field log
 	 */
 	private static final Log log = LogFactory.getLog(TransactionOutHandler.class);
-	
+
 	private static ThreadLocal threadInfo = new ThreadLocal();
-	
+
 	private static final long serialVersionUID = 4133392345837905499L;
-	
+
 	public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
-		
+
 		InitiatorContext initiatorTransaction;
 		String wsaAction = msgContext.getWSAAction();
 		if ((wsaAction != Constants.WS_COOR_CREATE_COORDINATIONCONTEXT)
 				&& (wsaAction != Constants.WS_COOR_REGISTER)
 				&& (wsaAction != Constants.WS_AT_COMMIT) && (wsaAction != Constants.WS_AT_ROLLBACK)) {
-			Object context = threadInfo.get();
-			if (context==null)
-			{
-				context = msgContext.getProperty(Constants.TRANSACTION_CONTEXT);
+			Object context = null;
+			try {
+				context = TransactionManager.getTransaction();
+			} catch (AbstractKandulaException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			if (context == null) {
+				context = msgContext.getProperty(Constants.Configuration.TRANSACTION_CONTEXT);
 			}
-			// We let the message to pass through if no transaction is found in the thread or in msgContext
+			// We let the message to pass through if no transaction is found in
+			// the thread or in msgContext
 			if (context != null) {
+				Object registrationID = msgContext
+						.getProperty(Constants.Configuration.PARTICIPANT_IDENTIFIER);
 				AbstractContext txContext = (AbstractContext) context;
 				SOAPHeader soapHeader = msgContext.getEnvelope().getHeader();
 				CoordinationContext coorContext = txContext.getCoordinationContext();
-				soapHeader.addChild(coorContext.toOM());
+	
+				//ws-ba users can set a identifier for the participants
+				if (registrationID != null) {
+					CoordinationContext_type3 context_type32 = null;
+					ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+					try {
+						coorContext.toOM().serialize(byteArrayOutputStream);
+						context_type32 = CoordinationContext_type3.Factory.parse(StAXUtils
+								.createXMLStreamReader(new ByteArrayInputStream(
+										byteArrayOutputStream.toByteArray())));
+						context_type32.setExtraAttributes(null);
+					} catch (Exception e) {
+						throw new AxisFault(e);
+					}
+					ReferenceParametersType referenceParametersType = context_type32
+							.getRegistrationService().getReferenceParameters();
+					OMElement omElement = soapHeader.getOMFactory().createOMElement(
+							Constants.PARTICIPANT_ID_PARAMETER, null);
+					omElement.setText((String) registrationID);
+					referenceParametersType.addExtraElement(omElement);
+					soapHeader.addChild(context_type32.getOMElement(new QName(Constants.WS_COOR,
+							"CoordinationContext"), soapHeader.getOMFactory()));
+				} else {
+					soapHeader.addChild(coorContext.toOM());
+				}
+
 			} else {
-				log.debug("Transaction Handler Engaged. " +
-						"But no transaction information was found in the thread.");
+				log.debug("Transaction Handler Engaged. "
+						+ "But no transaction information was found in the thread.");
 			}
 		}
 		return InvocationResponse.CONTINUE;
+	}
+
+	private static void addParticipantIdentifier(OMElement coorContext, String participantID) {
+		// Opps.. OMSourcedElementImpl.build() is broken
+		coorContext.getFirstOMChild();
+		OMElement registrationEPRElement = coorContext.getFirstChildWithName(new QName(
+				"RegistrationService", Constants.WS_COOR));
+		OMElement refParameters = registrationEPRElement.getFirstChildWithName(new QName(
+				"ReferenceParameters", "http://schemas.xmlsoap.org/ws/2004/08/addressing"));
+		OMElement omElement = registrationEPRElement.getOMFactory().createOMElement(
+				Constants.PARTICIPANT_ID_PARAMETER, null);
+		omElement.setText(participantID);
+		refParameters.addChild(omElement);
 	}
 }



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