第十六章 创建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

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

kingbase修改权限实现方式

《kingbase修改权限实现方式》该文章详细介绍了如何在数据库中创建用户并赋予其相应的权限,包括创建用户、回收默认权限、创建数据库、赋权数据库权限、创建只读用户以及回收权限等步骤... 目录前言使用步骤总结前言创建用户后对数据库对象的读写权限进行修改使用步骤1、创建用户create user cs

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进