Author: gatfora
Date: Thu Feb  1 07:44:28 2007
New Revision: 502245

URL: http://svn.apache.org/viewvc?view=rev&rev=502245
Log:
Add support for generating wsrm:UnknownSequence faults

Added:
    webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/FaultTestUtils.java
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
Modified:
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java?view=diff&rev=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
 Thu Feb  1 07:44:28 2007
@@ -127,7 +127,11 @@
                }
 
                // Check that the sequence requested exists
-               FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, 
storageManager);
+               if (FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, 
storageManager)) {
+                       if (log.isDebugEnabled())
+                               log.debug("Exit: 
AckRequestedProcessor::processAckRequestedHeader, Unknown sequence ");
+                       return false;
+               }
 
                // Setting the ack depending on AcksTo.
                EndpointReference acksTo = new 
EndpointReference(rmdBean.getAcksToEPR());

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?view=diff&rev=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
 Thu Feb  1 07:44:28 2007
@@ -137,7 +137,11 @@
                Iterator ackRangeIterator = 
sequenceAck.getAcknowledgementRanges().iterator();
                Iterator nackIterator = sequenceAck.getNackList().iterator();
 
-               FaultManager.checkForUnknownSequence(rmMsgCtx, outSequenceId, 
storageManager);
+               if (FaultManager.checkForUnknownSequence(rmMsgCtx, 
outSequenceId, storageManager)) {
+                       if (log.isDebugEnabled())
+                               log.debug("Exit: 
AcknowledgementProcessor::processAckHeader, Unknown sequence ");
+                       return;
+               }
                FaultManager.checkForInvalidAcknowledgement(rmMsgCtx, 
storageManager);
                
                SenderBean input = new SenderBean();

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java?view=diff&rev=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
 Thu Feb  1 07:44:28 2007
@@ -84,7 +84,11 @@
                        secManager.checkProofOfPossession(token, body, msgCtx);
                }
 
-               FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, 
storageManager);
+               if (FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, 
storageManager)) {
+                       if (log.isDebugEnabled())
+                               log.debug("Exit: 
CloseSequenceProcessor::processInMessage, Unknown sequence " + sequenceId);
+                       return false;
+               }
                
                rmdBean.setClosed(true);
                storageManager.getRMDBeanMgr().update(rmdBean);

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
 Thu Feb  1 07:44:28 2007
@@ -128,16 +128,15 @@
                        throw new SandeshaException(message);
                }
 
-               FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, 
storageManager);
+               if (FaultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, 
storageManager)) {
+                       if (log.isDebugEnabled())
+                               log.debug("Exit: 
SequenceProcessor::processReliableMessage, Unknown sequence");
+                       return InvocationResponse.ABORT;
+               }
 
                // setting mustUnderstand to false.
                sequence.setMustUnderstand(false);
                rmMsgCtx.addSOAPEnvelope();
-
-               if (bean == null) {
-                       throw new 
SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotFindSequence,
-                                       sequenceId));
-               }
 
                // throwing a fault if the sequence is closed.
                FaultManager.checkForSequenceClosed(rmMsgCtx, sequenceId, bean);

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java?view=diff&rev=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
 Thu Feb  1 07:44:28 2007
@@ -99,7 +99,11 @@
                        secManager.checkProofOfPossession(token, body, 
terminateSeqRMMsg.getMessageContext());
                }
 
