You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2005/11/17 17:59:05 UTC

svn commit: r345285 - in /webservices/sandesha/trunk/src/org/apache/sandesha2: ./ handlers/ msgprocessors/ storage/beans/ storage/inmemory/ util/ wsrm/

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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org