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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to