WebSphere® 的邮件类型和邮件映射 桥接 HTTP
IBM® MQ bridge for
HTTP 支持四个消息类: TEXT, BYTES, STREAM 和 MAP。 消息类映射到 JMS 消息类型和 HTTP 内容类型。
HTTP POST
到达目的地的消息类型取决于 x-msg-class标头的值或 HTTP 请求的Content-Type。 表1 显示了与每个 x-msg-class 对应的 HTTP 内容类型。 可以使用任一字段来设置消息类型和消息格式。 如果设置了这两个字段,并且设置不一致,那么将返回 Bad Request exception ( HTTP 400, MQHTTP20004)。
| x-msg-class | HTTP 内容类型 |
|---|---|
BYTES |
application/octet-stream
application/xml |
TEXT |
text/*
|
MAP |
application/x-www-form-urlencoded
application/xml (可选) |
STREAM |
application/xml (可选)
|
如果在 MQRFH2 头中设置了 JMS 消息类型,那么将根据 表 2对其进行映射。
| x-msg-class | JMS 消息类型 |
|---|---|
BYTES |
jms_bytes |
TEXT |
jms_text |
MAP |
jms_map |
STREAM |
jms_stream |
始终为消息类 MAP 或 STREAM设置 JMS 消息类型。 并非总是为消息类 BYTES 或 TEXT设置此值。 如果要为请求创建 MQRFH2 ,那么将始终设置 JMS 消息类型。 否则,如果未创建 MQRFH2 ,那么不会设置 JMS 消息类型。 如果在请求中使用 x-msg-usr 头设置了用户属性,那么将创建 MQRFH2 。
如果设置了 JMS 消息类型,那么消息格式将设置为 MQFMT_NONE,请参阅 表 4:
| x-msg-class | 消息中存在 MQRFH2 的消息格式 |
消息中不存在 no MQRFH2 的消息格式 |
|---|---|---|
BYTES |
MQFMT_NONE |
MQFMT_NONE |
TEXT |
MQFMT_NONE |
MQFMT_STRING |
MAP |
MQFMT_NONE |
不可用 |
STREAM |
MQFMT_NONE |
不可用 |
HTTP GET 或者 DELETE
所检索的信息类型或格式决定了 x-msg-class标头和 HTTP 响应的Content-Type 的值。 仅当在 x-msg-headers 请求中请求时,才会返回 x-msg-class 头。
表 4 描述了 x-msg-class 和 Content-Type之间的映射以及从队列或主题中检索的消息类型。
| 消息格式 | JMS 消息类型 | x-msg-class | 内容类型 |
|---|---|---|---|
除 MQFMT_STRING 以外的任何内容 |
None | BYTES |
application/octet-stream |
MQFMT_STRING |
None | TEXT |
text/plain |
MQFMT_NONE |
jms_bytes |
BYTES |
application/octet-stream |
MQFMT_NONE |
jms_text |
TEXT |
text/plain |
MQFMT_NONE |
jms_map |
MAP |
application/xml |
MQFMT_NONE |
jms_stream |
STREAM |
application/xml |
MAP 和 STREAM 消息类序列化
MAP 和 消息类以序列化的方式返回给客户端,就像消息被序列化到队列中一样,以 响应的形式返回。 STREAM HTTP
对于
MAP, XML 名称,类型和值三元组将编码为:<map>
<elt name="elementname1" dt="datatype1">value1</elt>
<elt name="elementname2" dt="datatype2">value2</elt>
...
</map>
STREAM 类似于 MAP,但它没有元素名称:<stream>
<elt dt="datatype1">value1</elt>
<elt dt="datatype2">value2</elt>
...
</stream>
注:
datatype 是为定义用户自定义属性而定义的数据类型之一,列在 usr: HTTP x-msg-usr实体头中。 对于字符串元素,将省略属性 dt=string
,因为缺省数据类型为 string。