Author: gatfora
Date: Wed Jan 31 08:14:31 2007
New Revision: 501876
URL: http://svn.apache.org/viewvc?view=rev&rev=501876
Log:
Add support for the CreateSequenceRefused fault message
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/FaultData.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/FaultData.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/FaultData.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/FaultData.java
(original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/FaultData.java Wed
Jan 31 08:14:31 2007
@@ -35,8 +35,12 @@
private String reason;
private OMElement detail;
+
+ private String detailString;
private String sequenceId;
+
+ private String exceptionString;
public OMElement getDetail() {
return detail;
@@ -85,4 +89,20 @@
public void setSequenceId(String sequenceId) {
this.sequenceId = sequenceId;
}
-}
\ No newline at end of file
+
+ public String getDetailString() {
+ return detailString;
+ }
+
+ public void setDetailString(String detailString) {
+ this.detailString = detailString;
+ }
+
+ public String getExceptionString() {
+ return exceptionString;
+ }
+
+ public void setExceptionString(String exceptionString) {
+ this.exceptionString = exceptionString;
+ }
+}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
Wed Jan 31 08:14:31 2007
@@ -130,6 +130,8 @@
String FAULT_CODE = "FaultCode";
+ String DETAIL = "Detail";
+
String SEQUENCE_FAULT = "SequenceFault";
String ACKS_TO = "AcksTo";
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
Wed Jan 31 08:14:31 2007
@@ -285,4 +285,8 @@
public final static String couldNotLoadModulePolicies =
"couldNotLoadModulePolicies";
public final static String modulePoliciesLoaded =
"modulePoliciesLoaded";
+
+ public final static String createSequenceRefused =
"createSequenceRefused";
+ public final static String referencedMessageNotFound =
"referencedMessageNotFound";
+
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
Wed Jan 31 08:14:31 2007
@@ -294,3 +294,6 @@
couldNotLoadModulePolicies=Could not load module policies. Using default
values.
modulePoliciesLoaded=Module policies were successfully loaded
+
+createSequenceRefused=The Create Sequence request has been refused by the RM
Destination
+referencedMessageNotFound = Reference message is not present for the sequence
with property key {0}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
Wed Jan 31 08:14:31 2007
@@ -478,8 +478,7 @@
ConfigurationContext configCtx =
applicationMsg.getConfigurationContext();
// generating a new create sequeuce message.
- RMMsgContext createSeqRMMessage =
RMMsgCreator.createCreateSeqMsg(rmsBean, applicationRMMsg, sequencePropertyKey,
acksTo,
- storageManager);
+ RMMsgContext createSeqRMMessage =
RMMsgCreator.createCreateSeqMsg(rmsBean, applicationRMMsg, acksTo);
createSeqRMMessage.setFlow(MessageContext.OUT_FLOW);
CreateSequence createSequencePart = (CreateSequence)
createSeqRMMessage
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
Wed Jan 31 08:14:31 2007
@@ -20,6 +20,8 @@
import java.util.Collection;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
@@ -41,6 +43,7 @@
import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.MsgInitializer;
import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.RangeString;
@@ -65,173 +68,206 @@
if (log.isDebugEnabled())
log.debug("Enter:
CreateSeqMsgProcessor::processInMessage");
- MessageContext createSeqMsg =
createSeqRMMsg.getMessageContext();
- CreateSequence createSeqPart = (CreateSequence) createSeqRMMsg
-
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
- if (createSeqPart == null) {
- String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noCreateSeqParts);
- log.debug(message);
- throw new SandeshaException(message);
- }
-
- ConfigurationContext context =
createSeqMsg.getConfigurationContext();
- StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(context, context.getAxisConfiguration());
-
- // If the inbound CreateSequence includes a
SecurityTokenReference then
- // ask the security manager to resolve that to a token for us.
We also
- // check that the Create was secured using the token.
- SecurityManager secManager =
SandeshaUtil.getSecurityManager(context);
- OMElement theSTR = createSeqPart.getSecurityTokenReference();
- SecurityToken token = null;
- if(theSTR != null) {
- MessageContext msgcontext =
createSeqRMMsg.getMessageContext();
- token = secManager.getSecurityToken(theSTR, msgcontext);
-
- // The create must be the body part of this message, so
we check the
- // security of that element.
- OMElement body = msgcontext.getEnvelope().getBody();
- secManager.checkProofOfPossession(token, body,
msgcontext);
- }
-
- MessageContext outMessage = null;
-
- // Create the new sequence id, as well as establishing the
beans that handle the
- // sequence state.
- RMDBean rmdBean =
SequenceManager.setupNewSequence(createSeqRMMsg, storageManager, secManager,
token);
-
- RMMsgContext createSeqResponse =
RMMsgCreator.createCreateSeqResponseMsg(createSeqRMMsg, rmdBean);
- outMessage = createSeqResponse.getMessageContext();
-
- createSeqResponse.setFlow(MessageContext.OUT_FLOW);
+ try {
+ CreateSequence createSeqPart = (CreateSequence)
createSeqRMMsg
+
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
+ if (createSeqPart == null) {
+ if (log.isDebugEnabled())
+
log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noCreateSeqParts));
+
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
+
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noCreateSeqParts),
+
new Exception());
+ // Return false if an Exception hasn't been
thrown.
+ if (log.isDebugEnabled())
+ log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
+ return false;
- // for making sure that this won't be processed again
-
createSeqResponse.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE,
"true");
-
- CreateSequenceResponse createSeqResPart =
(CreateSequenceResponse) createSeqResponse
-
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE);
-
- // OFFER PROCESSING
- SequenceOffer offer = createSeqPart.getSequenceOffer();
- if (offer != null) {
- Accept accept = createSeqResPart.getAccept();
- if (accept == null) {
- String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAcceptPart);
- log.debug(message);
- throw new SandeshaException(message);
}
-
- // offered seq id
- String offeredSequenceID =
offer.getIdentifer().getIdentifier();
+
+ MessageContext createSeqMsg =
createSeqRMMsg.getMessageContext();
+ ConfigurationContext context =
createSeqMsg.getConfigurationContext();
+ StorageManager storageManager =
SandeshaUtil.getSandeshaStorageManager(context, context.getAxisConfiguration());
+
+ // If the inbound CreateSequence includes a
SecurityTokenReference then
+ // ask the security manager to resolve that to a token
for us. We also
+ // check that the Create was secured using the token.
+ SecurityManager secManager =
SandeshaUtil.getSecurityManager(context);
+ OMElement theSTR =
createSeqPart.getSecurityTokenReference();
+ SecurityToken token = null;
+ if(theSTR != null) {
+ MessageContext msgcontext =
createSeqRMMsg.getMessageContext();
+ token = secManager.getSecurityToken(theSTR,
msgcontext);
+
+ // The create must be the body part of this
message, so we check the
+ // security of that element.
+ OMElement body =
msgcontext.getEnvelope().getBody();
+ secManager.checkProofOfPossession(token, body,
msgcontext);
+ }
+
+ MessageContext outMessage = null;
+
+ // Create the new sequence id, as well as establishing
the beans that handle the
+ // sequence state.
+ RMDBean rmdBean =
SequenceManager.setupNewSequence(createSeqRMMsg, storageManager, secManager,
token);
+
+ RMMsgContext createSeqResponse =
RMMsgCreator.createCreateSeqResponseMsg(createSeqRMMsg, rmdBean);
+ outMessage = createSeqResponse.getMessageContext();
+
+ createSeqResponse.setFlow(MessageContext.OUT_FLOW);
+
+ // for making sure that this won't be processed again
+
createSeqResponse.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE,
"true");
- boolean offerEcepted = offerAccepted(offeredSequenceID,
context, createSeqRMMsg, storageManager);
-
- if (offerEcepted) {
- // Setting the CreateSequence table entry for
the outgoing
- // side.
- RMSBean rMSBean = new RMSBean();
- rMSBean.setSequenceID(offeredSequenceID);
- String outgoingSideInternalSequenceId =
SandeshaUtil
-
.getOutgoingSideInternalSequenceID(rmdBean.getSequenceID());
-
rMSBean.setInternalSequenceID(outgoingSideInternalSequenceId);
- // this is a dummy value
-
rMSBean.setCreateSeqMsgID(SandeshaUtil.getUUID());
-
- rMSBean.setToEPR(rmdBean.getToEPR());
- rMSBean.setAcksToEPR(rmdBean.getAcksToEPR());
- rMSBean.setReplyToEPR(rmdBean.getReplyToEPR());
-
rMSBean.setLastActivatedTime(System.currentTimeMillis());
- rMSBean.setRMVersion(rmdBean.getRMVersion());
- rMSBean.setClientCompletedMessages(new
RangeString());
-
- // Setting sequence properties for the outgoing
sequence.
- // Only will be used by the server side
response path. Will
- // be wasted properties for the client side.
-
- Endpoint endpoint = offer.getEndpoint();
- if (endpoint!=null) {
- // setting the OfferedEndpoint
-
rMSBean.setOfferedEndPoint(endpoint.getEPR().getAddress());
+ CreateSequenceResponse createSeqResPart =
(CreateSequenceResponse) createSeqResponse
+
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE);
+
+ // OFFER PROCESSING
+ SequenceOffer offer = createSeqPart.getSequenceOffer();
+ if (offer != null) {
+ Accept accept = createSeqResPart.getAccept();
+ if (accept == null) {
+ if (log.isDebugEnabled())
+
log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAcceptPart));
+
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
+
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAcceptPart),
+
new Exception());
+ // Return false if an Exception hasn't
been thrown.
+ if (log.isDebugEnabled())
+ log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
+ return false;
}
- RMSBeanMgr rmsBeanMgr =
storageManager.getRMSBeanMgr();
-
- // Store the inbound token (if any) with the
new sequence
-
rMSBean.setSecurityTokenData(rmdBean.getSecurityTokenData());
+ // offered seq id
+ String offeredSequenceID =
offer.getIdentifer().getIdentifier();
- rmsBeanMgr.insert(rMSBean);
- } else {
- // removing the accept part.
- createSeqResPart.setAccept(null);
- createSeqResponse.addSOAPEnvelope();
- }
- }
+ boolean offerEcepted =
offerAccepted(offeredSequenceID, context, createSeqRMMsg, storageManager);
+
+ if (offerEcepted) {
+ // Setting the CreateSequence table
entry for the outgoing
+ // side.
+ RMSBean rMSBean = new RMSBean();
+
rMSBean.setSequenceID(offeredSequenceID);
+ String outgoingSideInternalSequenceId =
SandeshaUtil
+
.getOutgoingSideInternalSequenceID(rmdBean.getSequenceID());
+
rMSBean.setInternalSequenceID(outgoingSideInternalSequenceId);
+ // this is a dummy value
+
rMSBean.setCreateSeqMsgID(SandeshaUtil.getUUID());
- //TODO add createSequenceResponse message as the
referenceMessage to the RMDBean.
-
- outMessage.setResponseWritten(true);
-
- rmdBean.setLastActivatedTime(System.currentTimeMillis());
- storageManager.getRMDBeanMgr().update(rmdBean);
-
- AxisEngine engine = new AxisEngine(context);
- try{
- engine.send(outMessage);
- }
- catch(AxisFault e){
- throw new SandeshaException(
-
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendCreateSeqResponse,
e.toString()),
- e);
- }
-
- boolean anon = true;
- if (rmdBean.getToEPR() != null) {
- EndpointReference toEPR = new
EndpointReference(rmdBean.getToEPR());
- if (!toEPR.hasAnonymousAddress()) anon = false;
- }
- if(anon) {
-
createSeqMsg.getOperationContext().setProperty(org.apache.axis2.Constants.RESPONSE_WRITTEN,
"true");
- } else {
-
createSeqMsg.getOperationContext().setProperty(org.apache.axis2.Constants.RESPONSE_WRITTEN,
"false");
- }
-
-
-
-// SequencePropertyBean findBean = new SequencePropertyBean ();
-// findBean.setName
(Sandesha2Constants.SequenceProperties.TERMINATE_ON_CREATE_SEQUENCE);
-// findBean.setValue(createSeqMsg.getTo().getAddress());
-
-
+ rMSBean.setToEPR(rmdBean.getToEPR());
+
rMSBean.setAcksToEPR(rmdBean.getAcksToEPR());
+
rMSBean.setReplyToEPR(rmdBean.getReplyToEPR());
+
rMSBean.setLastActivatedTime(System.currentTimeMillis());
+
rMSBean.setRMVersion(rmdBean.getRMVersion());
+ rMSBean.setClientCompletedMessages(new
RangeString());
+
+ // Setting sequence properties for the
outgoing sequence.
+ // Only will be used by the server side
response path. Will
+ // be wasted properties for the client
side.
+
+ Endpoint endpoint = offer.getEndpoint();
+ if (endpoint!=null) {
+ // setting the OfferedEndpoint
+
rMSBean.setOfferedEndPoint(endpoint.getEPR().getAddress());
+ }
- String toAddress = createSeqMsg.getTo().getAddress();
- //if toAddress is RMAnon we may need to terminate the request
side sequence here.
- if (toAddress!=null && SandeshaUtil.isWSRMAnonymous(toAddress))
{
-
- RMSBean findBean = new RMSBean ();
- findBean.setReplyToEPR(toAddress);
+ RMSBeanMgr rmsBeanMgr =
storageManager.getRMSBeanMgr();
+
+ // Store the inbound token (if any)
with the new sequence
+
rMSBean.setSecurityTokenData(rmdBean.getSecurityTokenData());
+
+ rmsBeanMgr.insert(rMSBean);
+ } else {
+ // removing the accept part.
+ createSeqResPart.setAccept(null);
+ createSeqResponse.addSOAPEnvelope();
+ }
+ }
+
+ //TODO add createSequenceResponse message as the
referenceMessage to the RMDBean.
+
+ outMessage.setResponseWritten(true);
+
+
rmdBean.setLastActivatedTime(System.currentTimeMillis());
+ storageManager.getRMDBeanMgr().update(rmdBean);
+
+ AxisEngine engine = new AxisEngine(context);
+ try{
+ engine.send(outMessage);
+ }
+ catch(AxisFault e){
+
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
+
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendCreateSeqResponse,
+
SandeshaUtil.getStackTraceFromException(e)), e);
+ // Return false if an Exception hasn't been
thrown.
+ if (log.isDebugEnabled())
+ log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
+ return false;
+ }
+
+ boolean anon = true;
+ if (rmdBean.getToEPR() != null) {
+ EndpointReference toEPR = new
EndpointReference(rmdBean.getToEPR());
+ if (!toEPR.hasAnonymousAddress()) anon = false;
+ }
+ if(anon) {
+
createSeqMsg.getOperationContext().setProperty(org.apache.axis2.Constants.RESPONSE_WRITTEN,
"true");
+ } else {
+
createSeqMsg.getOperationContext().setProperty(org.apache.axis2.Constants.RESPONSE_WRITTEN,
"false");
+ }
- //TODO recheck
- RMSBean rmsBean =
storageManager.getRMSBeanMgr().findUnique(findBean);
- if (rmsBean!=null) {
+ // SequencePropertyBean findBean = new
SequencePropertyBean ();
+ // findBean.setName
(Sandesha2Constants.SequenceProperties.TERMINATE_ON_CREATE_SEQUENCE);
+ // findBean.setValue(createSeqMsg.getTo().getAddress());
+
+ String toAddress = createSeqMsg.getTo().getAddress();
+ //if toAddress is RMAnon we may need to terminate the
request side sequence here.
+ if (toAddress!=null &&
SandeshaUtil.isWSRMAnonymous(toAddress)) {
+
+ RMSBean findBean = new RMSBean ();
+ findBean.setReplyToEPR(toAddress);
- if (rmsBean.isTerminationPauserForCS()) {
- //AckManager hs not done the
termination. Do the termination here.
+ //TODO recheck
+ RMSBean rmsBean =
storageManager.getRMSBeanMgr().findUnique(findBean);
+ if (rmsBean!=null) {
- MessageContext requestSideRefMessage =
storageManager.retrieveMessageContext(rmsBean.getReferenceMessageStoreKey(),context);
- if (requestSideRefMessage==null) {
- String message = "Reference
message is not present for the sequence with property key " +
rmsBean.getInternalSequenceID();
- throw new SandeshaException
(message);
+ if (rmsBean.isTerminationPauserForCS())
{
+ //AckManager hs not done the
termination. Do the termination here.
+ MessageContext
requestSideRefMessage =
storageManager.retrieveMessageContext(rmsBean.getReferenceMessageStoreKey(),context);
+ if
(requestSideRefMessage==null) {
+
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
+
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.referencedMessageNotFound,
rmsBean.getInternalSequenceID()),
+ new
Exception());
+ // Return false if an
Exception hasn't been thrown.
+ if
(log.isDebugEnabled())
+
log.debug("Exit: CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
+ return false;
+ }
+
+ RMMsgContext
requestSideRefRMMessage =
MsgInitializer.initializeMessage(requestSideRefMessage);
+
TerminateManager.addTerminateSequenceMessage(requestSideRefRMMessage,
rmsBean.getInternalSequenceID(), rmsBean.getSequenceID(), storageManager);
}
-
- RMMsgContext requestSideRefRMMessage =
MsgInitializer.initializeMessage(requestSideRefMessage);
-
TerminateManager.addTerminateSequenceMessage(requestSideRefRMMessage,
rmsBean.getInternalSequenceID(), rmsBean.getSequenceID(), storageManager);
}
-
}
-
+
+ createSeqRMMsg.pause();
+ }
+ catch (Exception e) {
+ if (log.isDebugEnabled())
+ log.debug("Caught an exception processing
CreateSequence message", e);
+ // Does the message context already contain a fault ?
+ // If it doesn't then we can add the
CreateSequenceRefusedFault.
+ if
(createSeqRMMsg.getMessageContext().getProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME)
== null &&
+
createSeqRMMsg.getMessageContext().getProperty(SOAP11Constants.SOAP_FAULT_CODE_LOCAL_NAME)
== null) {
+ // Add the fault details to the message
+
FaultManager.makeCreateSequenceRefusedFault(createSeqRMMsg,
SandeshaUtil.getStackTraceFromException(e), e);
+
+ // Return false if an Exception hasn't been
thrown.
+ if (log.isDebugEnabled())
+ log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.FALSE);
+ return false;
+ }
}
-
- createSeqRMMsg.pause();
if (log.isDebugEnabled())
log.debug("Exit:
CreateSeqMsgProcessor::processInMessage " + Boolean.TRUE);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgreceivers/RMMessageReceiver.java
Wed Jan 31 08:14:31 2007
@@ -81,8 +81,12 @@
}
}
- String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.inMsgError, e.toString());
- throw new AxisFault(message, e);
+ if (!(e instanceof AxisFault)) {
+ String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.inMsgError, e.toString());
+ throw new AxisFault(message, e);
+ }
+
+ throw (AxisFault)e;
} finally {
if (transaction != null) {
try {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
Wed Jan 31 08:14:31 2007
@@ -35,7 +35,10 @@
import org.apache.axiom.soap.SOAPFaultText;
import org.apache.axiom.soap.SOAPFaultValue;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.util.MessageContextBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.FaultData;
@@ -258,6 +261,48 @@
log.debug("Exit:
FaultManager::checkForInvalidAcknowledgement");
}
+ /**
+ * Makes a Create sequence refused fault
+ */
+ public static void makeCreateSequenceRefusedFault(RMMsgContext
rmMessageContext,
+
String detail,
+
Exception e)
+
+ throws AxisFault {
+ if (log.isDebugEnabled())
+ log.debug("Enter:
FaultManager::makeCreateSequenceRefusedFault, " + detail);
+
+ // Return an UnknownSequence error
+ MessageContext messageContext =
rmMessageContext.getMessageContext();
+
+ int SOAPVersion =
SandeshaUtil.getSOAPVersion(messageContext.getEnvelope());
+
+ FaultData data = new FaultData();
+ if (SOAPVersion == Sandesha2Constants.SOAPVersion.v1_1)
+ data.setCode(SOAP11Constants.FAULT_CODE_RECEIVER);
+ else
+ data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
+
+
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED);
+
+ SOAPFactory factory =
SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
+ OMElement identifierElement =
factory.createOMElement(Sandesha2Constants.WSRM_COMMON.IDENTIFIER,
+ rmMessageContext.getRMNamespaceValue(),
Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+ identifierElement.setText(detail);
+ data.setDetail(identifierElement);
+ data.setDetailString(detail);
+
+
data.setReason(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.createSequenceRefused));
+
+
data.setType(Sandesha2Constants.SOAPFaults.FaultType.CREATE_SEQUENCE_REFUSED);
+
+
data.setExceptionString(SandeshaUtil.getStackTraceFromException(e));
+
+ if (log.isDebugEnabled())
+ log.debug("Exit:
FaultManager::makeCreateSequenceRefusedFault");
+ getOrSendFault(rmMessageContext, data);
+ }
+
public static void checkForSequenceClosed(RMMsgContext
referenceRMMessage, String sequenceID,
RMDBean rmdBean) throws AxisFault {
if (log.isDebugEnabled())
@@ -298,6 +343,73 @@
if (log.isDebugEnabled())
log.debug("Exit: FaultManager::checkForSequenceClosed");
+ }
+
+ /**
+ * Adds the necessary Fault elements as properties to the message
context.
+ * Or if this is a SOAP11 Fault, generates the correct RM Fault and
sends.
+ *
+ * @param referenceRMMsgContext - Message in reference to which the
fault will be generated.
+ * @param data - data for the fault
+ * @return - The dummy fault to be thrown out.
+ *
+ * @throws AxisFault
+ */
+ public static void getOrSendFault(RMMsgContext referenceRMMsgContext,
FaultData data) throws AxisFault {
+ SOAPFactory factory = (SOAPFactory)
referenceRMMsgContext.getSOAPEnvelope().getOMFactory();
+
+ SOAPFaultCode faultCode = factory.createSOAPFaultCode();
+ SOAPFaultSubCode faultSubCode =
factory.createSOAPFaultSubCode(faultCode);
+
+ SOAPFaultValue faultColdValue =
factory.createSOAPFaultValue(faultCode);
+ SOAPFaultValue faultSubcodeValue =
factory.createSOAPFaultValue(faultSubCode);
+
+ faultColdValue.setText(data.getCode());
+ faultSubcodeValue.setText(data.getSubcode());
+
+ faultCode.setSubCode(faultSubCode);
+
+ SOAPFaultReason reason = factory.createSOAPFaultReason();
+ SOAPFaultText reasonText = factory.createSOAPFaultText();
+ reasonText.setText(data.getReason());
+ reason.addSOAPText(reasonText);
+
+ SOAPFaultDetail detail = factory.createSOAPFaultDetail();
+ detail.addDetailEntry(data.getDetail());
+
+ String SOAPNamespaceValue = factory.getSoapVersionURI();
+
+ if
(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(SOAPNamespaceValue)) {
+
referenceRMMsgContext.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME,
faultCode);
+
referenceRMMsgContext.setProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME,
reason);
+
referenceRMMsgContext.setProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME,
detail);
+ } else if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals
(SOAPNamespaceValue)) {
+ // Need to send this message as the Axis Layer doesn't
set the "SequenceFault" header
+ MessageContext faultMessageContext =
+
MessageContextBuilder.createFaultMessageContext(referenceRMMsgContext.getMessageContext(),
null);
+
SOAPFaultEnvelopeCreator.addSOAPFaultEnvelope(faultMessageContext,
Sandesha2Constants.SOAPVersion.v1_1, data,
referenceRMMsgContext.getRMNamespaceValue());
+
+
referenceRMMsgContext.getMessageContext().getOperationContext().setProperty(
+
org.apache.axis2.Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
+
+ if (log.isDebugEnabled())
+ log.debug("Sending fault message " +
faultMessageContext.getEnvelope().getHeader());
+ // Send the message
+ AxisEngine engine = new
AxisEngine(faultMessageContext.getConfigurationContext());
+ engine.sendFault(faultMessageContext);
+
+
referenceRMMsgContext.setProperty(SOAP11Constants.SOAP_FAULT_CODE_LOCAL_NAME,
faultCode);
+
referenceRMMsgContext.setProperty(SOAP11Constants.SOAP_FAULT_DETAIL_LOCAL_NAME,
detail);
+
referenceRMMsgContext.setProperty(SOAP11Constants.SOAP_FAULT_STRING_LOCAL_NAME,
reason);
+
+ return;
+ } else {
+ String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.unknownSoapVersion);
+ throw new SandeshaException (message);
+ }
+ AxisFault fault = new
AxisFault(faultColdValue.getTextAsQName(), data.getReason(), "", "",
data.getDetail());
+ throw fault;
+
}
/**
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
Wed Jan 31 08:14:31 2007
@@ -81,8 +81,8 @@
* @return
* @throws SandeshaException
*/
- public static RMMsgContext createCreateSeqMsg(RMSBean rmsBean,
RMMsgContext applicationRMMsg, String sequencePropertyKey,
- EndpointReference acksToEPR, StorageManager
storageManager) throws AxisFault {
+ public static RMMsgContext createCreateSeqMsg(RMSBean rmsBean,
RMMsgContext applicationRMMsg,
+ EndpointReference acksToEPR) throws AxisFault {
MessageContext applicationMsgContext =
applicationRMMsg.getMessageContext();
if (applicationMsgContext == null)
@@ -131,8 +131,8 @@
}
// If acksTo has not been set, then default to anonaymous,
using the correct spec level
- String anon =
SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespace);
- if(acksToEPR == null) acksToEPR = new EndpointReference(anon);
+ if(acksToEPR == null) acksToEPR =
+ new
EndpointReference(SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespace));
CreateSequence createSequencePart = new
CreateSequence(rmNamespaceValue);
@@ -153,7 +153,7 @@
}
// Finally fall back to using an anonymous endpoint
if (offeredEndpoint==null) {
- offeredEndpoint = new EndpointReference(anon);
+ offeredEndpoint = new
EndpointReference(SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespace));
}
if (offeredSequence != null &&
!"".equals(offeredSequence)) {
SequenceOffer offerPart = new
SequenceOffer(rmNamespaceValue);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
Wed Jan 31 08:14:31 2007
@@ -17,9 +17,7 @@
package org.apache.sandesha2.util;
-import org.apache.axiom.om.OMConstants;
import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPFault;
@@ -115,7 +113,10 @@
FaultCode faultCode = new FaultCode(rmNamespaceValue);
faultCode.setFaultCode(faultData.getSubcode());
+ faultCode.setDetail(faultData.getDetailString());
sequenceFault.setFaultCode(faultCode);
+
+
sequenceFault.toOMElement(faultMessageContext.getEnvelope().getHeader());
}
/**
@@ -137,33 +138,17 @@
.getSOAPVersion(faultMsgEnvelope));
SOAPFault fault = faultMsgEnvelope.getBody().getFault();
+
+ // Set the faultcode
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.setText(data.getReason());
- faultCode.getValue().setText(data.getSubcode());
- SOAPFaultText faultText = faultReason.getSOAPFaultText("en");
- if (faultText==null)
- {
- faultText = factory.createSOAPFaultText();
- // Add the SOAP text
- faultReason.addSOAPText(faultText);
- }
-
- faultText.addAttribute("lang", "en", namespace);
-
- faultText.setText(data.getReason());
-
+ faultCode.getValue().setText(data.getCode());
+
+ // Set the faultstring
+ fault.getReason().getFirstSOAPText().setText(data.getReason());
+
+ if (data.getExceptionString() != null)
+ fault.getDetail().setText(data.getExceptionString());
+
//SequenceFault header is added only for SOAP 1.1
if (isSequenceFault(data))
addSequenceFaultHeader(faultMsgContext, data, factory,
rmNamespaceValue);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
Wed Jan 31 08:14:31 2007
@@ -18,7 +18,9 @@
package org.apache.sandesha2.util;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
+import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Iterator;
@@ -1162,5 +1164,14 @@
}
return clonedEnvelope;
+ }
+
+ public static final String getStackTraceFromException(Exception e) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintWriter pw = new PrintWriter(baos);
+ e.printStackTrace(pw);
+ pw.flush();
+ String stackTrace = baos.toString();
+ return stackTrace;
}
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
Wed Jan 31 08:14:31 2007
@@ -13,6 +13,7 @@
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
@@ -80,9 +81,9 @@
EndpointReference acksTo = createSequence.getAcksTo().getEPR();
if (acksTo == null) {
- String message =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAcksToPartInCreateSequence);
- log.debug(message);
- throw new AxisFault(message);
+
FaultManager.makeCreateSequenceRefusedFault(createSequenceMsg,
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAcksToPartInCreateSequence),
new Exception());
+ } else if
(acksTo.getAddress().equals(AddressingConstants.Final.WSA_NONE_URI)){
+
FaultManager.makeCreateSequenceRefusedFault(createSequenceMsg, "AcksTo can not
be " + AddressingConstants.Final.WSA_NONE_URI, new Exception());
}
MessageContext createSeqContext =
createSequenceMsg.getMessageContext();
@@ -123,11 +124,6 @@
// message to invoke. This will apply for only in-order
invocations.
SandeshaUtil.startSenderForTheSequence(configurationContext,
sequenceId);
-
- // stting the RM SPEC version for this sequence.
- String createSequenceMsgAction =
createSequenceMsg.getWSAAction();
- if (createSequenceMsgAction == null)
- throw new
SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noWSAACtionValue));
String messageRMNamespace = createSequence.getNamespaceValue();
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java
Wed Jan 31 08:14:31 2007
@@ -37,6 +37,8 @@
private String faultCode = null;
private String namespaceValue = null;
+
+ private String detail;
public FaultCode(String namespaceValue) throws SandeshaException {
if (!isNamespaceSupported(namespaceValue))
@@ -69,6 +71,15 @@
this.faultCode = faultCodePart.getText();
+ OMElement detailPart = sequenceFault
+ .getFirstChildWithName(new QName(namespaceValue,
+ Sandesha2Constants.WSRM_COMMON.DETAIL));
+
+ this.faultCode = faultCodePart.getText();
+
+ if (detailPart != null)
+ detail = detailPart.getText();
+
return sequenceFault;
}
@@ -89,10 +100,14 @@
OMNamespace rmNamespace =
factory.createOMNamespace(namespaceValue,Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
OMElement faultCodeElement =
factory.createOMElement(Sandesha2Constants.WSRM_COMMON.FAULT_CODE,rmNamespace);
+ OMElement detailElement =
factory.createOMElement(Sandesha2Constants.WSRM_COMMON.DETAIL,rmNamespace);
faultCodeElement.setText(faultCode);
sequenceFault.addChild(faultCodeElement);
+ detailElement.setText(detail);
+ sequenceFault.addChild(detailElement);
+
return sequenceFault;
}
@@ -104,6 +119,14 @@
return faultCode;
}
+ public void setDetail(String detail) {
+ this.detail = detail;
+ }
+
+ public String getDetail() {
+ return detail;
+ }
+
public boolean isNamespaceSupported (String namespaceName) {
if
(Sandesha2Constants.SPEC_2005_02.NS_URI.equals(namespaceName))
return true;
@@ -113,4 +136,5 @@
return false;
}
+
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java?view=diff&rev=501876&r1=501875&r2=501876
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/SequenceFault.java
Wed Jan 31 08:14:31 2007
@@ -23,7 +23,7 @@
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPHeader;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
@@ -54,7 +54,7 @@
public Object fromOMElement(OMElement body) throws
OMException,SandeshaException {
- if (body == null || !(body instanceof SOAPBody))
+ if (body == null || !(body instanceof SOAPHeader))
throw new OMException(
SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.seqFaultCannotBeExtractedToNonHeader));
@@ -80,7 +80,7 @@
public OMElement toOMElement(OMElement body) throws OMException {
- if (body == null || !(body instanceof SOAPBody))
+ if (body == null || !(body instanceof SOAPHeader))
throw new OMException(SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.seqFaultCannotBeExtractedToNonHeader));
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]