You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2010/04/09 16:16:42 UTC

svn commit: r932430 - in /qpid/trunk/qpid/java/broker/src: main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java main/java/org/apache/qpid/qmf/QMFService.java xsl/qmf.xsl

Author: robbie
Date: Fri Apr  9 14:16:42 2010
New Revision: 932430

URL: http://svn.apache.org/viewvc?rev=932430&view=rev
Log:
QPID-2379: add ability to respond to method requests with non-zero status codes, use to signal unimplemented methods.

Modified:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java
    qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java?rev=932430&r1=932429&r2=932430&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java Fri Apr  9 14:16:42 2010
@@ -20,24 +20,57 @@
  */
 package org.apache.qpid.qmf;
 
-import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.message.ServerMessage;
 import org.apache.qpid.transport.codec.BBEncoder;
 
 public class QMFMethodResponseCommand extends QMFCommand
 {
-    public QMFMethodResponseCommand(final QMFMethodRequestCommand cmd)
+    private CompletionCode _status = null;
+    private String _msg = null;
+
+    public QMFMethodResponseCommand(final QMFMethodRequestCommand cmd, 
+                                    CompletionCode status,
+                                    String msg)
     {
         super( new QMFCommandHeader(cmd.getHeader().getVersion(),
                                     cmd.getHeader().getSeq(),
                                     QMFOperation.METHOD_RESPONSE));
+        
+        if(status == null)
+        {
+            _status = CompletionCode.OK;
+        }
+        else
+        {
+            _status = status;
+        }
+        
+        _msg = msg;
+    }
+    
+    public CompletionCode getStatus()
+    {
+       return _status;
+    }
+
+    public String getStatusText()
+    {
+       return _msg;
     }
 
     @Override
     public void encode(final BBEncoder encoder)
     {
         super.encode(encoder);
-        encoder.writeUint32(0);
-        encoder.writeStr16("OK");
+
+        encoder.writeUint32(_status.ordinal());
+
+        if(_msg == null)
+        {
+            encoder.writeStr16(_status.toString());
+        }
+        else
+        {
+            encoder.writeStr16(_msg);
+        }
     }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java?rev=932430&r1=932429&r2=932430&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java Fri Apr  9 14:16:42 2010
@@ -679,8 +679,8 @@ public class QMFService implements Confi
                                                                                                  final String destQueue,
                                                                                                  final Long qty)
         {
-            // todo
-            throw new UnsupportedOperationException();
+            // TODO
+            return factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public UUID getId()
@@ -1056,7 +1056,7 @@ public class QMFService implements Confi
                                                                             final String exchange)
         {
             //TODO
-            return factory.createResponseCommand();
+            return factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
 
@@ -1319,20 +1319,20 @@ public class QMFService implements Confi
 
         public BrokerSchema.SessionClass.SolicitAckMethodResponseCommand solicitAck(final BrokerSchema.SessionClass.SolicitAckMethodResponseCommandFactory factory)
         {
-            //todo
-            throw new UnsupportedOperationException();
+            //TODO
+            return factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public BrokerSchema.SessionClass.DetachMethodResponseCommand detach(final BrokerSchema.SessionClass.DetachMethodResponseCommandFactory factory)
         {
-            //todo
-            throw new UnsupportedOperationException();
+            //TODO
+            return factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public BrokerSchema.SessionClass.ResetLifespanMethodResponseCommand resetLifespan(final BrokerSchema.SessionClass.ResetLifespanMethodResponseCommandFactory factory)
         {
-            //todo
-            throw new UnsupportedOperationException();
+            //TODO
+            return factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public BrokerSchema.SessionClass.CloseMethodResponseCommand close(final BrokerSchema.SessionClass.CloseMethodResponseCommandFactory factory)
@@ -1343,8 +1343,7 @@ public class QMFService implements Confi
             }
             catch (AMQException e)
             {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
+                return factory.createResponseCommand(CompletionCode.EXCEPTION, e.getMessage());
             }
 
             return factory.createResponseCommand();

Modified: qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl?rev=932430&r1=932429&r2=932430&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl (original)
+++ qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl Fri Apr  9 14:16:42 2010
@@ -540,6 +540,16 @@ public class <xsl:value-of select="$Clas
                 _requestCmd = cmd;
             }
             
+            public <xsl:value-of select="$ClassName"/>ResponseCommand createResponseCommand(CompletionCode status)
+            {
+                return new <xsl:value-of select="$ClassName"/>ResponseCommand(_requestCmd, status, null);
+            }
+            
+            public <xsl:value-of select="$ClassName"/>ResponseCommand createResponseCommand(CompletionCode status, String msg)
+            {
+                return new <xsl:value-of select="$ClassName"/>ResponseCommand(_requestCmd, status, msg);
+            }
+            
             public <xsl:value-of select="$ClassName"/>ResponseCommand createResponseCommand( <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="methodArgList"><xsl:with-param name="includeType">yes</xsl:with-param><xsl:with-param name="direction">O</xsl:with-param></xsl:apply-templates> )
             {
                 return new <xsl:value-of select="$ClassName"/>ResponseCommand(_requestCmd<xsl:if test="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]">, <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="methodArgList"><xsl:with-param name="direction">O</xsl:with-param></xsl:apply-templates></xsl:if>);
@@ -551,17 +561,29 @@ public class <xsl:value-of select="$Clas
             <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="methodInputArgDecl"/>
             private <xsl:value-of select="$ClassName"/>ResponseCommand(QMFMethodRequestCommand cmd<xsl:if test="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]">, <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="methodArgList"><xsl:with-param name="includeType">yes</xsl:with-param><xsl:with-param name="direction">O</xsl:with-param></xsl:apply-templates></xsl:if>)
             {
-                super(cmd);
+                super(cmd, CompletionCode.OK, "OK");
                 
                 <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="methodInputArgAssign"/>
             }
             
+            private <xsl:value-of select="$ClassName"/>ResponseCommand(QMFMethodRequestCommand cmd, CompletionCode status, String msg)
+            {
+                super(cmd, status, msg);
+                
+                <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="methodInputArgAssignNull"/>
+            }
+            
             @Override
             public void encode(final BBEncoder encoder)
             {
                 super.encode(encoder);
                 
-                <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="encodeArg"/>
+                <xsl:if test="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]">
+                if(getStatus().equals(CompletionCode.OK))
+                {
+                    <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]" mode="encodeArg"/>
+                }
+                </xsl:if>
             }
         }
         
@@ -600,6 +622,10 @@ public class <xsl:value-of select="$Clas
     <xsl:template match="node()[name()='arg']" mode="methodInputArgAssign">
                 _<xsl:value-of select="@name"/> = <xsl:value-of select="@name"/>;
     </xsl:template>
+    <xsl:template match="node()[name()='arg']" mode="methodInputArgAssignNull">
+                _<xsl:value-of select="@name"/> = null;
+    </xsl:template>
+    
     
     <xsl:template match="node()[name()='class']" mode="classList">_<xsl:call-template name="initLower"><xsl:with-param name="input" select="@name"/></xsl:call-template>Class<xsl:if test="following-sibling::node()[name()='class']">, </xsl:if></xsl:template>
     <xsl:template match="node()[name()='event']" mode="eventList">_<xsl:call-template name="initLower"><xsl:with-param name="input" select="@name"/></xsl:call-template>EventClass<xsl:if test="following-sibling::node()[name()='event']">, </xsl:if></xsl:template>



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org