Author: amila
Date: Mon Mar 17 01:52:35 2008
New Revision: 14897

Log:

fixing interop issues


Added:
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/Accept.java
Modified:
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/handlers/MercuryDuplicationHandler.java
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/CreateSequenceResponseMessage.java
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/RMApplicationMessage.java
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDContext.java
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDSequence.java
   
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/util/MercuryConstants.java
   
trunk/commons/mercury/modules/core/src/test/java/org/wso2/mercury/message/CreateSequenceResponseMessageTest.java

Modified: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/handlers/MercuryDuplicationHandler.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/handlers/MercuryDuplicationHandler.java
   (original)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/handlers/MercuryDuplicationHandler.java
   Mon Mar 17 01:52:35 2008
@@ -54,7 +54,7 @@
                 try {
                     RMApplicationMessage rmApplicationMessage =
                             
RMApplicationMessage.fromSOAPEnvelope(msgContext.getEnvelope());
-                    if (rmApplicationMessage.getSequenceID() != null){
+                    if ((rmApplicationMessage != null) && 
(rmApplicationMessage.getSequenceID() != null)){
                         RMDContext rmdContext =
                                 (RMDContext) 
msgContext.getConfigurationContext().getProperty(
                                         MercuryConstants.RMD_CONTEXT);

Added: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/Accept.java
==============================================================================
--- (empty file)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/Accept.java
       Mon Mar 17 01:52:35 2008
@@ -0,0 +1,71 @@
+/*
+ * 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.wso2.mercury.message;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.wso2.mercury.exception.RMMessageBuildingException;
+import org.wso2.mercury.util.MercuryConstants;
+
+/**
+ * used to accepts the offers comes from using the offer tag
+ * in create sequences
+ */
+public class Accept extends RMMessageElement {
+
+    private String acceptERP;
+
+    public Accept() {
+    }
+
+    public Accept(String rmNamespace) {
+        super(rmNamespace);
+    }
+
+    public OMElement toOM() throws RMMessageBuildingException {
+
+        OMFactory omFactory = OMAbstractFactory.getOMFactory();
+
+        OMElement accept = omFactory.createOMElement(MercuryConstants.ACCEPT,
+                rmNamespace, MercuryConstants.RM_1_0_NAMESPACE_PREFIX);
+        AcksTo acksTo = new AcksTo(this.rmNamespace);
+        acksTo.setEndpointAddress(acceptERP);
+        accept.addChild(acksTo.toOM());
+        return accept;
+    }
+
+     public static Accept fromOM(OMElement omElement) throws 
RMMessageBuildingException {
+
+        String rmNamesapce = omElement.getNamespace().getNamespaceURI();
+        OMElement acksTo = omElement.getFirstElement();
+        if (!acksTo.getLocalName().equals(MercuryConstants.ACKS_TO)){
+           throw new RMMessageBuildingException("Can not Address element in 
AcksTo element");
+        }
+        Accept accept = new Accept(rmNamesapce);
+        accept.setAcceptERP(AcksTo.fromOM(acksTo).getEndpointAddress());
+        return accept;
+    }
+
+    public String getAcceptERP() {
+        return acceptERP;
+    }
+
+    public void setAcceptERP(String acceptERP) {
+        this.acceptERP = acceptERP;
+    }
+}

Modified: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/CreateSequenceResponseMessage.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/CreateSequenceResponseMessage.java
        (original)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/CreateSequenceResponseMessage.java
        Mon Mar 17 01:52:35 2008
@@ -21,6 +21,8 @@
 import org.wso2.mercury.exception.RMMessageBuildingException;
 import org.wso2.mercury.util.MercuryConstants;
 
+import java.util.Iterator;
+
 /**
  * this class used to serialize and deserilize the
  * create sequence response
@@ -28,6 +30,7 @@
 public class CreateSequenceResponseMessage extends RMMessage {
 
     private String identifier;
+    private Accept accept;
 
     public CreateSequenceResponseMessage(String rmNamespace, String 
soapNamesapce) {
         super(rmNamespace, soapNamesapce);
@@ -49,20 +52,31 @@
                 MercuryConstants.RM_1_0_NAMESPACE_PREFIX);
         identifierElement.setText(this.identifier);
         createSequenceResponseElement.addChild(identifierElement);
+        if (accept != null){
+            createSequenceResponseElement.addChild(accept.toOM());
+        }
         soapEnvelope.getBody().addChild(createSequenceResponseElement);
         return soapEnvelope;
     }
 
     public static CreateSequenceResponseMessage fromSOAPEnvolope(SOAPEnvelope 
soapEnvelope)
             throws RMMessageBuildingException {
-        
+
         String soapNamespace = soapEnvelope.getNamespace().getNamespaceURI();
-        OMElement createSequenceOMElement = 
soapEnvelope.getBody().getFirstElement();
-        String rmNamespace = 
createSequenceOMElement.getNamespace().getNamespaceURI();
+        OMElement createSequenceResponseOMElement = 
soapEnvelope.getBody().getFirstElement();
+        String rmNamespace = 
createSequenceResponseOMElement.getNamespace().getNamespaceURI();
         CreateSequenceResponseMessage createSequenceResponseMessage =
                 new CreateSequenceResponseMessage(rmNamespace, soapNamespace);
-        OMElement identifierElement = 
soapEnvelope.getBody().getFirstElement().getFirstElement();
-        
createSequenceResponseMessage.setIdentifier(identifierElement.getText());
+        Iterator responseChildren = 
createSequenceResponseOMElement.getChildElements();
+        OMElement omElement = null;
+        for (;responseChildren.hasNext();){
+            omElement = (OMElement) responseChildren.next();
+            if (omElement.getLocalName().equals(MercuryConstants.IDENTIFIER)){
+                
createSequenceResponseMessage.setIdentifier(omElement.getText());
+            } else if 
(omElement.getLocalName().equals(MercuryConstants.ACCEPT)) {
+                
createSequenceResponseMessage.setAccept(Accept.fromOM(omElement));
+            }
+        }
         return createSequenceResponseMessage;
     }
 
@@ -73,4 +87,12 @@
     public void setIdentifier(String identifier) {
         this.identifier = identifier;
     }
+
+    public Accept getAccept() {
+        return accept;
+    }
+
+    public void setAccept(Accept accept) {
+        this.accept = accept;
+    }
 }

Modified: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/RMApplicationMessage.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/RMApplicationMessage.java
 (original)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/message/RMApplicationMessage.java
 Mon Mar 17 01:52:35 2008
@@ -103,17 +103,18 @@
     public static RMApplicationMessage fromSOAPEnvelope(SOAPEnvelope 
soapEnvelope) throws RMMessageBuildingException {
         String soapNamespace = soapEnvelope.getNamespace().getNamespaceURI();
         Iterator childElements = soapEnvelope.getHeader().getChildElements();
-        OMElement headerElement;
+        SOAPHeaderBlock headerBlock;
         RMApplicationMessage rmApplicationMessage = null;
         for (; childElements.hasNext();) {
-            headerElement = (OMElement) childElements.next();
-            if 
(headerElement.getLocalName().equals(MercuryConstants.SEQUENCE)) {
+            headerBlock = (SOAPHeaderBlock) childElements.next();
+            if (headerBlock.getLocalName().equals(MercuryConstants.SEQUENCE)) {
                 // TODO: check for 1.1 namespace as well.
-                if 
(headerElement.getNamespace().getNamespaceURI().equals(MercuryConstants.RM_1_0_NAMESPACE))
 {
+                headerBlock.setProcessed();
+                if 
(headerBlock.getNamespace().getNamespaceURI().equals(MercuryConstants.RM_1_0_NAMESPACE))
 {
                     // we have found the sequence header block.
-                    String rmNamesapce = 
headerElement.getNamespace().getNamespaceURI();
+                    String rmNamesapce = 
headerBlock.getNamespace().getNamespaceURI();
                     rmApplicationMessage = new 
RMApplicationMessage(rmNamesapce, soapNamespace, soapEnvelope);
-                    Iterator sequenceElementIter = 
headerElement.getChildElements();
+                    Iterator sequenceElementIter = 
headerBlock.getChildElements();
                     OMElement childElement;
                     for (; sequenceElementIter.hasNext();) {
                         childElement = (OMElement) sequenceElementIter.next();
@@ -134,6 +135,7 @@
             SOAPHeaderBlock sequenceAcknowledgmentHeaderBlock = 
(SOAPHeaderBlock) iter.next();
             if (sequenceAcknowledgmentHeaderBlock.getLocalName().equals(
                     MercuryConstants.SEQUENCE_ACKNOWLEDGMENT)) {
+                sequenceAcknowledgmentHeaderBlock.setProcessed();
                 SequenceAcknowledgment sequenceAcknowledgment =
                         
SequenceAcknowledgment.fromSOAPHeaderBlock(sequenceAcknowledgmentHeaderBlock);
                 
rmApplicationMessage.setSequenceAcknowledgment(sequenceAcknowledgment);

Modified: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDContext.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDContext.java
     (original)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDContext.java
     Mon Mar 17 01:52:35 2008
@@ -101,6 +101,15 @@
         // process the offer ID
         if (createSequenceMessage.getOfferIdentifier() != null) {
             if 
(messageContext.getAxisOperation().getMessageExchangePattern().equals(WSDL2Constants.MEP_URI_IN_OUT))
 {
+
+                // set the self acts to EPR in RMDSequence
+                EndpointReference selfEndPontReference =
+                        
messageContext.getConfigurationContext().getListenerManager().getEPRforService(
+                        messageContext.getAxisService().getName(),
+                        
messageContext.getAxisOperation().getName().getLocalPart(),
+                        axis2Info.getTransportIn().getName());
+                
rmdSequence.setSelfAcksToEPR(selfEndPontReference.getAddress());
+
                 RMSSequence rmsSequence =
                         new RMSSequence(RMSSequence.STATE_1000,
                                 new 
EndpointReference(createSequenceMessage.getAcksToAddress()));

Modified: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDSequence.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDSequence.java
    (original)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/state/RMDSequence.java
    Mon Mar 17 01:52:35 2008
@@ -29,9 +29,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.wso2.mercury.context.MercuryMessageContext;
-import org.wso2.mercury.message.CreateSequenceResponseMessage;
-import org.wso2.mercury.message.SequenceAcknowledgmentMessage;
-import org.wso2.mercury.message.SequenceAcknowledgment;
+import org.wso2.mercury.message.*;
 import org.wso2.mercury.util.MercuryConstants;
 import org.wso2.mercury.workers.MessageWorker;
 import org.wso2.mercury.exception.RMMessageBuildingException;
@@ -108,6 +106,11 @@
 
     private boolean isAnonymous;
 
+    // keeps whether the RMS has offered a sequence or not.
+    // this is usefull when sending create sequence Response where we have to 
send
+    // and Accept header.
+    private String selfAcksToEPR;
+
     private RMSSequence offeredRMSSequence;
 
     public RMDSequence(int state) {
@@ -172,6 +175,13 @@
             createSequenceResponseMessage.setSoapNamesapce(
                     
this.createSequenceMessageContext.getEnvelope().getNamespace().getNamespaceURI());
 
+            // set the accept header if a sequenc has occured
+            if (this.selfAcksToEPR != null){
+                Accept accept = new Accept();
+                accept.setAcceptERP(this.selfAcksToEPR);
+                createSequenceResponseMessage.setAccept(accept);
+            }
+
 
             MessageContext messageContext =
                     
MessageContextBuilder.createOutMessageContext(this.createSequenceMessageContext);
@@ -600,6 +610,14 @@
         this.offeredRMSSequence = offeredRMSSequence;
     }
 
+    public String getSelfAcksToEPR() {
+        return selfAcksToEPR;
+    }
+
+    public void setSelfAcksToEPR(String selfAcksToEPR) {
+        this.selfAcksToEPR = selfAcksToEPR;
+    }
+
     protected void finalize() throws Throwable {
         System.out.println("Garbadge collecting the RMD sequence for sequence 
" + this.sequenceID);
     }

Modified: 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/util/MercuryConstants.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/util/MercuryConstants.java
        (original)
+++ 
trunk/commons/mercury/modules/core/src/main/java/org/wso2/mercury/util/MercuryConstants.java
        Mon Mar 17 01:52:35 2008
@@ -19,16 +19,17 @@
     public static final String CREATE_SEQUENCE = "CreateSequence";
     public static final String CREATE_SEQUENCE_RESPONSE = 
"CreateSequenceResponse";
     public static final String ACKS_TO = "AcksTo";
+    public static final String ACCEPT = "Accept";
     public static final String ADDRESS = "Address";
     public static final String OFFER = "Offer";
     public static final String IDENTIFIER = "Identifier";
     public static final String SEQUENCE = "Sequence";
     public static final String MESSAGE_NUMBER = "MessageNumber";
     public static final String LAST_MESSAGE = "LastMessage";
-    public static final String ACKKNOWLEDGEMENT_RANGE = "AcknowledgmentRange";
+    public static final String ACKKNOWLEDGEMENT_RANGE = "AcknowledgementRange";
     public static final String UPPER = "Upper";
     public static final String LOWER = "Lower";
-    public static final String SEQUENCE_ACKNOWLEDGMENT = 
"SequenceAcknowledgment";
+    public static final String SEQUENCE_ACKNOWLEDGMENT = 
"SequenceAcknowledgement";
     public static final String TERMINATE_SEQUENCE = "TerminateSequence";
     public static final String ACKREQUESTED = "AckRequested";
 

Modified: 
trunk/commons/mercury/modules/core/src/test/java/org/wso2/mercury/message/CreateSequenceResponseMessageTest.java
==============================================================================
--- 
trunk/commons/mercury/modules/core/src/test/java/org/wso2/mercury/message/CreateSequenceResponseMessageTest.java
    (original)
+++ 
trunk/commons/mercury/modules/core/src/test/java/org/wso2/mercury/message/CreateSequenceResponseMessageTest.java
    Mon Mar 17 01:52:35 2008
@@ -26,7 +26,7 @@
  */
 public class CreateSequenceResponseMessageTest extends TestCase {
 
-    public void testCreateSequenceResponseMessage(){
+    public void testCreateSequenceResponseMessage1(){
          CreateSequenceResponseMessage createSequenceResponseMessage =
                  new 
CreateSequenceResponseMessage(MercuryConstants.RM_1_0_NAMESPACE,
                          SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
@@ -42,4 +42,25 @@
             fail();
         }
     }
+
+    public void testCreateSequenceResponseMessage2(){
+         CreateSequenceResponseMessage createSequenceResponseMessage =
+                 new 
CreateSequenceResponseMessage(MercuryConstants.RM_1_0_NAMESPACE,
+                         SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        createSequenceResponseMessage.setIdentifier("testIdentifier");
+        Accept accept = new Accept(MercuryConstants.RM_1_0_NAMESPACE);
+        accept.setAcceptERP("http://localhost:8080/test";);
+        createSequenceResponseMessage.setAccept(accept);
+
+        try {
+            SOAPEnvelope soapEnvelope = 
createSequenceResponseMessage.toSOAPEnvelope();
+            System.out.println("SOAP Envelope ==> " + soapEnvelope.toString());
+            CreateSequenceResponseMessage result = 
CreateSequenceResponseMessage.fromSOAPEnvolope(soapEnvelope);
+            
assertEquals(result.getRmNamespace(),MercuryConstants.RM_1_0_NAMESPACE);
+            
assertEquals(result.getSoapNamesapce(),SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+            assertEquals(result.getIdentifier(),"testIdentifier");
+        } catch (RMMessageBuildingException e) {
+            fail();
+        }
+    }
 }

_______________________________________________
Commons-dev mailing list
Commons-dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/commons-dev

Reply via email to