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