`
yzd
  • 浏览: 1820521 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

抓虫记之二:WSDL中消失的函数定义

 
阅读更多

还是那句老话,现象总是扑朔迷离。

这次的现象更加奇怪,在一个webservice的接口定义中,某个新定义的方法总是看不到。可是看了实现代码,确实已经公布了。这是为什么呢?

先说明一下实现环境,这个是在Delphi环境下编写WebService的。大家可能说VisualStudio就不会有这样的问题了,这个我不否认,但是我相信了解这个过程,对大家会有很多帮助的。

其实,不管哪种语言,WSDL的描述基本都是自动生成的,也不需要我们去做任何额外工作。但是,既然这里面出现了问题,就只能硬着头皮去了解这些内部实现了。

在Delphi中,是在WebModule中的TWSDLHTMLPublish类型的组件来完成的。而这个组件,在获取HTTP请求之后,在接口定义中查找,找到后,依据RTTI,翻译成WSDL描述语言。

在跟踪代码的过程中,发现找到接口之后,明明接口定义了12个方法,调试器却只显示10个方法,少了2个方法。甚么原因呢?

说实话,我不是圣人。我一开始确实怀疑Delphi的编译器出问题了。但后来强迫自己休息了一下之后,突然领悟到,既然方法不一样多,是不是找错了接口定义呢?

这是一个伟大的跳跃式思维。因为,我开始怀疑错误来源于我自己。很多时候就是这样,怀疑别人,总是找不到答案。怀疑自己,却只有一步之遥就可以成功。

原来,我在实现这个WebService的时候,由于协作的需要,需要调用其他的WebService。本来这是没有问题的。但是,我做了一个偷懒的工作。我把一些常用的Webservice全部集中起来了,这样其他应用程序调用的时候非常方便。不巧的是,这些常用的Webservice中,就包含今天出错的这个。

也就是说,在服务器的实现过程中,很可能出现了接口的重复定义!因为Delphi在服务器注册机制,和客户端代理(Proxy)的注册机制是一样的,这导致了冲突!

检查了一下代码,果然如此。原来,由于服务器新的接口一直没发布,所以,服务器的客户端代理接口也没更新,这样,就出现了两个版本的接口定义。

开头出现的消失的函数定义,在调整完接口注册顺序,又神奇般出现了。

分享到:
评论

相关推荐

    WSDL基础,定义格式

    一:WSDL定义 二:WSDL的基本结构--概述 三:WSDL的基本结构--详述

    wsdl4j-1.6.3-API文档-中文版.zip

    赠送jar包:wsdl4j-1.6.3.jar; 赠送原API文档:wsdl4j-1.6.3-javadoc.jar; 赠送源代码:wsdl4j-1.6.3-sources.jar; 赠送Maven依赖信息文件:wsdl4j-1.6.3.pom; 包含翻译后的API文档:wsdl4j-1.6.3-javadoc-API...

    gowsdl:WSDL2Go代码生成及其SOAP代理

    如果您的WSDL有重复的类型定义,那么您的Go代码将具有相同的内容,并且可能无法编译。用法Usage: gowsdl [options] myservice.wsdl -o string File where the generated code will be saved (default "myservice.go...

    SOAP::WSDL-开源

    SOAP :: WSDL是用于perl的基于WSDL的开源SOAP工具包。 它允许基于WSDL描述轻松创建客户端和服务器SOAP接口。

    MyEclipse下Axis2插件的下载和安装:wsdl生成客户端

    5 赶快试下用 wsdl 文件生成 java 源文件吧 是不是有错误出现 对 事情就是这样发展的 6 An error occurred while completing process java lang reflect InvocationTargetException 的错误 嗯不用急 有得解 不过我...

    gowsdl:WSDL2Go 代码生成及其 SOAP 代理,hookliftgowsdl 的私有分支

    WSDL 去 从 WSDL 文件生成 Go 代码。特征仅支持符合Document/... 如果您的 WSDL 具有重复的类型定义,那么您的 Go 代码将具有相同的并且无法编译。用法 gowsdl [OPTIONS]Application Options: -v, --version Shows go

    wsdl例子wsdl例子wsdl例子

    wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子wsdl例子

    wsdl2java源码-wsdl:wsdl

    wsdl2java源码wsdl2java gradle 插件 用于从 wsdl 生成 java 的 Gradle 插件,在引擎盖下使用 cxf 以及与来自 apache-cxf 的 maven wsdl-2-java 插件相同的选项。 插件二进制文件可从 bintray 下载: 问题 如果您对...

    CXF视频:2、WSDL结构分析

    CXF视频:2、WSDL结构分析 CXF视频:2、WSDL结构分析

    抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java

    抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java(Throws Could not find main class: org.apache.axis.wsdl.WSDL2Java)。 添加本文的jar包压缩包解压出来的所有jar包到当前使用的java.exe 命令的lib目录下的ext...

    wsdl4j 解析wsdl 文件

    wsdl4j 解析wsdl 文件wsdl4j 解析wsdl 文件wsdl4j 解析wsdl 文件

    axis2-java2wsdl-maven-plugin-1.3.jar

    官方版本,亲测可用

    wsdl-tsclient:从wsdl生成打字稿客户端

    WSDL TSClient 示例如何生成和使用: 从WSDL文件生成带有打字稿定义的。 该库正在使用生成打字稿代码和以供运行时使用。 受Java 和启发。 注意:将添加到您的npm运行时依赖项( npm i soap )安装npm i wsdl-...

    wsdl2java源码-wsdl2java:wsdl2java

    wsdl2java源码原作者注 该插件不再由其创建者维护。 这个存储库只是一个分支,将被动维护以跟上我依赖它的项目。 wsdl2java gradle 插件 // TODO 采用自述文件 用于从 wsdl 生成 java 的 Gradle 插件,在引擎盖下...

    wsdl2java源码-wsdl-to-stub-generate:从wsdl生成存根的项目

    wsdl2java源码wsdl 到存根生成 从 wsdl 生成存根的项目 生成客户端存根 添加以下依赖项以从 wsdl 文件创建存根 org.apache.cxf cxf 核心 3.1.4 在 pom.xml 中添加以下代码以生成客户端存根 org.apache.cxf cxf-...

    wsdl2java源码-wsdl-gradle-plugin:wsdl-gradle-plugin

    wsdl2java源码WSDL Gradle 插件 笔记 此插件的第 3 版仅适用于 Gradle 6 和 JDK 8。 概括 此插件从基于 Apache Axis 1(请参阅 参考资料)或 Apache Axis 2(请参阅 参考资料)的 WSDL 文件生成 Java 代码。 用法 要...

    WebService之WSDL文件讲解

    做WebService开发时必须了解的文件,文档详细讲解了WSDL的构成以及各部分的作用和配置方法。初学者值得一看,大牛的随身资料……

    WSDL-中文规范1.1.pdf

    WSDL-中文规范1.1

    wsdl中文文档

    wsdl中文文档,详细介绍了wsdl文档的结构和用法。

Global site tag (gtag.js) - Google Analytics