Standardmäßig ist die XML-Kodierung von Parametereingaben eine Zeichenfolge und die Ergebnismengenausgabe für SOAP-Dienst-Formate enthält keine Informationen, die speziell den Datentyp der Ergebnismengenspalten beschreiben. Die Datentypen für Parameter aller Formate sind Zeichenfolgen. Im DNET-Format haben alle Spalten innerhalb des Schemaabschnitts der Antwort den Zeichenfolgen-Datentyp. Die Formate CONCRETE und XML enthalten keine Datentypinformation in der Antwort. Dieses Standardverhalten kann mit der DATATYPE-Klausel geändert werden.
SQL Anywhere ermöglicht die Angabe von Datentypen mit der DATATYPE-Klausel. Datentypinformationen können in der XML-Kodierung der Parametereingabe und der Ergebnismengenausgabe bzw. -antworten für alle SOAP-Dienstformate enthalten sein. Dies vereinfacht die Parameterübergabe von SOAP-Toolkits, da es nicht erforderlich ist, dass der Clientcode Parameter explizit in Zeichenfolgen umwandelt. Eine Ganzzahl kann beispielsweise als "int" übergeben werden. XML-kodierte Datentypen ermöglichen es einem SOAP-Toolkit, die Daten syntaktisch zu analysieren und sie in den entsprechenden Datentyp umzuwandeln.
Wenn ausschließlich Zeichenfolgen-Datentypen verwendet werden, muss die Anwendung den Datentyp jeder Spalte der Ergebnismenge implizit kennen. Dies ist nicht erforderlich, wenn die Angabe von Datentypen vom Webserver verlangt wird. Um zu steuern, ob Datentypinformationen einbezogen werden, kann bei der Definition des Webdiensts die DATATYPE-Klausel angegeben werden.
DATATYPE { OFF | ON | IN | OUT }
OFF Dies ist das Standardverhalten, wenn die DATATYPE-Option nicht benutzt wird. Beim DNET-Ausgabeformat werden die SQL Anywhere-Datentypen in bzw. aus den Zeichenfolgentypen des XML-Schemas konvertiert. Für die Formate CONCRETE und XML werden keine Datentypinformationen ausgegeben.
ON Datentypinformationen werden sowohl für Eingabeparameter als auch für Ergebnismengenantworten ausgegeben. SQL Anywhere-Datentypen werden in und aus den Datentypen des XML-Schemas konvertiert.
IN Datentypinformationen werden nur für Eingabeparameter ausgegeben.
OUT Datentypinformationen werden nur für Ergebnismengenantworten ausgegeben.
Das folgende Beispiel zeigt eine Webdienstdefinition, die die Datentypfestlegung für die Ergebnismengenantwort enthält.
CREATE SERVICE "SASoapTest/EmployeeList" TYPE 'SOAP' AUTHORIZATION OFF SECURE OFF USER DBA DATATYPE OUT AS SELECT * FROM Employees; |
In diesem Beispiel werden Datentypeninformationen nur für Ergebnismengenantworten angefordert, da dieser Dienst keine Parameter hat.
Die Datentypfestlegung ist für alle SQL Anywhere-Webdienste anwendbar, die mit dem Typ 'SOAP' definiert sind.
Die Festlegung von Datentypen für Eingabeparameter wird dadurch unterstützt, dass die Datentypen der Parameter einfach in der vom DISH-Dienst generierten WSDL-Sprache als ihre tatsächlichen Datentypen dargestellt werden.
Eine typische Zeichenfolgen-Parameterdefinition (oder ein Parameter ohne Datentypangabe) sieht folgendermaßen aus:
<s:element minOccurs="0" maxOccurs="1" name="a_varchar" nillable="true" type="s:string" /> |
Der Zeichenfolgenparameter kann erscheinen oder auch nicht.
Für einen Parameter, für den ein Datentyp festgelegt wurde, wie etwa eine Ganzzahl, muss der Parameter zwingend erscheinen. Im Folgenden finden Sie ein Beispiel.
<s:element minOccurs="1" maxOccurs="1" name="an_int" nillable="false" type="s:int" /> |
Alle SQL Anywhere-Webdienste vom Typ 'SOAP' können Datentypinformationen in die Antwortdaten einbeziehen. Die Datentypen werden im Spaltenelement der Zeilenmenge in Form von Attributen angegeben.
Das folgende Beispiel zeigt eine typisierte SimpleDataSet-Antwort eines SOAP FORMAT 'CONCRETE'-Webdienstes.
<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> |
Das folgende Beispiel zeigt eine Antwort eines SOAP FORMAT 'XML'-Webdienstes, in der die XML-Daten als Zeichenfolge zurückgegeben werden. Die innere Zeilengruppe umfasst kodierten XML-Code und wird hier aus Gründen der Lesbarkeit in dekodierter Form dargestellt.
<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> |
Beachten Sie, dass der Namespace für die Elemente und das XML-Schema zusätzlich zu den Datentypinformationen auch alle Informationen liefert, die für die Nachbearbeitung durch einen XML-Parser erforderlich sind. Wenn in der Ergebnismenge keine Datentypinformationen vorhanden sind (DATATYPE OFF oder IN), werden die xsi:type- und die XML-Schema-Namespace-Deklaration weggelassen.
Das folgende Beispiel zeigt einen Webdienst mit dem SOAP FORMAT 'DNET', der ein SimpleDataSet mit Angabe des Datentyps zurückgibt:
<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-Datentyp | XML Schema-Datentyp | XML-Beispiel |
---|---|---|
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 |
Dies ist benutzerdefiniert. Von einem Parameter wird angenommen, dass er gültigen XML-Code für einen komplexen Typ darstellt (z.B. base64Binary, SOAP-Array, struct). |
<inputHexBinary xsi:type="xsd:hexBinary"> 414243 </inputHexBinary> (interpretiert als '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 |
BINARY | base64Binary | AAAAZg== |
IMAGE | base64Binary | AAAAZg== |
LONG BINARY | base64Binary | AAAAZg== |
VARBINARY | base64Binary | AAAAZg== |
Wenn ein oder mehrere Parameter vom Typ NCHAR, NVARCHAR, LONG NVARCHAR oder NTEXT sind, erfolgt die Antwortausgabe in UTF8. Wenn die Clientdatenbank den UTF-8-Zeichensatz verwendet, gibt es keine Änderung im Verhalten (da NCHAR- und CHAR-Datentypen dieselben sind). Wenn die Datenbank allerdings nicht den UTF-8-Zeichensatz verwendet, werden alle Parameter, die nicht vom NCHAR-Datentyp sind, zu UTF8 konvertiert. Der Wert des XML-Deklarationszeichensatzes und des Content-Type HTTP-Headers werden dem verwendeten Zeichensatz entsprechen.
XML Schema-Datentyp | Java-Datentyp |
---|---|
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 |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |