第十五章 创建Web客户端 - 类包名称的 SOAP 向导规则

文章目录

  • [第十五章 创建Web客户端 - 类包名称的 SOAP 向导规则](#第十五章 创建Web客户端 - 类包名称的 SOAP 向导规则)
  • [类包名称的 `SOAP` 向导规则](#类包名称的 SOAP 向导规则)
  • 以编程方式生成客户端类

第十五章 创建Web客户端 - 类包名称的 SOAP 向导规则

类包名称的 SOAP 向导规则

SOAP 向导对类包名称应用以下规则:

  • Web 客户端包和 Web 服务包字段中指定的包包含主要生成的 Web 客户端或 Web 服务类。这些值由在向导的上一页中输入的内容进行初始化。
  • 如果向导还生成一个策略类(因为 WSDL 包含 WS-Policy 信息),则默认情况下该类位于同一包中。要指定不同的包,请指定配置子包的值。

默认情况下,类名称是 Web 客户端或服务名称,并附加 Config。如果为配置子包指定一个值,则生成的类与 Web 客户端或服务具有相同的名称(但位于给定的子包中)。

  • 对于生成的任何支持类,向导会检测 WSDL 中使用的所有名称空间。默认情况下,它将生成的类组织到包中,每个名称空间对应一个包。

可以选择编辑这些包名称。

并非所有名称空间都必须对应于生成的类。例如,本示例中使用的 WSDL 使用命名空间 https://schemas.xmlsoap.org/wsdl、https://schemas.xmlsoap.org/wsdl/mime 和 https://schemas.xmlsoap.org/wsdl 。在这种情况下,这些命名空间中没有生成的类,并且不会生成相应的包。

以编程方式生成客户端类

可以使用 %SOAP.WSDL.Reader 类以编程方式生成客户端类。

生成的类及其组织可能与使用 SOAP 向导时不同,后者提供了对生成类的包的更好控制。

以编程方式生成客户端类:

  1. 创建 %SOAP.WSDL.Reader 的实例。
  2. (可选)设置属性来控制实例的行为。有关详细信息,请参阅 %SOAP.WSDL.Reader 的类文档。

请注意,如果 WSDL 位于使用 SSL 的位置,%SOAP.WSDL.Reader 将(默认情况下)检查证书服务器名称是否与用于连接到服务器的 DNS 名称相匹配。如果这些名称不匹配,则不允许连接。此默认行为可防止中间人攻击,并在 RFC 2818 第 3.1 节中进行了描述;另请参阅 RFC 2595在新选项卡中打开,第 2.4 节。

要禁用此检查,请将实例的 SSLCheckServerIdentity 属性设置为 0。

  1. 如果您需要以 %SOAP.WSDL.Reader 不直接支持的方式控制 HTTP 请求,请执行以下操作:

a. 创建 %Net.HttpRequest 的实例并根据需要设置其属性。

b. 对于 %SOAP.WSDL.Reader 实例,将 HttpRequest 属性设置为等于您刚刚创建的 %Net.HttpRequest 实例。

  1. 调用实例的 Process() 方法:
java 复制代码
method Process(pLocationURL As %String, pPackage As %String = "") as %Status 
  • pLocationURL - 必须是 Web 服务的 WSDL 的 URL 或 WSDL 文件的名称(包括其完整路径)。根据 Web 服务的配置,可能需要附加提供合适用户名和密码的字符串;请参阅示例。
  • pPackage - 是生成的类的包的名称。如果未指定包, 将使用服务名称作为包名称。

注意:如果此包与现有包相同,则默认情况下该工具会覆盖任何具有相同名称的现有类。要防止该工具覆盖类定义,请将以下内容添加到该类定义中:Parameter XMLKEEPCLASS = 1;

下面显示了一个终端会话示例:

java 复制代码
set r=##class(%SOAP.WSDL.Reader).%New() 
GSOAP>set url="https://devsys:52773/csp/mysamples/GSOP.AddComplexWS.CLS?WSDL=1"
 
GSOAP>d r.Process(url) 
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.ns2.ComplexNumber
Compiling routine AddComplex.ns2.ComplexNumber.1
Compilation finished successfully in 0.170s.
 
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.AddComplexSoap
Compiling routine AddComplex.AddComplexSoap.1
Compiling class AddComplex.AddComplexSoap.Add
Compiling routine AddComplex.AddComplexSoap.Add.1
Compilation finished successfully in 0.363s.

WSDL URL 是 Web 应用程序的一部分,可能受到密码身份验证的保护。有关在这种情况下使用 WSDL 生成 Web 客户端或第三方 Web 客户端的详细信息,请参阅使用受密码保护的 WSDL URL。

在所有情况下,也可以在提供所需的用户名和密码后从浏览器检索 WSDL,将其保存为文件并使用该文件。

相关推荐
青柠之夏cc12 小时前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
liangshanbo121512 小时前
前端大文件切片上传怎么做?
前端
Sand(ContextGate)13 小时前
Python Agent 测试实战:测试与评估,让 Agent 像传统软件一样可交付
前端·javascript·python·microsoft·ai
广州华水科技13 小时前
单北斗GNSS变形监测系统在城市安全与地质灾害中的应用前景
前端
颜进强13 小时前
20 · NestJs循环依赖与 forwardRef:容器为什么在环面前会死,"占位再补齐"怎么救
前端·后端·ai编程
颜进强13 小时前
19 · NestJs @Global 落地账:装饰器与 `isGlobal` 参数,各在什么场景上岗
前端·后端·ai编程
码艺-Alimjan13 小时前
Tauri 网站To桌面应用实战总结
前端·javascript·vue
颜进强14 小时前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
YZ12255214 小时前
【Docker专题】使用Docker部署Vue-Flask项目前后端分离版【前端Docker部署】
前端·vue.js·docker
liangshanbo121514 小时前
浏览器渲染过程:高级前端面试题
前端