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-subscr...@qpid.apache.org