-               FaultManager.checkForUnknownSequence(terminateSeqRMMsg, 
sequenceId, storageManager);
+               if (FaultManager.checkForUnknownSequence(terminateSeqRMMsg, 
sequenceId, storageManager)) {
+                       if (log.isDebugEnabled())
+                               log.debug("Exit: 
TerminateSeqMsgProcessor::processInMessage, unknown sequence");
+                       return false;
+               }
 
                // add the terminate sequence response if required.
                RMMsgContext terminateSequenceResponse = null;

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=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java 
Thu Feb  1 07:44:28 2007
@@ -131,10 +131,10 @@
         * predifined limit ( genenrates a Message Number Rollover fault)
         * 
         * @param msgCtx
-        * @return
+        * @return true if no exception has been thrown and the sequence 
doesn't exist 
         * @throws SandeshaException
         */
-       public static void checkForUnknownSequence(RMMsgContext 
rmMessageContext, String sequenceID,
+       public static boolean checkForUnknownSequence(RMMsgContext 
rmMessageContext, String sequenceID,
                        StorageManager storageManager) throws AxisFault {
                if (log.isDebugEnabled())
                        log.debug("Enter: 
FaultManager::checkForUnknownSequence, " + sequenceID);
@@ -176,14 +176,18 @@
                        data.setDetail(identifierElement);
 
                        
data.setReason(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noSequenceEstablished,
 sequenceID));
+                       
+                       
data.setType(Sandesha2Constants.SOAPFaults.FaultType.UNKNOWN_SEQUENCE);
 
                        if (log.isDebugEnabled())
                                log.debug("Exit: 
FaultManager::checkForUnknownSequence, Sequence unknown");
-                       getFault(rmMessageContext, data);
+                       getOrSendFault(rmMessageContext, data);
+                       return true;
                }
 
                if (log.isDebugEnabled())
                        log.debug("Exit: 
FaultManager::checkForUnknownSequence");
+               return false;
        }
 
        /**
@@ -384,6 +388,10 @@
                        
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)) {
+                       
+                       
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);
                        // Need to send this message as the Axis Layer doesn't 
set the "SequenceFault" header
                        MessageContext faultMessageContext = 
                                
MessageContextBuilder.createFaultMessageContext(referenceRMMsgContext.getMessageContext(),
 null);
@@ -397,10 +405,6 @@
                        // 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 {

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=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
 Thu Feb  1 07:44:28 2007
@@ -113,7 +113,10 @@
 
                FaultCode faultCode = new FaultCode(rmNamespaceValue);
                faultCode.setFaultCode(faultData.getSubcode());
-               faultCode.setDetail(faultData.getDetailString());
+               if (faultData.getDetailString() != null)
+                       faultCode.setDetail(faultData.getDetailString());
+               else
+                       faultCode.setDetailOMElement(faultData.getDetail());
                sequenceFault.setFaultCode(faultCode);
                
                
sequenceFault.toOMElement(faultMessageContext.getEnvelope().getHeader());

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=502245&r1=502244&r2=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/FaultCode.java 
Thu Feb  1 07:44:28 2007
@@ -40,6 +40,8 @@
 
        private String detail;
        
+       private OMElement detailOMElement;
+       
        public FaultCode(String namespaceValue) throws SandeshaException {
                if (!isNamespaceSupported(namespaceValue))
                        throw new SandeshaException 
(SandeshaMessageHelper.getMessage(
@@ -105,7 +107,12 @@
                faultCodeElement.setText(faultCode);
                sequenceFault.addChild(faultCodeElement);
 
-               detailElement.setText(detail);
+               if (detailOMElement != null)
+                       detailElement.addChild(detailOMElement);
+               
+               if (detail != null)
+                       detailElement.setText(detail);
+               
                sequenceFault.addChild(detailElement);
                
                return sequenceFault;
@@ -126,7 +133,15 @@
        public String getDetail() {
                return detail;
        }
-       
+
+       public OMElement getDetailOMElement() {
+       return detailOMElement;
+    }
+
+       public void setDetailOMElement(OMElement detailOMElement) {
+       this.detailOMElement = detailOMElement;
+    }
+
        public boolean isNamespaceSupported (String namespaceName) {
                if 
(Sandesha2Constants.SPEC_2005_02.NS_URI.equals(namespaceName))
                        return true;

Added: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java?view=auto&rev=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java
 (added)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/CreateSequenceRefusedFaultTest.java
 Thu Feb  1 07:44:28 2007
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sandesha2.faulttests;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.util.RMMsgCreator;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.AcksTo;
+import org.apache.sandesha2.wsrm.CreateSequence;
+
+
+public class CreateSequenceRefusedFaultTest extends SandeshaTestCase {
+
+       private static final String server_repoPath = "target" + File.separator
+           + "repos" + File.separator + "server";
+
+       private static final String server_axis2_xml = "target" + File.separator
+           + "repos" + File.separator + "server" + File.separator
+           + "server_axis2.xml";
+       
+       private ConfigurationContext serverConfigContext;
+       
+       public CreateSequenceRefusedFaultTest() {
+               super("CreateSequenceProcessorTest");
+       }
+
+       public void setUp() throws Exception {
+               super.setUp();
+               serverConfigContext = startServer(server_repoPath, 
server_axis2_xml);
+       }
+
+       /**
+        * Sends a Create Sequence message to an RM Destination that will be 
refused.
+        * 
+        * @throws Exception
+        */
+       public void testInvalidAcksToSOAPFault() throws Exception {
+
+    // Open a connection to the endpoint
+               HttpURLConnection connection = 
+                       FaultTestUtils.getHttpURLConnection("http://127.0.0.1:"; 
+ serverPort + "/axis2/services/RMSampleService",
+                                       
"http://docs.oasis-open.org/ws-rx/wsrm/200608/CreateSequence";);
+
+               OutputStream tmpOut2 = connection.getOutputStream();
+
+               byte ar[] = getMessageAsBytes();
+               
+               // Send the message to the socket.
+               tmpOut2.write(ar);
+               tmpOut2.flush();
+
+               // Get the response message from the connection
+               String message = 
FaultTestUtils.retrieveResponseMessage(connection);
+    
+    // Check that the fault message isn't null
+    assertNotNull(message);
+    
+    // Check that the response contains the wsrm:CreateSequenceRefused tag    
+    assertTrue(message.indexOf("wsrm:CreateSequenceRefused") > -1);
+    
+    // Disconnect at the end of the test
+    connection.disconnect();
+       }
+       
+       /**
+        * Get a Create Sequence message as bytes
+        * 
+        * This generates a CreateSequenceMessage that has a "bad" AcksTo value 
which 
+        * will generate a Fault from the service.
+        * @return
+        */
+       private byte[] getMessageAsBytes() throws Exception
+       {
+               String to = "http://127.0.0.1:"; + serverPort + 
"/axis2/services/RMSampleService";
+
+               SOAPFactory factory = new SOAP11Factory();
+               SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+               
+               // Create a "new" application message
+               MessageContext messageContext = new MessageContext();
+               messageContext.setConfigurationContext(serverConfigContext);
+               
messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
                
+               messageContext.setEnvelope(dummyEnvelope);
+               
+               RMMsgContext applicationRMMsg = new 
RMMsgContext(messageContext);
+               
+               // Create an RMSBean so the create sequence message can be 
created
+               RMSBean rmsBean = new RMSBean();
+               rmsBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+               rmsBean.setToEPR(to);
+               
+               // Setup the acksTo 
+               EndpointReference acksTo = new 
EndpointReference(AddressingConstants.Final.WSA_NONE_URI);
+                               
+               // Create a Create Sequence message
+               // generating a new create sequeuce message.
+               RMMsgContext createSeqRMMessage = 
RMMsgCreator.createCreateSeqMsg(rmsBean, applicationRMMsg, acksTo);
+               messageContext = createSeqRMMessage.getMessageContext();
+               
messageContext.setWSAAction(SpecSpecificConstants.getCreateSequenceAction(Sandesha2Constants.SPEC_VERSIONS.v1_1));
+
+               CreateSequence createSeqResPart = (CreateSequence) 
createSeqRMMessage
+               .getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
+
+               createSeqResPart.setAcksTo(
+                               new AcksTo(new 
EndpointReference(AddressingConstants.Final.WSA_NONE_URI), 
+                                                                        
SpecSpecificConstants.getRMNamespaceValue(rmsBean.getRMVersion()),
+                                                      
AddressingConstants.Final.WSA_NAMESPACE));
+               
+               // Update the SOAP Envelope of the message
+               createSeqRMMessage.addSOAPEnvelope();
+
+               SOAPEnvelope envelope = 
createSeqRMMessage.getMessageContext().getEnvelope();
+               
+               ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream();
+               
+               envelope.serialize(outputStream);
+               
+               return outputStream.toByteArray();
+       }
+}
+

Added: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/FaultTestUtils.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/FaultTestUtils.java?view=auto&rev=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/FaultTestUtils.java
 (added)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/FaultTestUtils.java
 Thu Feb  1 07:44:28 2007
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sandesha2.faulttests;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class FaultTestUtils {
+
+       /** 
+        * Sets up a connection to an HTTP endpoint
+        * @return
+        */
+       public static HttpURLConnection getHttpURLConnection(String uri, String 
soapAction) throws Exception {
+    // Open a connection to the endpoint
+               URL endPointURL = new URL(uri);
+               
+               HttpURLConnection connection = (HttpURLConnection) 
endPointURL.openConnection();
+               connection.setDoOutput(true);
+               connection.setDoInput(true);
+               connection.setRequestMethod("POST");
+               connection.addRequestProperty("SOAPAction", soapAction);
+               connection.setRequestProperty("Content-Type", "text/xml"); 
+                
+               connection.connect();
+
+               return connection;
+       }
+       
+       /**
+        * Reads a response from the HttpURLConnection instance
+        * @param connection
+        * @return
+        * @throws IOException 
+        */
+       public static final String retrieveResponseMessage(HttpURLConnection 
connection) throws IOException {
+               
+               InputStream tmpIn2 = connection.getInputStream();
+
+               // Read the sync response
+               boolean done = false;
+
+    byte[]      buffer = new byte[4096];
+    String      message = null;
+    int         saved = 0 ;
+    int         len ;
+    
+    a:
+               for (;;) {
+                       if (done) {
+                               break;
+                       }
+
+                       len = buffer.length;
+                       // Used to be 1, but if we block it doesn't matter
+                       // however 1 will break with some servers, including 
apache
+                       if (len == 0) {
+                               len = buffer.length;
+                       }
+                       if (saved + len > buffer.length) {
+                               len = buffer.length - saved;
+                       }
+                       int len1 = 0;
+
+                       while (len1 == 0) {
+                               try {
+                                       len1 = tmpIn2.read(buffer, saved, len);
+                               } catch (Exception ex) {
+                                       ex.printStackTrace();
+                                       if (done && saved == 0) {
+                                               break a;
+                                       }
+                                       len1 = -1;
+                                       break;
+                               }
+                       }
+                       len = len1;
+
+                       if (len == -1 && saved == 0) {
+                               break;
+                       }
+                       if (len == -1) {
+                               done = true;
+                       }
+
+                       // No matter how we may (or may not) format it, send it
+                       // on unformatted - we don't want to mess with how its
+                       // sent to the other side, just how its displayed
+
+                       message = new String(buffer, 0, len);
+
+                       System.out.println(message);
+               }
+
+    return message;
+       }
+}

Added: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java?view=auto&rev=502245
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
 (added)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
 Thu Feb  1 07:44:28 2007
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sandesha2.faulttests;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.MessageNumber;
+import org.apache.sandesha2.wsrm.Sequence;
+
+
+public class UnknownSequenceFaultTest extends SandeshaTestCase {
+
+       private static final String server_repoPath = "target" + File.separator
+           + "repos" + File.separator + "server";
+
+       private static final String server_axis2_xml = "target" + File.separator
+           + "repos" + File.separator + "server" + File.separator
+           + "server_axis2.xml";
+       
+       private ConfigurationContext serverConfigContext;
+       
+       public UnknownSequenceFaultTest() {
+               super("CreateSequenceProcessorTest");
+       }
+
+       public void setUp() throws Exception {
+               super.setUp();
+               serverConfigContext = startServer(server_repoPath, 
server_axis2_xml);
+       }
+
+       /**
+        * Sends a Create Sequence message to an RM Destination that will be 
refused.
+        * 
+        * @throws Exception
+        */
+       /**
+        * Sends an Application message to an RM Destination that will be 
refused and should be
+        * rejected with an unknown sequence fault
+        * 
+        * @throws Exception
+        */
+       public void testUnknownSequenceAppMsgSOAPFault() throws Exception {
+    // Open a connection to the endpoint
+               HttpURLConnection connection = 
+                       FaultTestUtils.getHttpURLConnection("http://127.0.0.1:"; 
+ serverPort + "/axis2/services/RMSampleService",
+                                       pingAction);
+
+               OutputStream tmpOut2 = connection.getOutputStream();
+               String seqID = SandeshaUtil.getUUID();
+               byte ar[] = getAppMessageAsBytes(seqID);
+               
+               // Send the message to the socket.
+               tmpOut2.write(ar);
+               tmpOut2.flush();
+
+               // Get the response message from the connection
+               String message = 
FaultTestUtils.retrieveResponseMessage(connection);
+    
+    // Check that the fault message isn't null
+    assertNotNull(message);
+    
+    // Check that the response contains the wsrm:CreateSequenceRefused tag    
+    assertTrue(message.indexOf("wsrm:UnknownSequence") > -1);
+    
+    // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the 
sequence ID specified
+    String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 
17, message.indexOf("</wsrm:Identifier>"));
+    assertEquals(seqID, faultID);
+    
+    // Disconnect at the end of the test
+    connection.disconnect();
+       }
+       
+       /**
+        * Get a Create Sequence message as bytes
+        * 
+        * This generates an "application" message that has a "sequecnce id" 
that the RMD
+        * will not recognise and should generate a fault.
+        * 
+        * @return
+        */
+       private byte[] getAppMessageAsBytes(String uuid) throws Exception
+       {
+               SOAPFactory factory = new SOAP11Factory();
+               SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+               
+               // Create a "new" application message
+               MessageContext messageContext = new MessageContext();
+               messageContext.setConfigurationContext(serverConfigContext);
+               
messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
                
+               messageContext.setEnvelope(dummyEnvelope);
+               
+               RMMsgContext applicationRMMsg = new 
RMMsgContext(messageContext);
+               
+               // Generate the Sequence field.
+               // -------------------------------
+               String rmNamespaceValue = 
SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+               Sequence sequence = new Sequence(rmNamespaceValue);
+               MessageNumber msgNumber = new MessageNumber(rmNamespaceValue);
+               msgNumber.setMessageNumber(1);
+               sequence.setMessageNumber(msgNumber);
+               Identifier id1 = new Identifier(rmNamespaceValue);
+               id1.setIndentifer(uuid);
+               sequence.setIdentifier(id1);
+               
applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE, 
sequence);
+               applicationRMMsg.addSOAPEnvelope();
+
+               // --------------------------------------------
+               // Finished generating Sequence part
+               
+               // Create an RMSBean so the create sequence message can be 
created
+               messageContext.setWSAAction(pingAction);
+
+               // Set the AxisOperation to be InOut
+               AxisOperation operation = 
messageContext.getAxisService().getOperation(new QName("RMInOutOperation"));
+               operation.setMessageReceiver(new RMMessageReceiver());
+               messageContext.setAxisOperation(operation);
+
+               ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream();
+               
+               // Serialize the application message
+               
applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+               
+               return outputStream.toByteArray();
+       }
+}
+



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

Reply via email to