缺省情况下,参数输入的 XML 编码为字符串,SOAP 服务格式的结果集输出中不包含明确描述结果集中列的数据类型的信息。对于所有格式,参数数据类型都为字符串。对于 DNET 格式,在响应的模式部分中所有列的数据类型均设置为字符串。CONCRETE 和 XML 格式不包含响应中的数据类型信息。可使用 DATATYPE 子句处理此缺省行为。
SQL Anywhere 允许使用 DATATYPE 子句设置数据类型。数据类型信息包含在参数输入和结果集输出或所有 SOAP 服务格式的响应的 XML 编码中。这样一来便不再需要客户端代码将参数显式转换为字符串,从而简化了从 SOAP 工具箱进行参数传递。例如,可将整数作为整型进行传递。XML 编码的数据类型允许 SOAP 工具箱分析数据并将其归到相应类型。
以独占方式使用字符串数据类型时,应用程序需要隐式地了解结果集内每列的数据类型。当 Web 服务器请求数据类型时,无需执行此操作。在定义 Web 服务时,可使用 DATATYPE 子句控制是否包括数据类型信息。
下面是征用结果集响应数据类型的 Web 服务定义的示例。
CREATE SERVICE "SASoapTest/EmployeeList" TYPE 'SOAP' AUTHORIZATION OFF SECURE OFF USER DBA DATATYPE OUT AS SELECT * FROM Employees; |
在此示例中,由于此服务没有参数,因此仅为结果集响应请求数据类型信息。
数据类型适用于所有定义为 'SOAP' 类型的 SQL Anywhere Web 服务。
只要将参数数据类型公开为其在 WSDL 中由 DISH 服务生成的真实数据类型就可支持输入参数的数据类型。
典型字符串参数定义(或非类型参数)应如下所示:
<s:element minOccurs="0" maxOccurs="1" name="a_varchar" nillable="true" type="s:string" /> |
字符串参数可以为空,即它可以发生,也可以不发生。
对于确定类型的参数(例如整数),必须有该参数且不能为空。以下是一个示例。
<s:element minOccurs="1" maxOccurs="1" name="an_int" nillable="false" type="s:int" /> |
所有 'SOAP' 类型的 SQL Anywhere Web 服务都可公开响应数据内的数据类型信息。将数据类型公开为行集列元素内的属性。
以下是一个来自 SOAP FORMAT 'CONCRETE' Web 服务的 SimpleDataSet 类型响应的示例。
<SOAP-ENV:Body> <tns:test_types_concrete_onResponse> <tns:test_types_concrete_onResult xsi:type='tns:SimpleDataset'> <tns:rowset> <tns:row> <tns:lvc xsi:type="xsd:string">Hello World</tns:lvc> <tns:i xsi:type="xsd:int">99</tns:i> <tns:ii xsi:type="xsd:long">99999999</tns:ii> <tns:f xsi:type="xsd:float">3.25</tns:f> <tns:d xsi:type="xsd:double">.555555555555555582</tns:d> <tns:bin xsi:type="xsd:base64Binary">AAAAZg==</tns:bin> <tns:date xsi:type="xsd:date">2006-05-29-04:00</tns:date> </tns:row> </tns:rowset> </tns:test_types_concrete_onResult> <tns:sqlcode>0</tns:sqlcode> </tns:test_types_concrete_onResponse> </SOAP-ENV:Body> |
以下是一个返回字符串格式 XML 数据的 SOAP FORMAT 'XML' Web 服务的响应示例。内部行集由编码的 XML 组成,为便于理解在此处以其解码形式显示。
<SOAP-ENV:Body> <tns:test_types_XML_onResponse> <tns:test_types_XML_onResult xsi:type='xsd:string'> <tns:rowset xmlns:tns="http://localhost/satest/dish" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:row> <tns:lvc xsi:type="xsd:string">Hello World</tns:lvc> <tns:i xsi:type="xsd:int">99</tns:i> <tns:ii xsi:type="xsd:long">99999999</tns:ii> <tns:f xsi:type="xsd:float">3.25</tns:f> <tns:d xsi:type="xsd:double">.555555555555555582</tns:d> <tns:bin xsi:type="xsd:base64Binary">AAAAZg==</tns:bin> <tns:date xsi:type="xsd:date">2006-05-29-04:00</tns:date> </tns:row> </tns:rowset> </tns:test_types_XML_onResult> <tns:sqlcode>0</tns:sqlcode> </tns:test_types_XML_onResponse> </SOAP-ENV:Body> |
请注意,除了数据类型信息外,这些元素的命名空间和 XML 模式还提供 XML 分析程序进行后处理所必需的全部信息。如果结果集中不存在数据类型信息(DATATYPE OFF 或 IN),则忽略 xsi:type 和 XML 模式命名空间声明。
SOAP FORMAT 'DNET' Web 服务返回的 SimpleDataSet 类型的示例如下:
<SOAP-ENV:Body> <tns:test_types_dnet_outResponse> <tns:test_types_dnet_outResult xsi:type='sqlresultstream:SqlRowSet'> <xsd:schema id='Schema2' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft.com:xml-msdata'> <xsd:element name='rowset' msdata:IsDataSet='true'> <xsd:complexType> <xsd:sequence> <xsd:element name='row' minOccurs='0' maxOccurs='unbounded'> <xsd:complexType> <xsd:sequence> <xsd:element name='lvc' minOccurs='0' type='xsd:string' /> <xsd:element name='ub' minOccurs='0' type='xsd:unsignedByte' /> <xsd:element name='s' minOccurs='0' type='xsd:short' /> <xsd:element name='us' minOccurs='0' type='xsd:unsignedShort' /> <xsd:element name='i' minOccurs='0' type='xsd:int' /> <xsd:element name='ui' minOccurs='0' type='xsd:unsignedInt' /> <xsd:element name='l' minOccurs='0' type='xsd:long' /> <xsd:element name='ul' minOccurs='0' type='xsd:unsignedLong' /> <xsd:element name='f' minOccurs='0' type='xsd:float' /> <xsd:element name='d' minOccurs='0' type='xsd:double' /> <xsd:element name='bin' minOccurs='0' type='xsd:base64Binary' /> <xsd:element name='bool' minOccurs='0' type='xsd:boolean' /> <xsd:element name='num' minOccurs='0' type='xsd:decimal' /> <xsd:element name='dc' minOccurs='0' type='xsd:decimal' /> <xsd:element name='date' minOccurs='0' type='xsd:date' /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> <diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'> <rowset> <row> <lvc>Hello World</lvc> <ub>128</ub> <s>-99</s> <us>33000</us> <i>-2147483640</i> <ui>4294967295</ui> <l>-9223372036854775807</l> <ul>18446744073709551615</ul> <f>3.25</f> <d>.555555555555555582</d> <bin>QUJD</bin> <bool>1</bool> <num>123456.123457</num> <dc>-1.756000</dc> <date>2006-05-29-04:00</date> </row> </rowset> </diffgr:diffgram> </tns:test_types_dnet_outResult> <tns:sqlcode>0</tns:sqlcode> </tns:test_types_dnet_outResponse> </SOAP-ENV:Body> |
SQL Anywhere 类型 | XML 模式类型 | XML 示例 |
---|---|---|
CHAR | string | Hello World |
VARCHAR | string | Hello World |
LONG VARCHAR | string | Hello World |
TEXT | string | Hello World |
NCHAR | string | Hello World |
NVARCHAR | string | Hello World |
LONG NVARCHAR | string | Hello World |
NTEXT | string | Hello World |
UNIQUEIDENTIFIER | string | 12345678-1234-5678-9012-123456789012 |
UNIQUEIDENTIFIERSTR | string | 12345678-1234-5678-9012-123456789012 |
XML | 此项由用户定义。假定参数是表示复杂类型(例如 base64Binary、SOAP 数组、struct)的有效 XML。 |
<inputHexBinary xsi:type="xsd:hexBinary"> 414243 </inputHexBinary> (解释为 'ABC') |
BIGINT | long | -9223372036854775807 |
UNSIGNED BIGINT | unsignedLong | 18446744073709551615 |
BIT | boolean | 1 |
VARBIT | string | 11111111 |
LONG VARBIT | string | 00000000000000001000000000000000 |
DECIMAL | decimal | -1.756000 |
DOUBLE | double | .555555555555555582 |
FLOAT | float | 12.3456792831420898 |
INTEGER | int | -2147483640 |
UNSIGNED INTEGER | unsignedInt | 4294967295 |
NUMERIC | decimal | 123456.123457 |
REAL | float | 3.25 |
SMALLINT | short | -99 |
UNSIGNED SMALLINT | unsignedShort | 33000 |
TINYINT | unsignedByte | 128 |
MONEY | decimal | 12345678.9900 |
SMALLMONEY | decimal | 12.3400 |
DATE | date | 2006-11-21-05:00 |
DATETIME | dateTime | 2006-05-21T09:00:00.000-08:00 |
SMALLDATETIME | dateTime | 2007-01-15T09:00:00.000-08:00 |
TIME | time | 14:14:48.980-05:00 |
TIMESTAMP | dateTime | 2007-01-12T21:02:14.420-06:00 |
TIMESTAMP WITH TIME ZONE | dateTime | 2007-01-12T21:02:14.420-06:00 |
BINARY | base64Binary | AAAAZg== |
IMAGE | base64Binary | AAAAZg== |
LONG BINARY | base64Binary | AAAAZg== |
VARBINARY | base64Binary | AAAAZg== |
如果一个或多个参数属于 NCHAR、NVARCHAR、LONG NVARCHAR 或 NTEXT 类型,则响应输出采用 UTF8 格式。如果客户端数据库使用 UTF-8 字符编码,则不存在行为的变化(因为 NCHAR 和 CHAR 数据类型是相同的)。不过,如果数据库不使用 UTF-8 字符编码,则所有不属于 NCHAR 数据类型的参数都将转换为 UTF8。XML 声明编码和 Content-Type HTTP 标头的值将与使用的字符编码相对应。
XML 模式类型 | Java 数据类型 |
---|---|
xsd:string | java.lang.String |
xsd:integer | java.math.BigInteger |
xsd:int | int |
xsd:long | long |
xsd:short | short |
xsd:decimal | java.math.BigDecimal |
xsd:float | float |
xsd:double | double |
xsd:boolean | boolean |
xsd:byte | byte |
xsd:QName | javax.xml.namespace.QName |
xsd:dateTime | javax.xml.datatype.XMLGregorianCalendar |
xsd:base64Binary | byte[] |
xsd:hexBinary | byte[] |
xsd:unsignedInt | long |
xsd:unsignedShort | int |
xsd:unsignedByte | short |
xsd:time | javax.xml.datatype.XMLGregorianCalendar |
xsd:date | javax.xml.datatype.XMLGregorianCalendar |
xsd:g | javax.xml.datatype.XMLGregorianCalendar |
xsd:anySimpleType | java.lang.Object |
xsd:anySimpleType | java.lang.String |
xsd:duration | javax.xml.datatype.Duration |
xsd:NOTATION | javax.xml.namespace.QName |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |