第十六章 创建Web客户端 - 修改生成的客户端类

2024-06-04 10:52

本文主要是介绍第十六章 创建Web客户端 - 修改生成的客户端类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第十六章 创建Web客户端 - 修改生成的客户端类
  • 修改生成的客户端类
    • 调整生成的类以处理极长的字符串

第十六章 创建Web客户端 - 修改生成的客户端类

修改生成的客户端类

生成 Web 客户端类后,通常不需要编辑该类。相反,可以编写代码来创建 Web 客户端的实例并提供客户端错误处理。本节记录了修改生成的客户端类时的值得注意的例外情况。

注意:不要创建生成的 Web 客户端类的子类。编译器不会生成正常运行所需的支持类,并且子类将无法使用。

调整生成的类以处理极长的字符串

在极少数情况下,可能需要编辑生成的客户端类以适应极长的字符串或二进制值(长度超过字符串长度限制的值)。

SOAP 向导读取 WSDL 时,它假定任何字符串类型的输入或输出都可以在 IRIS 中表示为 %String,但这并不总是正确的。在极少数情况下,字符串可能会超出字符串长度限制。同样,向导假定任何 XML 类型为 base64Binary 的输入或输出都可以在 IRIS 中表示为 %xsd.base64Binary),但这并不总是正确的,因为存在相同的字符串长度限制。在这两种情况下,WSDL 都不包含任何信息来表明此输入或输出可能超出字符串长度限制。

Web 客户端遇到太长的字符串或二进制值时,它会引发以下错误之一:

  • <MAXSTRING>错误
  • 数据类型验证错误:
ERROR #6232: Datatype validation failed for tag your_method_name ...

(当然,此错误也可能是由数据类型不匹配引起的。)

不过,该问题很容易纠正:调整生成的 Web 客户端类(特别是从 %SOAP.WebClient 继承的类)中的方法签名以使用适当的流类:

  • 使用 %GlobalCharacterStream 而不是 %String
  • 使用 %GlobalBinaryStream 而不是 %xsd.base64Binary

例如,考虑一个 Web 服务 (MyGiantStringService),它有一个方法 (WriteIt),该方法不接受任何参数并返回一个非常长的字符串。如果使用 SOAP 向导生成 Web 客户端类,则 Web 客户端类最初看起来如下所示:

Class GetGiantString.MyServiceSoap Extends %SOAP.WebClient
{Method WriteIt() As %String 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{Quit ..WebMethod("WriteIt").Invoke($this,"https://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}}

在这种情况下,只需进行一项调整。更改 WriteIt 的返回类型如下:

Method WriteIt() As %GlobalCharacterStream 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{Quit ..WebMethod("WriteIt").Invoke($this,"https://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}

当编译这个类时,系统会根据需要自动重新生成关联的类。

可能还需要调整任何生成的类型类中的属性类型。例如,假设 Web 服务使用名为 <Container> 的元素,其中包括字符串类型的元素 <ContainerPart>。当生成 Web 客户端类时,系统会创建一个具有 %String 类型的 ContainerPart 属性的 Container 类。如果 Web 服务发送的字符串超过 <ContainerPart> 元素中的字符串长度限制, Web 客户端将引发错误。要避免此错误,请将 ContainerPart 属性的类型更改为 %GlobalCharacterStream

这篇关于第十六章 创建Web客户端 - 修改生成的客户端类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1029880

相关文章

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti