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