Web Service 消息的 SDO 数据图映射
Web Service 消息的结构由 Web Service 消息的服务数据对象 (SDO) V1 数据图描述。
Web Service 消息的整体布局
Web Service 消息由一个格式字符串和三个元数据字段(operationName、messageName 和 messageType)描述。消息的有效内容分为另外三个部分:头、附件和主体。
Info 节点是所有 Web Service 消息的 SDO 数据图的最高级别。下表描述 Info 节点属性及关联类型。
属性名 | 属性类型 | 属性描述 |
---|---|---|
operationName | java.lang.String | 标识与消息相关联的 WSDL 操作。如果数据访问服务不能标识该消息,那么此字段为空。请参阅标识 Web Service 消息。 |
messageName | java.lang.String | 标识与消息相关联的 WSDL 消息。如果数据访问服务不能标识该消息,那么此字段为空。请参阅标识 Web Service 消息。 |
messageType | java.lang.String | 标识消息实例的 Web Service 类型。此字段可具有以下值:input、output、fault 和 ambiguous。如果数据访问服务不能标识该消息,那么此字段为空。请参阅标识 Web Service 消息。 |
头 | 数据对象的 java.util.List。 | 包含头条目数据对象的列表。消息中的每个 SOAP 头都对应于该列表中的一条头条目。请参阅消息头布局。 |
连接 | 数据对象的 java.util.List。 | 包含附件条目数据对象的列表。对于带有附件的 SOAP 消息,消息中的每个 MIME 部分(除包含 SOAP 包络的 MIME 部分)都被映射至该列表中的一个条目。请参阅消息附件布局。 |
body | commonj.sdo.DataObject | 嵌套的数据对象,它表示 SOAP 包络的主体。请参阅消息体布局。 |
标识 Web Service 消息
消息处理取决于这些消息是否具有 WSDL 定义。在不使用 WSDL 的情况下进行处理所需的最小信息量是“SOAP:”。在使用 WSDL 的情况下进行处理所需的最小信息量是“SOAP:location,namespace,service,port”。如果该格式字符串不包括所有这 5 个字段,那么 SOAP 数据访问服务将尝试在不使用 WSDL 的情况下处理该消息。
- 在不使用 WSDL 定义的情况下处理消息:如果格式字符串未包含完整的 WSDL 信息,那么 SOAP 数据访问服务将处理该消息,而不会尝试根据 WSDL 中的定义对该消息进行匹配。结果,operationName 和 messageName 被设置为 null,仅当处理故障消息时才设置 messageType。
- 在使用 WSDL 定义的情况下处理消息:如果格式字符串包含
<WSDL location>、<Service namespace>、<Service name> 和
<Port name>,那么 SOAP 和 Bean 数据访问服务将使用该服务的 WSDL 定义来处理该消息。
注: 在下列任意一种情况下,向 SOAP 消息处理提供所有的必需 WSDL 信息后,该处理将失败:
- SOAP 数据访问服务找不到 WSDL
- WSDL 未能确认该消息
当 SOAP 数据访问服务处理 SOAP 请求或应答消息时,它会尝试使消息与 WSDL 中的消息定义匹配。通常存在一个匹配定义并且会适当地填充 operationName、messageName 和 messageType。如果存在多个匹配定义,那么数据访问服务会选择一个消息定义并填充 operationName 和 messageName,并将 messageType 设置为 ambiguous。
在处理故障消息时,标识稍微有所不同。在所有情况下,messageType 都将被设置为 fault。如果消息与 WSDL 中的唯一故障定义匹配,那么也将设置 operationName 属性和 messageName 属性。
消息头布局
头的列表可有两种类型的条目:头条目或绑定头条目,这取决于该头是否基于消息的部分。
- 头是 WSDL 中建模的消息的部分
- 头是未在 WSDL 中建模的消息的部分,此部分基于该消息的某个部分
当用于消息的 SOAP 绑定已将主体部分绑定至 MIME 附件时使用绑定头条目类型。(当您使用 <MIME:content> 元素来将消息部分绑定至附件时会出现该情况。)为了获得一致的调解编程,所有主体数据都存储在图中的主体节点中。与正常附件条目不同,绑定附件条目将放到附件列表中。绑定附件条目包含用于附件的 MIME 元数据,还包含消息部分的名称,该消息部分包含来自该附件的数据。这样就使用来处理附件的调解可在数据图的主体部分中找到数据。有关该附件的模型,请参阅绑定的头条目。
头条目
属性名 | 属性类型 | 属性描述 |
---|---|---|
mustUnderstand | java.lang.Boolean | 带有来自 SOAP 头上的 mustUnderstand 属性的值,如果使用该属性。 |
actor | java.lang.String | 带有来自 SOAP 头上的 actor 属性的值,如果使用该属性。 |
any | commonj.sdo.Sequence | SOAP 头的内容的容器 |
绑定的头条目
属性名 | 属性类型 | 属性描述 |
---|---|---|
mustUnderstand | java.lang.Boolean | 带有来自 SOAP 头上的 mustUnderstand 属性的值,如果使用该属性。 |
actor | java.lang.String | 带有来自 SOAP 头上的 actor 属性的值,如果使用该属性。 |
messagePart | java.lang.String | 包含消息部分的名称,该名称带有来自该消息头的数据。 |
消息附件布局
消息附件的处理方式与头的处理方式类似,并且它们的实例填充 Info 节点中的附件列表。
有两种类型的附件条目可用来处理 MIME 附件:附件条目和绑定附件条目。
附件条目用于通用附件:请参阅附件条目。
绑定附件条目包括将主体部分绑定至 MIME 附件的 <MIME:content> 元素。如果您正在对调解进行编程,那么需要了解在图中找到数据的方法。为了获得一致的调解编程效果,附件数据放在消息体中,根据包括其他 MIME 元数据的头条目中的部分名来引用。有关该附件的模型,请参阅绑定的附件条目。
附件条目
属性名 | 属性类型 | 属性描述 |
---|---|---|
contentType | java.lang.String | 带有来自由附件条目表示的 mime 部分的 contentType。 |
contentTransferEncoding | java.lang.String | 带有来自由附件条目表示的 mime 部分的 contentTransferEncoding。 |
contentId | java.lang.String | 带有来自由附件条目表示的 mime 部分的 contentId。 |
data | byte[] | 带有作为字节数组的 MIME 元素的内容。 |
绑定的附件条目
属性名 | 属性类型 | 属性描述 |
---|---|---|
contentType | java.lang.String | 带有来自由附件条目表示的 mime 部分的 contentType。 |
contentTransferEncoding | java.lang.String | 带有来自由附件条目表示的 mime 部分的 contentTransferEncoding。 |
contentId | java.lang.String | 带有来自由附件条目表示的 mime 部分的 contentId。 |
messagePart | java.lang.String | 包含消息部分的名称,该名称带有来自该附件的数据。 |
消息体布局
主体中数据对象的布局由服务 WSDL 定义。数据对象的类型源自 WSDL 中的消息定义。对于消息定义中的每部分,数据对象都将有一个属性。每个消息部分的布局都符合将 XML 模式映射至 SDO 的约定。请参阅 Web Service 代码示例,以了解更多信息。
Web Service 故障消息
对于故障消息,图的 Info 节点中的 messageType 字段设置为“fault”,并且消息体将具有下列属性:
属性名 | 属性类型 | 属性描述 |
---|---|---|
faultcode | javax.xml.namespace.QName | 包含 SOAP 故障元素中的 faultcode 值 |
faultstring | java.lang.String | 包含 SOAP 故障元素中的 faultstring 值 |
faultactor | java.lang.String | 包含 SOAP 故障元素中的 faultactor 值 |
detail | commonj.sdo.DataObject | 在 SOAP 故障元素的 detail 子代中包含该内容 |