赞
踩
%XML.Adaptor
的输入和输出对象在大多数情况下,当使用对象作为 Web
方法的输入或输出时,该对象必扩展 %XML.Adaptor
。例外情况如下:
%ListOfDataTypes
、%ListOfObjects
、%ArrayOfDataTypes
、%ArrayOfObjects
或子类,则 SOAP
支持会隐式将该对象视为包含 %XML.Adaptor
。不需要对这些类进行子类化。然而:
ELEMENTTYPE
,如下所示:Method MyMethod() As %ListOfObjects(ELEMENTTYPE="MyApp.MyXMLType") [WebMethod]
{
//method implementation
}
或者,在输入参数的情况下:
Method MyMethod(input As %ListOfObjects(ELEMENTTYPE="MyApp.MyXMLType")) [WebMethod]
{
//method implementation
}
如果在 ELEMENTTYPE
中命名的类是对象类,则它必须从的 %XML.Adaptor
继承。
如果该对象是流类之一,则 SOAP
支持会隐式地将该对象视为包含 %XML.Adaptor
。不需要对流类进行子类化。
如果它是字符流,则 SOAP
工具假定类型为字符串。如果它是二进制流,工具会将其视为 base-64
编码的数据。因此没有必要提供类型信息。
可以使用结果集作为输入或输出,但方法取决于目标 Web 客户端。
Web
服务和客户端都基于 IRIS
,或者其中之一基于 .NET
,则可以在使用专用结果集类 %XML.DataSet
,这将在“在 SOAP
消息中使用数据集”中进行讨论。或者可以使用类查询作为 Web
方法。 XML
表示形式自动与的 %XML.DataSet
相同。Java
的 Web
客户端可以使用它,请在子类中使用 %ListOfObjects
。本节显示一个示例 Web
服务,以及它可以识别的请求消息和相应响应消息的示例。
/// MyApp.StockService Class MyApp.StockService Extends %SOAP.WebService { /// Name of the WebService. Parameter SERVICENAME = "StockService"; /// TODO: change this to actual SOAP namespace. /// SOAP Namespace for the WebService Parameter NAMESPACE = "https://tempuri.org"; /// Namespaces of referenced classes will be used in the WSDL. Parameter USECLASSNAMESPACES = 1; /// This method returns tomorrow's price for the requested stock Method Forecast(StockName As %String) As %Integer [WebMethod] { // apply patented, nonlinear, heuristic to find new price Set price = $Random(1000) Quit price } }
当从 Web
客户端调用此方法时,客户端会向 Web
服务发送一条 SOAP
消息。该 SOAP
消息可能如下所示(为了便于阅读,在此处添加了换行符和空格):
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV='https://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<Forecast xmlns="https://tempuri.org">
<StockName xsi:type="s:string">GZP</StockName>
</Forecast>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
注意,消息体(<SOAP-ENV: body >
元素)包含一个名为<Forecast>
的元素,它是客户机调用的方法的名称。<Forecast>
包含一个元素<StockName>
,其名称基于我们正在调用的web
方法的参数名称。此元素包含此参数的实际值。
web
服务执行请求的操作,然后发送SOAP
消息作为应答。响应消息可能如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV='https://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'
xmlns:s='https://www.w3.org/2001/XMLSchema'>
<SOAP-ENV:Body>
<ForecastResponse xmlns="https://www.myapp.org">
<ForecastResult>799</ForecastResult>
</ForecastResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这些示例不包括SOAP
消息本身之前的HTTP
标头。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。