Author: chamikara
Date: Thu Nov 17 08:58:03 2005
New Revision: 345285

URL: http://svn.apache.org/viewcvs?rev=345285&view=rev
Log:
Support for processing most of the RM faults (SOAP 1.1 and 1.2).

Added:
    webservices/sandesha/trunk/src/org/apache/sandesha2/FaultData.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/SOAPFaultEnvelopeCreator.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
Removed:
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultMgr.java
Modified:
    webservices/sandesha/trunk/src/org/apache/sandesha2/Constants.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/beans/RetransmitterBean.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/inmemory/InMemoryRetransmitterBeanMgr.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Identifier.java

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/Constants.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/Constants.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/Constants.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/Constants.java Thu Nov 
17 08:58:03 2005
@@ -113,6 +113,8 @@
                String NS_PREFIX_ADDRESSING = "wsa";

 

                String ADDRESS = "Address";

+               

+               String SOAP_FAULT_ACTION = 
"http://schemas.xmlsoap.org/ws/2004/08/addressing/fault";;

        }

 

        public interface WSP {

@@ -241,6 +243,41 @@
        public interface ClientProperties {

                String AcksTo = "AcksToStr";

        }

+       

+       public interface SOAPFaults {

+               

+               public interface Subcodes {

+                       

+                       String SEQUENCE_TERMINATED = "wsrm:SequenceTerminated";

+                               

+                       String UNKNOWN_SEQUENCE = "wsrm:UnknownSequence";

+                               

+                       String INVALID_ACKNOWLEDGEMENT = 
"wsrm:InvalidAcknowledgement";

+                               

+                   String MESSAGE_NUMBER_ROLEOVER = 
"wsrm:MessageNumberRollover";

+                               

+                       String LAST_MESSAGE_NO_EXCEEDED = 
"wsrm:LastMessageNumberExceeded";

+                               

+                       String CREATE_SEQUENCE_REFUSED = 
"wsrm:CreateSequenceRefused";

+                       

+               }

+

+               

+               public interface FaultType {

+                       

+                       public static final int UNKNOWN_SEQUENCE = 1;

+

+                       public static final int MESSAGE_NUMBER_ROLLOVER = 2;

+

+                       public static final int INVALID_ACKNOWLEDGEMENT = 3;

+                       

+                       public static final int CREATE_SEQUENCE_REFUSED = 4;

+                       

+                       //public static final int 

+                       

+               }

+       }

+       

        //TODO remove following three

        int STORAGE_TYPE_IN_MEMORY = 1;

 


Added: webservices/sandesha/trunk/src/org/apache/sandesha2/FaultData.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/FaultData.java?rev=345285&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/FaultData.java (added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/FaultData.java Thu Nov 
17 08:58:03 2005
@@ -0,0 +1,86 @@
+/*

+ * Copyright  1999-2004 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.apache.sandesha2;

+

+import org.apache.axis2.context.MessageContext;

+import org.apache.axis2.om.OMElement;

+

+

+public class FaultData {

+       

+       private int type;

+

+       private String code;

+

+       private String subcode;

+

+       private String reason;

+

+       private OMElement detail;

+

+       private String sequenceId;

+       

+       

+       public OMElement getDetail() {

+               return detail;

+       }

+       

+       public void setDetail(OMElement detail) {

+               this.detail = detail;

+       }

+       

+       public String getReason() {

+               return reason;

+       }

+       

+       public void setReason(String reason) {

+               this.reason = reason;

+       }

+       

+       public String getSubcode() {

+               return subcode;

+       }

+       

+       public void setSubcode(String subcode) {

+               this.subcode = subcode;

+       }

+       

+       public int getType() {

+               return type;

+       }

+       

+       public void setType(int type) {

+               this.type = type;

+       }

+       

+       public String getCode() {

+               return code;

+       }

+       

+       public void setCode(String code) {

+               this.code = code;

+       }

+       

+       public String getSequenceId() {

+               return sequenceId;

+       }

+       

+       public void setSequenceId(String sequenceId) {

+               this.sequenceId = sequenceId;

+       }

+}


Added: 
webservices/sandesha/trunk/src/org/apache/sandesha2/SOAPFaultEnvelopeCreator.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/SOAPFaultEnvelopeCreator.java?rev=345285&view=auto
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/SOAPFaultEnvelopeCreator.java
 (added)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/SOAPFaultEnvelopeCreator.java
 Thu Nov 17 08:58:03 2005
@@ -0,0 +1,241 @@
+/*

+ * Copyright  1999-2004 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.apache.sandesha2;

+

+import org.apache.axis2.AxisFault;

+import org.apache.axis2.addressing.AddressingConstants;

+import org.apache.axis2.context.MessageContext;

+import org.apache.axis2.om.OMConstants;

+import org.apache.axis2.om.OMElement;

+import org.apache.axis2.om.OMNamespace;

+import org.apache.axis2.soap.SOAPEnvelope;

+import org.apache.axis2.soap.SOAPFactory;

+import org.apache.axis2.soap.SOAPFault;

+import org.apache.axis2.soap.SOAPFaultCode;

+import org.apache.axis2.soap.SOAPFaultDetail;

+import org.apache.axis2.soap.SOAPFaultReason;

+import org.apache.axis2.soap.SOAPFaultSubCode;

+import org.apache.axis2.soap.SOAPFaultText;

+import org.apache.axis2.soap.SOAPFaultValue;

+import org.apache.sandesha2.util.SOAPAbstractFactory;

+import org.apache.sandesha2.util.SandeshaUtil;

+import org.apache.sandesha2.wsrm.FaultCode;

+import org.apache.sandesha2.wsrm.SequenceFault;

+

+/**

+ * @author chamikara

+ * 

+ */

+

+public class SOAPFaultEnvelopeCreator {

+

+       public static void addSOAPFaultEnvelope (MessageContext 
faultMsgContext, int SOAPVersion, FaultData faultData) throws SandeshaException 
{

+               

+               SOAPFactory factory = 
SOAPAbstractFactory.getSOAPFactory(SOAPVersion);

+               SOAPEnvelope env = factory.getDefaultFaultEnvelope();

+               

+               try {

+                       faultMsgContext.setEnvelope (env);

+               } catch (AxisFault e) {

+                       throw new SandeshaException (e.getMessage());

+               }

+               

+               if (SOAPVersion==Constants.SOAPVersion.v1_1)

+                       doSOAP11Encoding(faultMsgContext,faultData);

+               else

+                       doSOAP12Encoding(faultMsgContext,faultData);

+               

+       }

+       

+       private static boolean isSequenceFault (FaultData faultData) {

+               

+               boolean sequenceFault = false;

+               

+               int faultType = faultData.getType();

+               

+               if (faultType<=0)

+                       return false;

+               

+               if 
(faultType==Constants.SOAPFaults.FaultType.CREATE_SEQUENCE_REFUSED)

+                       sequenceFault = true;

+               

+               if (faultType==Constants.SOAPFaults.FaultType.UNKNOWN_SEQUENCE)

+                       sequenceFault = true;

+               

+               return sequenceFault;

+               

+       }

+       

+       private static void addSequenceFaultHeader (MessageContext 
faultMessageContext, FaultData faultData,SOAPFactory factory) {

+               

+               

+               SequenceFault sequenceFault = new SequenceFault (factory);

+               

+               FaultCode faultCode = new FaultCode (factory);

+               faultCode.setFaultCode(faultData.getSubcode());

+               sequenceFault.setFaultCode(faultCode);

+       }

+       

+       private static void doSOAP11Encoding(MessageContext 
faultMsgContext,FaultData data) throws SandeshaException {

+               

+               //MessageContext faultMsgContext = 
faultRMMsgContext.getMessageContext();

+

+               SOAPEnvelope faultMsgEnvelope = faultMsgContext.getEnvelope();

+               if (faultMsgEnvelope==null)

+                       throw new SandeshaException ("SOAP Envelope is null");

+               

+               SOAPFactory factory = 
SOAPAbstractFactory.getSOAPFactory(SandeshaUtil

+                               .getSOAPVersion(faultMsgEnvelope));

+

+               SOAPFault fault = faultMsgEnvelope.getBody().getFault();

+               SOAPFaultCode faultCode = fault.getCode();

+

+               if (isSequenceFault(data)) {

+                       faultCode.setText(data.getCode());

+               }else {

+                       faultCode.setText(data.getSubcode());

+               }

+               

+               SOAPFaultReason faultReason = fault.getReason();

+               

+               OMNamespace namespace = factory.createOMNamespace(

+                               OMConstants.XMLNS_URI, 
OMConstants.XMLNS_PREFIX);

+               faultReason.getSOAPText().addAttribute("lang", "en", namespace);

+               

+               faultReason.setText(data.getReason());

+               faultCode.getValue().setText(data.getSubcode());

+               faultReason.getSOAPText().setText(data.getReason());

+               

+               //SequenceFault header is added only for SOAP 1.1

+               if (isSequenceFault(data))

+                       addSequenceFaultHeader (faultMsgContext,data,factory);

+               

+       }

+

+       private static void doSOAP12Encoding(MessageContext faultMsgContext, 
FaultData data) throws SandeshaException {

+               //MessageContext faultMsgCtx = 
faultRMMsgContext.getMessageContext();

+               

+               SOAPEnvelope faultEnvelope = faultMsgContext.getEnvelope();

+               if (faultEnvelope==null)

+                       throw new SandeshaException ("SOAP Envelope is null");

+               

+               SOAPFactory factory = 
SOAPAbstractFactory.getSOAPFactory(SandeshaUtil

+                               .getSOAPVersion (faultEnvelope));

+               

+               SOAPFault fault = faultEnvelope.getBody().getFault();

+               if (fault==null)

+                       throw new SandeshaException ("Fault part is null");

+               

+               SOAPFaultCode faultCode = fault.getCode();

+               SOAPFaultValue codeValue = faultCode.getValue();

+               codeValue.setText(data.getCode());

+

+               SOAPFaultSubCode faultSubCode = factory

+                               .createSOAPFaultSubCode(faultCode);

+               SOAPFaultValue subCodeValue = factory

+                               .createSOAPFaultValue(faultSubCode);

+               subCodeValue.setText(data.getSubcode());

+

+               SOAPFaultReason faultReason = fault.getReason();

+               SOAPFaultText faultText = faultReason.getSOAPText();

+               faultText.setText(data.getReason());

+

+               SOAPFaultDetail faultDetail = fault.getDetail();

+

+               OMElement detailElement = data.getDetail();

+               

+               if (detailElement!=null)

+                       faultDetail.addChild(detailElement);

+               

+               faultMsgContext.setWSAAction(Constants.WSA.SOAP_FAULT_ACTION);

+               

+//             if (detailElement!=null) {

+//                     String subcode = data.getSubcode();

+//                     

+//                     if 
(Constants.SOAPFaults.Subcodes.SequenceTerminated.equals(subcode)) {

+//                             

+//                     }else if 
(Constants.SOAPFaults.Subcodes.UnknownSequence.equals(subcode)) {

+//                             

+//                     }else if 
(Constants.SOAPFaults.Subcodes.InvalidAcknowledgement.equals(subcode)) {

+//                             

+//                     }else if 
(Constants.SOAPFaults.Subcodes.MessageNumberRoleover.equals(subcode)) {

+//                             

+//                     }else if 
(Constants.SOAPFaults.Subcodes.LastMessageNumberExceeded.equals(subcode)) {

+//                             

+//                     }else if 
(Constants.SOAPFaults.Subcodes.CreateSequenceRefused.equals(subcode)) {

+//                             

+//                     }

+               

+//             switch (data.type) {

+//             case Constants.MessageTypes.APPLICATION:

+//

+//                     /* Sequence */

+//                     OMElement sequence = ienvelope.getHeader()

+//                                     .getFirstChildWithName(

+//                                                     new 
QName(Constants.WSRM.NS_URI_RM,

+//                                                                     
Constants.WSRM.SEQUENCE));

+//                     OMElement sidentifier = 
sequence.getFirstChildWithName(new QName(

+//                                     Constants.WSRM.NS_URI_RM, 
Constants.WSRM.IDENTIFIER));

+//

+//                     OMNamespace snamespace = factory.createOMNamespace(

+//                                     Constants.WSRM.NS_URI_RM, 
Constants.WSRM.NS_PREFIX_RM);

+//                     OMElement selement = factory.createOMElement(

+//                                     Constants.WSRM.IDENTIFIER, snamespace);

+//

+//                     selement.setText(sidentifier.getText());

+//                     faultDetail.addChild(selement);

+//                     break;

+//

+//             case Constants.MessageTypes.ACK:

+//

+//                     /* SequenceAcknowledge */

+//

+//                     OMElement sequenceAck = ienvelope.getHeader()

+//                                     .getFirstChildWithName(

+//                                                     new 
QName(Constants.WSRM.NS_URI_RM,

+//                                                                     
Constants.WSRM.SEQUENCE_ACK));

+//                     OMElement aidentifier = sequenceAck

+//                                     .getFirstChildWithName(new 
QName(Constants.WSRM.NS_URI_RM,

+//                                                     
Constants.WSRM.IDENTIFIER));

+//                     OMNamespace anamespace = factory.createOMNamespace(

+//                                     Constants.WSRM.NS_URI_RM, 
Constants.WSRM.NS_PREFIX_RM);

+//                     OMElement aelement = factory.createOMElement(

+//                                     Constants.WSRM.IDENTIFIER, anamespace);

+//

+//                     aelement.setText(aidentifier.getText());

+//                     faultDetail.addChild(aelement);

+//                     break;

+//

+//             default:

+//

+//                     /* TODO for other message types */

+//                     break;

+//

+//             }

+//             }

+

+               

+

+//             try {

+//                     msgCtx.setEnvelope(envelope);

+//             } catch (AxisFault e) {

+//                     throw new SandeshaException(e.getMessage());

+//             }

+       }

+       

+}


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
 Thu Nov 17 08:58:03 2005
@@ -22,6 +22,7 @@
 import org.apache.axis2.AxisFault;

 import org.apache.axis2.context.ConfigurationContext;

 import org.apache.axis2.context.MessageContext;

+import org.apache.axis2.engine.AxisEngine;

 import org.apache.axis2.handlers.AbstractHandler;

 import org.apache.axis2.soap.SOAPBody;

 import org.apache.axis2.transport.http.SimpleHTTPServer;

@@ -36,6 +37,7 @@
 import org.apache.sandesha2.storage.StorageManager;

 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;

 import org.apache.sandesha2.storage.beans.SequencePropertyBean;

+import org.apache.sandesha2.util.FaultManager;

 import org.apache.sandesha2.util.MsgInitializer;

 import org.apache.sandesha2.util.SandeshaUtil;

 import org.apache.sandesha2.wsrm.Sequence;

@@ -59,6 +61,15 @@
                if (!isRMGlobalMessage) {

                        return;

                }

+               

+               FaultManager faultManager = new FaultManager ();

+               RMMsgContext faultMessageContext = 
faultManager.checkForPossibleFaults(msgContext);

+           if (faultMessageContext!=null){

+               ConfigurationContext configurationContext = 
msgContext.getSystemContext();

+               AxisEngine engine = new AxisEngine (configurationContext);

+               engine.send(faultMessageContext.getMessageContext());

+               return;

+           }

                

                RMMsgContext rmMessageContext = MsgInitializer

                                .initializeMessage(msgContext);


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
 Thu Nov 17 08:58:03 2005
@@ -23,6 +23,7 @@
 import org.apache.axis2.context.MessageContext;

 import org.apache.axis2.description.AxisService;

 import org.apache.axis2.description.Parameter;

+import org.apache.axis2.engine.AxisEngine;

 import org.apache.axis2.handlers.AbstractHandler;

 import org.apache.commons.logging.Log;

 import org.apache.commons.logging.LogFactory;

@@ -31,6 +32,7 @@
 import org.apache.sandesha2.RMMsgContext;

 import org.apache.sandesha2.msgprocessors.MsgProcessor;

 import org.apache.sandesha2.msgprocessors.MsgProcessorFactory;

+import org.apache.sandesha2.util.FaultManager;

 import org.apache.sandesha2.util.MsgInitializer;

 import org.apache.sandesha2.util.SandeshaUtil;

 

@@ -60,6 +62,14 @@
                if (null != DONE && "true".equals(DONE))

                        return;

                

+               FaultManager faultManager = new FaultManager ();

+               RMMsgContext faultMessageContext = 
faultManager.checkForPossibleFaults(msgCtx);

+           if (faultMessageContext!=null){

+               AxisEngine engine = new AxisEngine (context);

+               engine.send(faultMessageContext.getMessageContext());

+               return;

+           }

+           

                AxisService axisService = msgCtx.getAxisService();

                if (axisService == null)

                        throw new AxisFault("AxisService is null");


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Thu Nov 17 08:58:03 2005
@@ -262,14 +262,6 @@
 

                AckRequested ackRequested = (AckRequested) 
rmMsgCtx.getMessagePart(Constants.MessageParts.ACK_REQUEST);

                LastMessage lastMessage = (LastMessage) 
sequence.getLastMessage();

-

-               boolean ackRequired = false;

-               if (ackRequested!=null || lastMessage!=null)

-                       ackRequired = true;

-               

-               if (!ackRequired) {

-                       return;

-               }

                

                //Setting the ack depending on AcksTo.

                //TODO: Stop sending askc for every message.

@@ -284,6 +276,17 @@
                                        "Seqeunce properties are not set 
correctly");

 

                //if (acksToStr.equals(Constants.WSA.NS_URI_ANONYMOUS)) {

+               

+               if (Constants.WSA.NS_URI_ANONYMOUS.equals(acksTo.getAddress())) 
{

+                       // send ack in the sync case, only if the last message 
or the ackRequested tag is present.

+                       boolean ackRequired = false;

+                       if (ackRequested!=null || lastMessage!=null)

+                                       ackRequired = true;

+               

+                       if (!ackRequired) {

+                               return;

+                       }

+               }

 

                AxisConfiguration axisConfig = configCtx.getAxisConfiguration();

                AxisServiceGroup serviceGroup = new 
AxisServiceGroup(axisConfig);

@@ -344,6 +347,8 @@
                

                

                if (Constants.WSA.NS_URI_ANONYMOUS.equals(acksTo.getAddress())) 
{

+                       

+                       

                        AxisEngine engine = new 
AxisEngine(ackRMMsgCtx.getMessageContext()

                                        .getSystemContext());

 

@@ -383,6 +388,7 @@
                        ackBean.setMessageId(ackMsgCtx.getMessageID());

                        ackBean.setReSend(false);

                        ackBean.setSend(true);

+                       ackBean.setMessagetype(Constants.MessageTypes.ACK);

 

                        retransmitterBeanMgr.insert(ackBean);

 


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/beans/RetransmitterBean.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/storage/beans/RetransmitterBean.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/beans/RetransmitterBean.java
 (original)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/beans/RetransmitterBean.java
 Thu Nov 17 08:58:03 2005
@@ -37,6 +37,8 @@
 

        private long timeToSend = 0;

        

+       private int messagetype =0;

+       

        public RetransmitterBean() {

 

        }

@@ -122,5 +124,14 @@
        

        public void setTimeToSend(long timeToSend) {

                this.timeToSend = timeToSend;

+       }

+       

+       

+       public int getMessagetype() {

+               return messagetype;

+       }

+       

+       public void setMessagetype(int messagetype) {

+               this.messagetype = messagetype;

        }

 }

Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/inmemory/InMemoryRetransmitterBeanMgr.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/storage/inmemory/InMemoryRetransmitterBeanMgr.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/inmemory/InMemoryRetransmitterBeanMgr.java
 (original)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/storage/inmemory/InMemoryRetransmitterBeanMgr.java
 Thu Nov 17 08:58:03 2005
@@ -96,6 +96,9 @@
                                        && bean.getMessageNumber() != 
temp.getMessageNumber())

                                add = false;

 

+                       if 
(bean.getMessagetype()!=Constants.MessageTypes.UNKNOWN && 
bean.getMessagetype()!=temp.getMessagetype())

+                               add = false;

+                       

                        if (add)

                                beans.add(temp);

                }


Added: 
webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java?rev=345285&view=auto
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java 
(added)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/FaultManager.java 
Thu Nov 17 08:58:03 2005
@@ -0,0 +1,414 @@
+/*
+ * Copyright  1999-2004 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.apache.sandesha2.util;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import javax.xml.namespace.QName;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.soap.SOAP11Constants;
+import org.apache.axis2.soap.SOAP12Constants;
+import org.apache.axis2.soap.SOAPEnvelope;
+import org.apache.axis2.soap.SOAPFactory;
+import org.apache.axis2.soap.SOAPHeader;
+import org.apache.axis2.util.Utils;
+import org.apache.sandesha2.Constants;
+import org.apache.sandesha2.FaultData;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.SOAPFaultEnvelopeCreator;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.beanmanagers.NextMsgBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
+import org.apache.sandesha2.storage.beans.NextMsgBean;
+import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.wsrm.AcknowledgementRange;
+import org.apache.sandesha2.wsrm.CreateSequence;
+import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.Sequence;
+import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
+import org.apache.sandesha2.wsrm.SequenceOffer;
+import org.apache.sandesha2.wsrm.TerminateSequence;
+
+/**
+ * @author Sanka
+ * @author Chamikara
+ *  
+ */
+
+public class FaultManager {
+
+       public FaultManager() {
+       }
+
+       public RMMsgContext checkForPossibleFaults(MessageContext msgCtx)
+                       throws SandeshaException {
+               
+               //Cannot initialize message before checking for MsgNoRoleover - 
since initialization will give an exception
+               //for rolled over messages.
+               
+               SOAPEnvelope envelope = msgCtx.getEnvelope();
+               if (envelope==null)
+                       throw new SandeshaException ("SOAP Envelope is null");
+               
+               RMMsgContext faultMessageContext = null;
+               
+               SOAPHeader header = envelope.getHeader();
+               if (header!=null) {
+                       OMElement sequenceHeaderBlock = 
header.getFirstChildWithName(new QName 
(Constants.WSRM.NS_URI_RM,Constants.WSRM.SEQUENCE));
+                       if (sequenceHeaderBlock!=null) {
+                               faultMessageContext = 
checkForMessageNumberRoleover (msgCtx);
+                               if (faultMessageContext!=null)
+                                       return faultMessageContext;
+                       }
+               }
+               
+               RMMsgContext rmMsgCtx = 
MsgInitializer.initializeMessage(msgCtx);
+               int msgType = rmMsgCtx.getMessageType();
+
+               if (msgType==Constants.MessageTypes.APPLICATION || 
msgType==Constants.MessageTypes.TERMINATE_SEQ) {
+                       faultMessageContext = checkForUnknownSequence (msgCtx);
+                       if (faultMessageContext!=null)
+                               return faultMessageContext;
+                       
+               }
+               
+               if (msgType==Constants.MessageTypes.CREATE_SEQ) {
+                       faultMessageContext = checkForCreateSequenceRefused 
(msgCtx);
+                       if (faultMessageContext!=null)
+                               return faultMessageContext;
+               }
+               
+               if (msgType==Constants.MessageTypes.ACK) {
+                       faultMessageContext = checkForInvalidAcknowledgement 
(msgCtx);
+                       if (faultMessageContext!=null)
+                               return faultMessageContext;
+               }
+               
+               if (msgType==Constants.MessageTypes.APPLICATION) {
+                       faultMessageContext = checkForLastMsgNumberExceeded 
(msgCtx);
+                       if (faultMessageContext!=null)
+                               return faultMessageContext;
+               }
+               
+               return faultMessageContext;
+
+       }
+
+       private RMMsgContext checkForCreateSequenceRefused (
+                       MessageContext messageContext) throws SandeshaException 
{
+               
+               RMMsgContext rmMsgCtx = 
MsgInitializer.initializeMessage(messageContext);
+               
+               CreateSequence createSequence = (CreateSequence) rmMsgCtx
+                               
.getMessagePart(Constants.MessageParts.CREATE_SEQ);
+               if (createSequence == null)
+                       throw new SandeshaException(
+                                       "CreateSequence message does not have a 
CreateSequence part");
+
+               ConfigurationContext context = 
messageContext.getSystemContext();
+               StorageManager storageManager = (StorageManager) SandeshaUtil
+                               .getSandeshaStorageManager(context);
+               if (storageManager == null)
+                       throw new SandeshaException("Storage Manager is null");
+
+               boolean refuseSequence = false;
+               String reason = "";
+
+               SequenceOffer offer = createSequence.getSequenceOffer();
+               if (offer != null) {
+                       String offeredSequenceId = 
offer.getIdentifer().getIdentifier();
+                       if (offeredSequenceId == null || 
"".equals(offeredSequenceId)) {
+                               refuseSequence = true;
+                               reason = "Offered sequenceId is invalid";
+                       } else {
+                               NextMsgBeanMgr nextMsgBeanMgr = storageManager
+                                               .getNextMsgBeanMgr();
+                               Collection collection = 
nextMsgBeanMgr.retrieveAll();
+                               Iterator it = collection.iterator();
+                               while (it.hasNext()) {
+                                       
+                                       //checking weather a incoming sequence 
with the given id exists.
+                                       NextMsgBean nextMsgBean = (NextMsgBean) 
it.next();
+                                       String sequenceId = 
nextMsgBean.getSequenceId();
+                                       if 
(sequenceId.equals(offeredSequenceId)) {
+                                               refuseSequence = true;
+                                               reason = "A sequence with 
offered sequenceId, already axists";
+                                       }
+                                       
+                                       
+                                       //checking weather an outgoing sequence 
with the given id exists.
+                                       SequencePropertyBeanMgr 
sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
+                                       SequencePropertyBean 
sequencePropertyBean = 
sequencePropertyBeanMgr.retrieve(sequenceId,Constants.SequenceProperties.OUT_SEQUENCE_ID);
+                                       if (sequencePropertyBean!=null) {
+                                               String outSequenceId = (String) 
sequencePropertyBean.getValue();
+                                               if (outSequenceId!=null && 
outSequenceId.equals(offeredSequenceId)) {
+                                                       refuseSequence = true;
+                                                       reason = "A sequence 
with offered sequenceId, already axists";
+                                               }
+                                               
+                                               
System.out.println("OutSequenceId:" + outSequenceId);
+                                       }
+                               }
+                       }
+               }
+
+               //TODO - if (securityTokenReference is present 
RefuseCreateSequence)
+
+               if (refuseSequence) {
+
+                       FaultData data = new FaultData();
+                       data
+                                       
.setType(Constants.SOAPFaults.FaultType.CREATE_SEQUENCE_REFUSED);
+
+                       int SOAPVersion = SandeshaUtil.getSOAPVersion(rmMsgCtx
+                                       .getSOAPEnvelope());
+                       if (SOAPVersion == Constants.SOAPVersion.v1_1)
+                               data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
+                       else
+                               data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
+
+                       
data.setSubcode(Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED);
+                       data.setReason(reason);
+                       return getFault(rmMsgCtx, data);
+               }
+               
+               return null;
+
+       }
+
+       private RMMsgContext checkForLastMsgNumberExceeded (MessageContext 
msgCtx) {
+               return null;
+       }
+       
+       private RMMsgContext checkForMessageNumberRoleover (MessageContext 
messageContext) { 
+               return null;
+       }
+       
+       /**
+        * Check whether a Sequence message (a) belongs to a unknown sequence
+        * (generates an UnknownSequence fault) (b) message number exceeds a
+        * predifined limit ( genenrates a Message Number Rollover fault)
+        * 
+        * @param msgCtx
+        * @return @throws
+        *         SandeshaException
+        */
+       public RMMsgContext checkForUnknownSequence(MessageContext 
messageContext)
+                       throws SandeshaException {
+
+               RMMsgContext rmMsgCtx = 
MsgInitializer.initializeMessage(messageContext);
+               String sequenceId = null;
+               
+               if 
(rmMsgCtx.getMessageType()==Constants.MessageTypes.APPLICATION) {
+                       Sequence sequence = (Sequence) 
rmMsgCtx.getMessagePart(Constants.MessageParts.SEQUENCE);
+                       if (sequence==null)
+                               throw new SandeshaException ("Sequence part not 
found in the application message");
+                       
+                       sequenceId = sequence.getIdentifier().getIdentifier();
+                       
+               }else if 
(rmMsgCtx.getMessageType()==Constants.MessageTypes.ACK) {
+                       SequenceAcknowledgement sequenceAcknowledgement = 
(SequenceAcknowledgement) 
rmMsgCtx.getMessagePart(Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
+                       sequenceId = 
sequenceAcknowledgement.getIdentifier().getIdentifier();
+               } else if 
(rmMsgCtx.getMessageType()==Constants.MessageTypes.TERMINATE_SEQ) {
+                       TerminateSequence terminateSequence = 
(TerminateSequence) 
rmMsgCtx.getMessagePart(Constants.MessageParts.TERMINATE_SEQ);
+                       sequenceId = 
terminateSequence.getIdentifier().getIdentifier();
+               }else {
+                       //sequenceId not found.
+                       return null;
+               }
+               
+               StorageManager storageManager = SandeshaUtil
+                               
.getSandeshaStorageManager(messageContext.getSystemContext());
+               
+               NextMsgBeanMgr mgr = storageManager.getNextMsgBeanMgr();
+               SOAPEnvelope envelope = messageContext.getEnvelope();
+
+               Collection coll = mgr.retrieveAll();
+               Iterator it = coll.iterator();
+               
+               boolean validSequence = false;
+               
+               while (it.hasNext()) {
+                       NextMsgBean nextMsgBean = (NextMsgBean) it.next();
+                       String tempId = nextMsgBean.getSequenceId();
+                       if (tempId.equals(sequenceId)) {
+                               validSequence = true;
+                               break;
+                       }
+               }
+               
+               if (!validSequence) {
+                       //Return an UnknownSequence error
+                       int SOAPVersion = SandeshaUtil.getSOAPVersion(envelope);
+                       
+                       FaultData data = new FaultData ();
+                       if (SOAPVersion == Constants.SOAPVersion.v1_1)
+                               data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
+                       else
+                               data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
+                       
+                       
data.setSubcode(Constants.SOAPFaults.Subcodes.UNKNOWN_SEQUENCE);
+                       
+                       SOAPFactory factory = 
SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
+                       Identifier identifier = new Identifier (factory);
+                       identifier.setIndentifer(sequenceId);
+                       OMElement identifierOMElem = identifier.getOMElement();
+                       data.setDetail(identifierOMElem);
+                       data.setReason("The value of wsrm:Identifier is not a 
known Sequence identifier");
+                       
+                       return getFault(rmMsgCtx,data);
+
+               }
+               
+               return null;
+       }
+
+       /**
+        * 
+        * @param msgCtx
+        * @return @throws
+        *         SandeshaException
+        */
+       public RMMsgContext checkForInvalidAcknowledgement(MessageContext 
msgCtx)
+                       throws SandeshaException {
+
+               
+               //check lower<=upper
+               //TODO acked for not-send message
+               RMMsgContext rmMsgContext = new RMMsgContext ();
+               if (rmMsgContext.getMessageType()!=Constants.MessageTypes.ACK)
+                       return null;
+               
+               SequenceAcknowledgement sequenceAcknowledgement = 
(SequenceAcknowledgement) rmMsgContext.getMessagePart(Constants.MessageParts 
.SEQ_ACKNOWLEDGEMENT);
+               List sequenceAckList = 
sequenceAcknowledgement.getAcknowledgementRanges();
+               Iterator it = sequenceAckList.iterator();
+               
+               while (it.hasNext()) {
+                       AcknowledgementRange acknowledgementRange = 
(AcknowledgementRange) it.next();
+                       long upper = acknowledgementRange.getUpperValue();
+                       long lower = acknowledgementRange.getLowerValue();
+                       
+                       if (lower>upper) {
+                               //Invalid ack
+                               FaultData data = new FaultData ();
+                               int SOAPVersion = 
SandeshaUtil.getSOAPVersion(msgCtx.getEnvelope());
+                               if (SOAPVersion == Constants.SOAPVersion.v1_1)
+                                       
data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
+                               else
+                                       
data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
+                               
+                               
data.setSubcode(Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT);
+                               data.setSubcode("The SequenceAcknowledgement is 
invalid. Lower value is larger than upper value");
+                               
data.setDetail(sequenceAcknowledgement.getOMElement());
+                               
+                               return getFault(rmMsgContext ,data);
+                       }
+               }
+               
+               return null;
+       }
+
+       /**
+        * 
+        * @param type
+        * @param msgCtx
+        * @return @throws
+        *         SandeshaException
+        */
+       public RMMsgContext getFault(RMMsgContext referenceRMMsgContext,
+                       FaultData data) throws SandeshaException {
+
+               try {
+
+                       MessageContext referenceMessage = referenceRMMsgContext
+                                       .getMessageContext();
+                       MessageContext faultMsgContext = Utils
+                                       
.createOutMessageContext(referenceMessage);
+
+                       StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(referenceMessage.getSystemContext());
+
+                       //setting contexts.
+                       faultMsgContext.setAxisServiceGroup(referenceMessage
+                                       .getAxisServiceGroup());
+                       
faultMsgContext.setAxisService(referenceMessage.getAxisService());
+                       faultMsgContext.setAxisServiceGroup(referenceMessage
+                                       .getAxisServiceGroup());
+                       faultMsgContext.setServiceGroupContext(referenceMessage
+                                       .getServiceGroupContext());
+                       
faultMsgContext.setServiceGroupContextId(referenceMessage
+                                       .getServiceGroupContextId());
+                       faultMsgContext.setServiceContext(referenceMessage
+                                       .getServiceContext());
+                       faultMsgContext.setServiceContextID(referenceMessage
+                                       .getServiceContextID());
+                       
+                       AxisOperation operation = 
AxisOperationFactory.getAxisOperation(AxisOperationFactory.MEP_CONSTANT_OUT_ONLY);
+                       
+                       
+                       OperationContext operationContext = new 
OperationContext (operation);
+                       
+                       faultMsgContext.setAxisOperation(operation);
+                       faultMsgContext.setOperationContext(operationContext);
+
+                       
+                   //String toStr = null;
+                       String acksToStr = null;
+                   if 
(referenceRMMsgContext.getMessageType()==Constants.MessageTypes.CREATE_SEQ) {
+                       CreateSequence createSequence = (CreateSequence) 
referenceRMMsgContext.getMessagePart(Constants.MessageParts.CREATE_SEQ);
+                       acksToStr = 
createSequence.getAcksTo().getAddress().getEpr().getAddress();
+                   }else {
+                       SequencePropertyBeanMgr seqPropMgr = 
storageManager.getSequencePropretyBeanMgr();
+                       String sequenceId = data.getSequenceId();
+                       SequencePropertyBean acksToBean = 
seqPropMgr.retrieve(sequenceId,Constants.SequenceProperties.ACKS_TO_EPR);
+                       if (acksToBean!=null) {
+                               EndpointReference epr = (EndpointReference) 
acksToBean.getValue();
+                               if (epr!=null)
+                                       acksToStr = epr.getAddress();
+                       }
+                   }
+                   
+                   if (acksToStr!=null && 
!acksToStr.equals(Constants.WSA.NS_URI_ANONYMOUS)) {
+                       faultMsgContext.setTo(new EndpointReference 
(acksToStr));
+                   }
+                   
+                   
+                       int SOAPVersion = 
SandeshaUtil.getSOAPVersion(referenceMessage
+                                       .getEnvelope());
+
+                       
SOAPFaultEnvelopeCreator.addSOAPFaultEnvelope(faultMsgContext,
+                                       SOAPVersion, data);
+                       
+                       RMMsgContext faultRMMsgCtx = 
MsgInitializer.initializeMessage(faultMsgContext);
+
+                       return faultRMMsgCtx;
+
+               } catch (AxisFault e) {
+                       throw new SandeshaException(e.getMessage());
+               }
+
+       }
+}
\ No newline at end of file

Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java 
Thu Nov 17 08:58:03 2005
@@ -27,27 +27,40 @@
 import javax.xml.stream.XMLInputFactory;

 import javax.xml.stream.XMLStreamReader;

 import org.apache.axis2.AxisFault;

+import org.apache.axis2.addressing.AddressingConstants;

 import org.apache.axis2.addressing.MessageInformationHeaders;

 import org.apache.axis2.context.ConfigurationContext;

 import org.apache.axis2.context.MessageContext;

 import org.apache.axis2.description.TransportInDescription;

 import org.apache.axis2.description.TransportOutDescription;

 import org.apache.axis2.i18n.Messages;

+import org.apache.axis2.om.OMConstants;

 import org.apache.axis2.om.OMElement;

+import org.apache.axis2.om.OMNamespace;

 import org.apache.axis2.om.impl.llom.builder.StAXBuilder;

 import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;

 import org.apache.axis2.soap.SOAP11Constants;

 import org.apache.axis2.soap.SOAP12Constants;

 import org.apache.axis2.soap.SOAPEnvelope;

 import org.apache.axis2.soap.SOAPFactory;

+import org.apache.axis2.soap.SOAPFault;

+import org.apache.axis2.soap.SOAPFaultCode;

+import org.apache.axis2.soap.SOAPFaultDetail;

+import org.apache.axis2.soap.SOAPFaultReason;

+import org.apache.axis2.soap.SOAPFaultSubCode;

+import org.apache.axis2.soap.SOAPFaultText;

+import org.apache.axis2.soap.SOAPFaultValue;

 import org.apache.axis2.soap.impl.llom.builder.StAXSOAPModelBuilder;

 import org.apache.axis2.soap.impl.llom.soap11.SOAP11Factory;

 import org.apache.axis2.transport.http.HTTPConstants;

 import org.apache.axis2.transport.http.HTTPTransportUtils;

 import org.apache.axis2.util.UUIDGenerator;

+import org.apache.axis2.util.Utils;

 import org.apache.commons.httpclient.NameValuePair;

 import org.apache.sandesha2.Constants;

+import org.apache.sandesha2.FaultData;

 import org.apache.sandesha2.RMMsgContext;

+import org.apache.sandesha2.SOAPFaultEnvelopeCreator;

 import org.apache.sandesha2.SandeshaDynamicProperties;

 import org.apache.sandesha2.SandeshaException;

 import org.apache.sandesha2.storage.StorageManager;

@@ -63,17 +76,22 @@
 public class SandeshaUtil {

 

        private static Hashtable storedMsgContexts = new Hashtable();

+

        private static StorageManager storageManager = null;

+

        private static Sender sender = new Sender();

-       private static InOrderInvoker invoker = new InOrderInvoker ();

+

+       private static InOrderInvoker invoker = new InOrderInvoker();

+

        private static SandeshaDynamicProperties dynamicProperties = null;

-       

+

        public static String getUUID() {

                String uuid = "uuid:" + UUIDGenerator.getUUID();

                return uuid;

        }

 

-       public static AcknowledgementRange[] getAckRangeArray(String 
msgNoStr,SOAPFactory factory) {

+       public static AcknowledgementRange[] getAckRangeArray(String msgNoStr,

+                       SOAPFactory factory) {

                String[] msgNoStrs = msgNoStr.split(",");

                long[] msgNos = getLongArr(msgNoStrs);

 

@@ -188,7 +206,7 @@
                        
newMessageContext.setProcessingFault(msgCtx.isProcessingFault());

                        
newMessageContext.setResponseWritten(msgCtx.isResponseWritten());

                        
newMessageContext.setRestThroughPOST(msgCtx.isRestThroughPOST());

-                       if (msgCtx.getAxisOperation()!=null)

+                       if (msgCtx.getAxisOperation() != null)

                                
newMessageContext.setAxisOperation(msgCtx.getAxisOperation());

 

                        if (msgCtx.getEnvelope() != null)

@@ -230,27 +248,29 @@
                        MessageContext newMessageContext = new 
MessageContext(configCtx);

                        newMessageContext.setTransportIn(transportIn);

                        newMessageContext.setTransportOut(transportOut);

-                       

+

                        
newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, msgCtx

                                        
.getProperty(MessageContext.TRANSPORT_OUT));

                        
newMessageContext.setProperty(HTTPConstants.HTTPOutTransportInfo,

                                        
msgCtx.getProperty(HTTPConstants.HTTPOutTransportInfo));

 

                        //Setting the charater set encoding

-                       Object charSetEncoding = 
msgCtx.getProperty(MessageContext.CHARACTER_SET_ENCODING);

+                       Object charSetEncoding = msgCtx

+                                       
.getProperty(MessageContext.CHARACTER_SET_ENCODING);

 

-                       //TODO - this is required due to a bug in axis2. Remove 
this when it get fixed

-                       //BUG - Commons HTTP transport sender sets a 
NameValuepair to as the CHAR_SET_ENCODING 

+                       //TODO - this is required due to a bug in axis2. Remove 
this when

+                       // it get fixed

+                       //BUG - Commons HTTP transport sender sets a 
NameValuepair to as

+                       // the CHAR_SET_ENCODING

                        //instead of a String

                        if (charSetEncoding instanceof NameValuePair)

                                charSetEncoding = ((NameValuePair) 
charSetEncoding).getValue();

-                               

-                       newMessageContext

-                                       
.setProperty(MessageContext.CHARACTER_SET_ENCODING, charSetEncoding);

+

+                       newMessageContext.setProperty(

+                                       MessageContext.CHARACTER_SET_ENCODING, 
charSetEncoding);

 

                        
newMessageContext.setMessageInformationHeaders(msgInfoHeaders1);

-                       newMessageContext.setAxisService(msgCtx

-                                       .getAxisService());

+                       
newMessageContext.setAxisService(msgCtx.getAxisService());

                        if (msgCtx.getAxisServiceGroup() != null)

                                newMessageContext.setAxisServiceGroup(msgCtx

                                                .getAxisServiceGroup());

@@ -296,14 +316,14 @@
        public static void startSenderIfStopped(ConfigurationContext context) {

                if (!sender.isSenderStarted()) {

                        sender.start(context);

-                       System.out.println ("Sender started....");

+                       System.out.println("Sender started....");

                }

        }

-       

+

        public static void startInvokerIfStopped(ConfigurationContext context) {

                if (!invoker.isInvokerStarted()) {

                        invoker.start(context);

-                       System.out.println ("Invoker started....");

+                       System.out.println("Invoker started....");

                }

        }

 

@@ -335,62 +355,61 @@
 

                return false;

        }

-       

-       public static SOAPEnvelope createSOAPMessage (MessageContext 
msgContext, String soapNamespaceURI) throws AxisFault {

-        try {

-               

-            InputStream inStream = (InputStream) msgContext.getProperty(

-                    MessageContext.TRANSPORT_IN);

-            msgContext.setProperty(MessageContext.TRANSPORT_IN, null);

-            //this inputstram is set by the TransportSender represents a two 
way transport or

-            //by a Transport Recevier

-            if (inStream == null) {

-                throw new AxisFault(Messages.getMessage("inputstreamNull"));

-            }

-            

-            //This should be set later

-            //TODO check weather this affects MTOM

-            String contentType = null;

-

-            StAXBuilder builder = null;

-            SOAPEnvelope envelope = null;

-

-            String charSetEnc = 
(String)msgContext.getProperty(MessageContext.CHARACTER_SET_ENCODING);

-            if(charSetEnc == null) {

-               charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;

-            }

-            

+

+       public static SOAPEnvelope createSOAPMessage(MessageContext msgContext,

+                       String soapNamespaceURI) throws AxisFault {

+               try {

+

+                       InputStream inStream = (InputStream) msgContext

+                                       
.getProperty(MessageContext.TRANSPORT_IN);

+                       msgContext.setProperty(MessageContext.TRANSPORT_IN, 
null);

+                       //this inputstram is set by the TransportSender 
represents a two

+                       // way transport or

+                       //by a Transport Recevier

+                       if (inStream == null) {

+                               throw new 
AxisFault(Messages.getMessage("inputstreamNull"));

+                       }

+

+                       //This should be set later

+                       //TODO check weather this affects MTOM

+                       String contentType = null;

+

+                       StAXBuilder builder = null;

+                       SOAPEnvelope envelope = null;

+

+                       String charSetEnc = (String) msgContext

+                                       
.getProperty(MessageContext.CHARACTER_SET_ENCODING);

+                       if (charSetEnc == null) {

+                               charSetEnc = 
MessageContext.DEFAULT_CHAR_SET_ENCODING;

+                       }

+

                        if (contentType != null) {

-                msgContext.setDoingMTOM(true);

-                builder =

-                        HTTPTransportUtils.selectBuilderForMIME(msgContext,

-                                inStream,

-                                (String) contentType);

-                envelope = (SOAPEnvelope) builder.getDocumentElement();

-            } else if (msgContext.isDoingREST()) {

-                XMLStreamReader xmlreader =

-                        XMLInputFactory.newInstance().createXMLStreamReader(

-                                inStream,charSetEnc);

-                SOAPFactory soapFactory = new SOAP11Factory();

-                builder = new StAXOMBuilder(xmlreader);

-                builder.setOmbuilderFactory(soapFactory);

-                envelope = soapFactory.getDefaultEnvelope();

-                envelope.getBody().addChild(builder.getDocumentElement());

-            } else {

-                XMLStreamReader xmlreader =

-                        XMLInputFactory.newInstance().createXMLStreamReader(

-                                       inStream,charSetEnc);

-                builder = new StAXSOAPModelBuilder(xmlreader, 
soapNamespaceURI);

-                envelope = (SOAPEnvelope) builder.getDocumentElement();

-            }

-            return envelope;

-        } catch (Exception e) {

-            throw new AxisFault(e);

-        }

+                               msgContext.setDoingMTOM(true);

+                               builder = 
HTTPTransportUtils.selectBuilderForMIME(msgContext,

+                                               inStream, (String) contentType);

+                               envelope = (SOAPEnvelope) 
builder.getDocumentElement();

+                       } else if (msgContext.isDoingREST()) {

+                               XMLStreamReader xmlreader = 
XMLInputFactory.newInstance()

+                                               
.createXMLStreamReader(inStream, charSetEnc);

+                               SOAPFactory soapFactory = new SOAP11Factory();

+                               builder = new StAXOMBuilder(xmlreader);

+                               builder.setOmbuilderFactory(soapFactory);

+                               envelope = soapFactory.getDefaultEnvelope();

+                               
envelope.getBody().addChild(builder.getDocumentElement());

+                       } else {

+                               XMLStreamReader xmlreader = 
XMLInputFactory.newInstance()

+                                               
.createXMLStreamReader(inStream, charSetEnc);

+                               builder = new StAXSOAPModelBuilder(xmlreader, 
soapNamespaceURI);

+                               envelope = (SOAPEnvelope) 
builder.getDocumentElement();

+                       }

+                       return envelope;

+               } catch (Exception e) {

+                       throw new AxisFault(e);

+               }

 

        }

-       

-       public static String getMessageTypeString (int messageType) {

+

+       public static String getMessageTypeString(int messageType) {

                switch (messageType) {

                case Constants.MessageTypes.CREATE_SEQ:

                        return "CreateSequence";

@@ -405,118 +424,148 @@
                case Constants.MessageTypes.UNKNOWN:

                        return "Unknown";

                default:

-                       return "Error"; 

+                       return "Error";

                }

        }

-       

-       public static boolean isGloballyProcessableMessageType (int type) {

-               if (type==Constants.MessageTypes.ACK || 
type==Constants.MessageTypes.TERMINATE_SEQ) {

+

+       public static boolean isGloballyProcessableMessageType(int type) {

+               if (type == Constants.MessageTypes.ACK

+                               || type == 
Constants.MessageTypes.TERMINATE_SEQ) {

                        return true;

                }

-               

+

                return false;

        }

-       

-       public static boolean isDuplicateDropRequiredMsgType (int 
rmMessageType) {

-               if (rmMessageType==Constants.MessageTypes.APPLICATION)

+

+       public static boolean isDuplicateDropRequiredMsgType(int rmMessageType) 
{

+               if (rmMessageType == Constants.MessageTypes.APPLICATION)

                        return true;

-               

-               if (rmMessageType==Constants.MessageTypes.CREATE_SEQ_RESPONSE)

+

+               if (rmMessageType == Constants.MessageTypes.CREATE_SEQ_RESPONSE)

                        return true;

-               

+

                return false;

        }

-       

+

        //TODO: correct following to work for long.

-       public static ArrayList getSplittedMsgNoArraylist (String str) {

+       public static ArrayList getSplittedMsgNoArraylist(String str) {

                String[] splitted = str.split(",");

-               ArrayList results = new ArrayList ();

-               

+               ArrayList results = new ArrayList();

+

                long count = splitted.length;

-               for (int i=0;i<count;i++) {

+               for (int i = 0; i < count; i++) {

                        String s = splitted[i];

                        results.add(s);

                }

-               

+

                return results;

        }

-       

-       public static String getServerSideIncomingSeqIdFromInternalSeqId 
(String internalSequenceId) {

+

+       public static String getServerSideIncomingSeqIdFromInternalSeqId(

+                       String internalSequenceId) {

                String incomingSequenceId = internalSequenceId;

                return incomingSequenceId;

        }

-       

-       public static String getServerSideInternalSeqIdFromIncomingSeqId 
(String incomingSequenceId) {

+

+       public static String getServerSideInternalSeqIdFromIncomingSeqId(

+                       String incomingSequenceId) {

                String internalSequenceId = incomingSequenceId;

                return internalSequenceId;

        }

-       

-       public static StorageManager getSandeshaStorageManager 
(ConfigurationContext context) throws SandeshaException {

+

+       public static StorageManager getSandeshaStorageManager(

+                       ConfigurationContext context) throws SandeshaException {

                String srotageManagerClassStr = Constants.STORAGE_MANAGER_IMPL;

-               

-               if (storageManager!=null)

+

+               if (storageManager != null)

                        return storageManager;

-               

+

                try {

                        Class c = Class.forName(srotageManagerClassStr);

-                       Class configContextClass = 
Class.forName(context.getClass().getName());

-                       Constructor constructor = c.getConstructor(new 
Class[]{configContextClass});

-                       Object obj = constructor.newInstance(new Object[] 
{context});

-                       

-                       if (obj==null || !(obj instanceof StorageManager))

-                               throw new SandeshaException ("StorageManager 
must implement org.apache.sandeshat.storage.StorageManager");

-                       

+                       Class configContextClass = 
Class.forName(context.getClass()

+                                       .getName());

+                       Constructor constructor = c

+                                       .getConstructor(new Class[] { 
configContextClass });

+                       Object obj = constructor.newInstance(new Object[] { 
context });

+

+                       if (obj == null || !(obj instanceof StorageManager))

+                               throw new SandeshaException(

+                                               "StorageManager must implement 
org.apache.sandeshat.storage.StorageManager");

+

                        StorageManager mgr = (StorageManager) obj;

                        storageManager = mgr;

                        return storageManager;

-                       

+

                } catch (Exception e) {

                        System.out.println(e.getMessage());

-                       throw new SandeshaException (e.getMessage());

-               } 

+                       throw new SandeshaException(e.getMessage());

+               }

        }

-       

-       public static SandeshaDynamicProperties getDynamicProperties () {

-               if (dynamicProperties==null) {

-                       loadDymanicProperties ();

+

+       public static SandeshaDynamicProperties getDynamicProperties() {

+               if (dynamicProperties == null) {

+                       loadDymanicProperties();

                }

-               

+

                return dynamicProperties;

        }

-       

-       private static void loadDymanicProperties () {

-               dynamicProperties = new SandeshaDynamicProperties ();

-               

+

+       private static void loadDymanicProperties() {

+               dynamicProperties = new SandeshaDynamicProperties();

+

                //TODO: override properties from the sandesha-config.xml

-               

+

        }

-       

-       public static int getSOAPVersion (SOAPEnvelope envelope) throws 
SandeshaException {

+

+       public static int getSOAPVersion(SOAPEnvelope envelope)

+                       throws SandeshaException {

                String namespaceName = envelope.getNamespace().getName();

-               if 
(namespaceName.equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI)) 

+               if 
(namespaceName.equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI))

                        return Constants.SOAPVersion.v1_1;

-               else if 
(namespaceName.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI))

+               else if (namespaceName

+                               
.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI))

                        return Constants.SOAPVersion.v1_2;

                else

-                       throw new SandeshaException ("Unknown SOAP version");

+                       throw new SandeshaException("Unknown SOAP version");

        }

-       

-       public static boolean isRMGlobalMessage (MessageContext msgCtx) {

+

+       public static boolean isRMGlobalMessage(MessageContext msgCtx) {

                boolean rmGlobalMsg = false;

-               

+

                String action = msgCtx.getWSAAction();

                SOAPEnvelope env = msgCtx.getEnvelope();

-               OMElement sequenceElem = env.getFirstChildWithName(new QName 
(Constants.WSRM.NS_URI_RM,Constants.WSRM.SEQUENCE));

-               

-               if (sequenceElem!=null)

+               OMElement sequenceElem = env.getFirstChildWithName(new QName(

+                               Constants.WSRM.NS_URI_RM, 
Constants.WSRM.SEQUENCE));

+

+               if (sequenceElem != null)

                        rmGlobalMsg = true;

-               

-               if 
(Constants.WSRM.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT.equals(action))

+

+               if (Constants.WSRM.Actions.ACTION_SEQUENCE_ACKNOWLEDGEMENT

+                               .equals(action))

                        rmGlobalMsg = true;

-               

+

                if 
(Constants.WSRM.Actions.ACTION_TERMINATE_SEQUENCE.equals(action))

                        rmGlobalMsg = true;

-               

+

                return rmGlobalMsg;

        }

+

+       public static RMMsgContext createResponseRMMessage(

+                       RMMsgContext referenceRMMessage) throws 
SandeshaException {

+               try {

+                       MessageContext referenceMessage = referenceRMMessage

+                                       .getMessageContext();

+                       MessageContext faultMsgContext = Utils

+                                       
.createOutMessageContext(referenceMessage);

+

+                       RMMsgContext faultRMMsgCtx = MsgInitializer

+                                       .initializeMessage(faultMsgContext);

+

+                       return faultRMMsgCtx;

+

+               } catch (AxisFault e) {

+                       throw new SandeshaException(e.getMessage());

+               }

+       }       

+

 }

Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Identifier.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Identifier.java?rev=345285&r1=345284&r2=345285&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Identifier.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/wsrm/Identifier.java 
Thu Nov 17 08:58:03 2005
@@ -58,6 +58,7 @@
        }

 

        public OMElement getOMElement() throws OMException {

+               identifierElement.setText(identifier);

                return identifierElement;

        }

 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to