属性名称限制

对属性命名时,必须遵循特定规则。

以下限制适用于属性名称:

  1. 属性不能以下列字符串开头:
    • "JMS"-保留供 IBM® MQ classes for JMS使用。
    • "usr.JMS"-无效。
    唯一的例外是提供 JMS 属性同义词的以下属性:
    属性 同义词
    JMSCorrelationID Root .MQMD.CorrelId 或 jms.Cid
    JMSDeliveryMode Root .MQMD.Persistence 或 jms.Dlv
    JMSDestination jms.Dst
    JMSExpiration Root .MQMD.Expiry 或 jms.Exp
    JMSMessageID Root .MQMD.MsgId
    JMSPriority Root .MQMD.Priority 或 jms.Pri
    JMSRedelivered Root .MQMD.BackoutCount
    JMSReplyTo(以 URI 编码的字符串) Root.MQMD.ReplyToQ、Root.MQMD.ReplyToQMgr 或 jms.Rto
    JMSTimestamp Root.MQMD.PutDate、Root.MQMD.PutTime 或 jms.Tms
    JMSType mcd.Type、mcd.Set 或 mcd.Fmt
    JMSXAppID Root.MQMD.PutApplName
    JMSXDeliveryCount Root .MQMD.BackoutCount
    JMSXGroupID Root.MQMD.GroupId 或 jms.Gid
    JMSXGroupSeq Root.MQMD.MsgSeqNumber 或 jms.Seq
    JMSXUserID Root.MQMD.UserIdentifier
    这些同义词允许 MQI 应用程序以类似于 IBM MQ classes for JMS 客户机应用程序的方式访问 JMS 属性。 至于这些属性,只有 JMSCorrelationID、JMSReplyTo、JMSType、JMSXGroupID 以及 JMSXGroupSeq 能够使用 MQI 设置。

    请注意, IBM MQ classes for JMS 中提供的 JMS_IBM_ * 属性不可使用 MQI。 MQI 应用程序可以通过其他方式访问 JMS_IBM_* 属性引用的字段。

  2. 不能调用的属性(大小写任意混合)包括“NULL”、“TRUE”、“FALSE”、“NOT”、“AND”、“OR”、“BETWEEN”、“LIKE”、“IN”、“IS”和“ESCAPE”。 这些是选择字符串中使用的 SQL 关键字的名称。
  3. 以“mq”(大小写任意混合)开头但不是“mq_usr”开头的属性名称只能包含一个“.” 字符 (U+002E)。 具有这些前缀的属性中 不允许使用多个“.”字符。
  4. 两个“.” 字符之间必须包含其他字符;层次结构中不能有空白点。 同样,属性名称不能以“.” 字符。
  5. 如果应用程序设置了属性“a.b”,然后设置了属性“a.b.c”,那么层次结构“b”中包含值还是包含另一个逻辑组并不明确。 这种层次结构为“混合内容”,不受支持。 不允许设置会产生混合内容的属性。
如下所示,这些限制由验证机制强行执行:
  • 如果在创建消息句柄时请求了验证,那么使用 MQSETMP-Set message property 调用设置属性时将验证属性名称。 如果尝试验证属性时因为属性名称规范中的错误而失败,完成代码为 MQCC_FAILED,原因码如下:
    • MQRC_PROPERTY_NAME_ERROR 代表原因 1-4。
    • MQRC_MIXED_CONTENT_NOT_ALLOWED 代表原因 5。
  • 直接指定为 MQRFH2 元素的属性名称不能保证会由 MQPUT 调用进行验证。