1.0 简介
2.0 受支持的软件和规范
3.0 对前发行版的更改
4.0 已知问题
4.1 Web 服务资源管理器
4.2 TCP/IP 监视服务器在 Linux 上不工作
4.3 专用 UDDI 注册中心
4.4 与 IBM SOAP 运行时的互操作性
4.5 从 DADX 文件生成 WSDL 文档
4.6 Web 工具 JSP 生成器
4.7 医院方案
4.8 使用通用测试客户机
4.9 在某些情况下允许 DADX Web 服务有多个输出
4.10 JDBC 驱动程序首选项仅供在 Linux 上使用
4.11 如果 XML Extender 未安装在缺省目录中,则需要更新 DAD 示例文件
4.12 DADX Web 服务问题
4.13 如果 Mozilla 和 Netscape 都在运行,则可能不能正确显示资源管理器弹出对话框
4.14 DADX 生成支持
4.15 从 4.0.x 导入 Web 服务文件之后的 WSDL 错误
4.16 将 Linux 与 GTK 配合使用时的问题
4.17 将 Tomcat 服务器与 AXIS 运行时配合使用
4.18 使用 Web 服务命令行时的问题
4.19 在没有现有服务器的情况下创建 Web 服务
4.20 生成 Web 服务样本应用程序
4.21 使用 HTTP 基本认证导入 WSDL 文件
4.22 使用 WebSphere v5.0.2 运行时的问题
4.23 使用数据源信息设置 DADX 组
4.24 使用通用测试客户机装入客户机定位器
4.25 未发现资源首选项
4.26 使用 Apache Axis 1.0 运行时的问题
4.27 Web 服务样本 JSP 无法编译
4.28 未定义本地主机所出现的错误
4.29 使用 IBM SOAP 运行时时的永久限制
4.30 使用不同运行时的 Web 服务和客户机
4.31 在 Web 服务客户机向导中单击完成
4.32 Web 服务备忘单
Web 服务工具功能部件使您能够发现、创建和发布 Java bean、DADX、企业 bean 和 URL Web 服务。本自述文件描述与下列 Web 服务工具功能相关联的已知问题、限制与变通方法:
- 从 Java bean、DADX 文档、企业 bean、ISD 文件和 URL 生成 WSDL 文档。
- 从 WSDL 文档生成 Java 代理或框架。
- 从 Java bean、DADX、企业 bean 或 URL 创建和部署 Web 服务。
- 发现和发布 Web 服务。
- 从 Java 代理生成样本 Web 应用程序。
- 互操作性问题。
本发行版的 Web 服务工具生成符合下列规范的代码:
- 简单对象访问协议(SOAP)版本 1.1
- 统一描述、发现和集成(UDDI)版本 2.0
- Web 服务定义语言(WSDL)版本 1.1
- Web 服务检查语言(WSIL)版本 1.0
此 Web 服务工具发行版支持:
- IBM WebSphere V5.0.2 Web 服务运行时
- IBM SOAP V2.2 和 V2.3 运行时环境
- Apache Axis 1.0 运行时
如果要在工作台外部使用 Mozilla 来启动 WORF 测试环境,建议使用的 Mozilla 版本至少为 1.3.1。调用 Web 服务所获得的输出以及描述文件在先前版本的 Mozilla 浏览器中不能正确显示。
DADX 运行时需要 DB2 7.2 修订包 6 或更高版本或者 DB2 8.1 或更高版本。
下列功能是 Web 服务工具的 V5.1 中的新增功能:
- 支持 IBM WebSphere V5.0.2 Web 服务运行时。这是支持 JSR-109 和 JAX-RPC 的策略性 IBM Web 服务运行时。
- 支持 Apache Axis 1.0 运行时。此运行时支持 JAX-RPC 并且适用于希望针对开放式 Apache Axis 平台进行开发的用户。
- 提供了 Web 服务命令行工具,它使用户能够从 Java bean、EJB 或 WSDL 文件创建 Web 服务以及将业务和服务发布到 UDDI 注册中心或取消这些发布。
- 已将 WSDL 资源管理器完全集成到 Web 服务资源管理器中。
- 提供了 Web 服务应用装配工具,它们包括:
- Web 服务编辑器和 Web 服务客户机编辑器(用于编辑 JSR-109 和 IBM WebSphere V5.0.2 部署描述符)。
- 用于调用 EndpointEnabler 函数的弹出操作。
- 用于调用 WebServiceDeploy 函数的弹出操作。
- 帮助指导用户通过首选项创建符合 WS-I 的 Web 服务。用户可以选择让 Web 服务向导在创建 Web 服务时要求、建议或忽略 WS-I 一致性。
- 生成和使用每个代理 WSIL Web 服务参考文档。
- 使用户能够使用样本安全性配置更新 WebSphere V5.0.2 部署描述符。
- 在从 EJB 创建 Web 服务时,支持基于 JMS 的 SOAP 作为 SOAP 消息传送协议。
- 支持用户定义的 UDDI 类别。
- 支持 Web 服务验证。当设置该首选项后,工具会验证“企业应用程序”和/或其中的模块遵循符合 JSR-109 的一组规则。
- 当将“Web 服务资源管理器”与“专用 UDDI 注册中心”配合使用时,在下列情况下,将不装入企业节点的“管理发布器断言表单”:
- 您未登录到包含企业节点的注册中心节点。
- 您已登录到包含企业节点的注册中心节点,但该企业节点不为用来登录到包含的注册中心的用户标识/密码所拥有。
- 将不能使用“Web 服务资源管理器”来通过启用了基本认证的 UDDI 注册中心进行查询或发布。这种注册中心的一个示例是在打开了基本认证的服务器上部署的专用注册中心。请注意,此问题不会影响所有公用注册中心(IBM、Microsoft、SAP、NTT 和 XMethods)。
- 当在“Web 服务资源管理器”中使用高级搜索来查找用 Cloudscape 后端配置的 WAS 专用 UDDI 注册中心中的企业且一个或多个服务接口被指定为参数时,搜索将会失败,并且状态窗口将显示以下内容:
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: Could not list all service providers. ------------------------------------------------------------------------------ Nested exception is:E_fatalError (10500) Serious technical error has occurred while processing the request. : Fault code=Client Fault string=Client Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=E_fatalError (10500) Serious technical error has occurred while processing the request.
- XMethods 注册表具有一些过程,用来验证已发布的 Web 服务并删除不可访问或不工作的那些 Web 服务。要防止删除已发布的 Web 服务,应确保可在因特网上访问 WSDL 文件中的所有 URL 引用。
“SAP UDDI 企业注册中心”将为 findQualifier 等于“combineCategoryBags”(tModelKey 等于 UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2)的按类别查找企业请求返回 E_fatalError。 将在状态窗口中显示以下错误消息。这是一个只有“SAP UDDI 企业注册中心”才会出现的问题。
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: Could not list all service providers. ------------------------------------------------------------------------------ Nested exception is:A serious technical error has occurred while processing the request. : Fault code=Client Fault string=UDDI Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=A serious technical error has occurred while processing the request. at com.ibm.uddi4j.wsdl.client.UDDIWSDLProxy.findAllServiceProviders(UDDIWSDLProxy.java:1626) at FindBusWithQualifier.main(FindBusWithQualifier.java:35)
- “SAP UDDI 企业注册中心”返回的发布器断言报告不包含任何状态。因此,“Web 服务资源管理器”的“管理发布器断言表单”中的发布器断言状态列对于 SAP 返回的报告将为空白。这是一个只有“SAP UDDI 企业注册中心”才会出现的问题。
- 当尝试将业务、服务或服务接口发布到 XMethods UDDI 注册中心时,将会出现关于“SSL 握手失败”的错误消息。这是 IBM 和 XMethods 都在研究的一个已知问题。
TCP/IP 监视服务器在 Linux 上不工作。只要尝试在 Web 服务与 Web 服务客户机(例如,Web 服务样本 JSP、Web 工具 Java bean JSP 和通用测试客户机)之间插入监视服务器,就会影响客户机与服务之间的通信。尤其是,客户机将在来自服务的第一个响应上无限期挂起。要在样本 JSP 或 UTC 中从这种情况进行恢复,应关闭所有浏览器,然后从 WebSphere Studio 外部启动新的浏览器,并为生成的样本 JSP 或“通用测试客户机”输入适当的 URL。
要监视 Linux 上的 SOAP 流量,尝试 Apache SOAP 运行时附带包括的另一种监视工具(例如,TCP/IP 隧道),可以从 http://ws.apache.org/soap/index.html.tool 处下载这种工具。启动该隧道并调用 Web 服务客户机操作。请求和响应流量应该出现在隧道中,但是,客户机将暂挂。停止隧道。这将导致客户机取消阻塞,于是将完成操作。在尝试下一个调用之前重新启动隧道。
- 专用 UDDI 注册中心的发布器断言对于注册中心中的所有企业可能都可视。企业可查看与企业本身相关联的发布器断言,例如,企业的键不是发布器断言的 from 键也不是 to 键。
- 当使用 Cloudscape 数据库后端配置单元测试 UDDI 注册中心时,缺省情况下,UDDI 的按名称查找的方法将执行区分大小写的搜索。这违反了 UDDI 规范,并且也是一个限制。
- 仅当为了进行非常基本的测试,才应使用 Cloudscape 后端配置“专用 UDDI 注册中心”,这里的基本测试之意即是,不将此后端用于生产工作,原因是当前对于进行诸如复杂查询之类的操作还存在一些困难。有关专用 UDDI 注册中心的更多信息,请参阅“WAS V5 信息中心”中的“网络部署”文档。
- 在 Linux 上创建或更新基于 Cloudscape 的单元测试 UDDI 注册中心之后,可能会在服务器控制台中出现一条红色警告,内容为:
Cloudscape(实例 <uuid>)正在尝试引导数据库 <UDDI DB location>(即使 Cloudscape(实例 <uuid>)可能仍处于活动状态)。一次应只有一个 Cloudscape 实例引导数据库。可能会导致严重的和不可恢复的毁坏,并且这种毁坏可能已经发生。
此警告是一个错误的警报。可以在以下网址找到更多详细信息:
http://www-1.ibm.com/support/docview.wss?rs=636&context=SSCVRP&q=&uid=swg21051601&loc=en_US&cs=utf-8&lang=en+en
- 若使用 IBM SOAP 运行时,则使用复杂参数生成 WSDL 可能会导致使用 WSDL 的 Microsoft 工具出现问题。Microsoft 工具不正确处理 XSD include 语句,因此,可能有必要将 XSD 模式直接插入生成的 WSDL。这可通过选择
“窗口”>“首选项”>“Web 服务”>“代码生成”>“使用直接插入模式”来完成。当使用 IBM SOAP 运行时时,现在就完全启用了 Web 服务向导来生成基于元素的映射以及任何正常的基于类型的映射(如果选择了“启用基于元素的映射”复选框的话)。可从 WSAD 主菜单的以下首选项页面中找到此复选框:
“窗口”>“首选项”>“Web 服务”>“代码生成”。如果未启用此首选项(这是缺省情况),则 Apache/IBM SOAP 运行时不能与其它供应商的(发送其元素没有“xsi:type”属性的消息的)Web 服务运行时进行相互操作。来自其它供应商的 Web 服务运行时遵循有关包括 xsi:type 属性的各种策略。某些策略总是包括这些属性。而某些策略则不包括。某些策略提供了配置选项。对于某些类型(如数组),某些策略则省略了 xsi:types。
IBM/Apache SOAP 运行时所发生的典型错误是:
targetException=java.lang.IllegalArgumentException: No Deserializer found to deserialize a ':MyElement' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.
启用“基于元素的映射”时,基于元素的映射被生成到:
- 自底向上的 Java bean/EJB 方案和“WSDL 框架”方案的部署描述符文件
- 客户机方案中的“代理”
基于元素的映射具有以下格式:
<isd:map
encodingStyle="encoding style"
xmlns:x="some-namespace"
qname="x:some-local-name"
xml2JavaClassName="some-deserializer-class-name"/>基于元素的映射是为了以下目的而生成的:
- 在每个 wsdl:message 输入中定义的每个部件。
- 在每个 wsdl:message 输出中定义的每个部件,仅适用于“框架”和“代理”方案。
- WSDL 文件中的部件引用的每个复杂类型中的每个根元素或本地元素。
WSAD Web 服务向导遵循 SOAP 和 XSD 规范来确定基于元素的映射中的元素名应该是限定的(即具有名称空间)还是非限定的。
WSAD Web 服务向导遵循以下这些规则来在限定与非限定元素名称之间作出决定:
- WSDL 中的部件名产生非限定名称。
- XSD 中的根元素产生限定名称。
- 如果模式指定 elementFormDefault="unqualified"(这也是模式没有 elementFormDefault 属性时的缺省情况),则 XSD 中的本地元素产生非限定名称。
- 如果模式指定 elementFormDefault="qualified",则 XSD 中的本地元素产生限定名称。
已知某些运行时会在 SOAP 消息中生成非限定元素(尽管存在通过 XSD 模式的“elementFormDefault”属性指定使用限定元素的模式)。在这样的情况下,可能需要手工编辑服务的 WSDL 或 XSD 并将 elementFormDefault 更改为 "unqualified"。
以下是基于非名称空间限定元素的映射的一个示例:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>以下是基于名称空间限定元素的映射的一个示例:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="http://www.ibm.com/"
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>请注意,将只为给定元素名称生成一个基于元素的映射。即,如果模式多次使用同一元素名称,但类型不同,则将只随机选择其中一个元素作为基于元素的映射的基础。将无法对其它名称完全相同而类型不同的元素进行串并转换。如果模式将相同的名称用于元素和 WSDL 部件,则情况也是这样。
- 当以返回“映射”数组或“散列表”数组的服务 bean 开始并且启用了“基于元素的映射”选项时,生成的 SOAP 代理将会错误地把返回类型映射至 java.lang.String[]。在运行时期间将发生 ClassCastException。要解决此问题,使用新创建的 WSDL 运行 Web 服务客户机向导,并将 SOAP 代理重新生成到客户机项目中。
- 为了改进与 Microsoft Web 服务的互操作性,更新了 DADX 运行时,以便它们可以生成文档样式 Web 服务。要启用此功能部件,使用 DADX 配置向导来打开要使用的 DADX 组的属性页面。在属性页面的底部,确保将“使用文档样式”输入字段设置为 true。
- 不支持为具有多个输出参数的 DADX 调用操作生成 Java 代理。
- 当创建 DADX Web 服务时,将偶尔会出现消息“IWAB0177E 从 DADX 文件生成 WSDL 时出错”。在大多数情况下,此消息指示存在某些与数据库有关的问题,并且应该参阅服务器控制台日志以了解有关问题的详细信息。同时,检查下列各项:
- DAD(*.dad)文件必须位于 DADX 组目录中。这是 WORF 运行时定位 DAD 文件的方式。
- 如果正在尝试从 RDB 至 XML 映射文件(.rmx)生成 DAD 文件,则确保 DAD 文件与 DADX 文件位于同一个文件夹中。
- DADX 模式不再对文档使用 WSDL 文档标记。此标记现在是 DADX 模式的一部分。这可能会导致尚未迁移来使用更新模式的旧 DADX 文件出现验证问题。例如,如果旧的 DADX 文件包含以下 XML:
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Provides queries for part order information at myco.com.
</wsdl:documentation>新的文档条目将为:
<documentation>
Provides queries for part order information at myco.com.
</documentation>
必须将 DB2 驱动程序 db2java.zip 添加至 WebSphere ws.ext.dirs 类路径。要添加 db2java.zip,执行下列操作:
- 切换到“服务器”透视图(窗口 > 打开透视图 > 服务器)。
- 在“服务器配置”窗格中,展开服务器。
- 双击 WebSphere V.4.0 测试环境。“实例”编辑器打开。
- 在“实例”编辑器中,单击路径选项卡,然后单击 WebSphere 特定类路径(ws.ext.dirs)部分中的添加外部 JAR 来将 /home/db2inst1/sqllib/java12/db2java.zip 添加至 WebSphere 路径。
- 选择文件 > 保存(文件名)以保存更改,然后退出“实例”编辑器。
有关对“医院”方案文档的更新,请访问 WebSphere 开发者园地(WebSphere Developer Domain)并单击 Library。
当从“Web 服务”向导启动“通用测试客户机”时,“JNDI 提供程序 URL”被设置为缺省 WebSphere v5 端口 2809。如果正在使用 WebSphere v4 服务器或者更改了端口号,则不能搜索 JNDI 目录。如果您尝试访问 JNDI 目录,就会产生以下错误:
IWAD0403E 不能构造 JNDI 树:当解析初始引用 =WsnNameService 时,捕获到 CORBA.COMM_FAILURE变通方法是:
- 双击您要使用的服务器。这将显示服务器属性。
- 选择端口选项卡。
- 复制 Orb 引导程序端口。
- 在“通用测试客户机”中打开 JNDI 属性窗口。
- 将引导程序端口粘贴到“提供程序 URL”文本输入框中。
通常,工具不支持 Web 服务中有多个输出。然而,对于 DADX Web 服务,如果将使用文档样式组属性设置为 true,则允许多个输出。在这种情况下,当文档样式为 true 时,会将多个输出一起组合成一个 XML 文档。
添加了称为 JDBC 驱动程序的新 Web 服务首选项(窗口 > 首选项 > Web 服务)类别。虽然此首选项在所有平台上都可用,但还是只打算在 Linux 上使用它。在 Linux 上,可能会很难确定包含 JDBC 驱动程序的 JAR 文件的位置。因此,添加此首选项页面,以便您可以指定要使用哪个 JAR 文件。当前,只有 DADX 验证代码使用此 JAR 文件信息。
可能需要修改位于 WSinstall_dir\wstools\eclipse\plugins\com.ibm.etools.webservice_<version>\samples\DADX_examples 目录中的 DAD 文件以反映特定的系统配置。
在文件顶部附近,有类似于以下内容的一行:
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
如果已将 XML Extender 装入到不同于 c:\dxx 的位置中,则需要更新此字符串以反映实际位置。这也适用于 Linux 机器,在这些机器中,该位置通常是 /usr/IBMdb2xml。
- 在“Web 服务”向导的 Web 服务 DADX 组属性页面上,更改可能不会立即生效。因此,建议使用“DADX 组配置”向导来完成对 DADX 组属性的更改。
- 在编辑和验证 DADX 文件之后,在“任务”视图中可能会出现一条消息,指出需要重建项目。如果产生了这种情况,则右键单击适当的项目,并单击“重建项目”。可能需要再次执行此操作以便从“任务”视图中除去该消息。
如果 Mozilla 和 Netscape 都在运行,则不能正确显示 Web 服务资源管理器的弹出对话框。弹出对话框包括“浏览 WSDL”对话框和“浏览类别”对话框。要解决此问题,使用 Mozilla 或 Netscape,但是不要同时使用它们。
尽管用户定义的函数列示在“生成 DADX”向导中,但是,当前不支持从用户定义的函数生成 DADX。仅支持从 DAD 文件、存储过程和 SQL 语句生成 DADX。选择 UDF 将生成简单的 DADX 框架文件。
如果已经从 4.0.x 导入了 Web 服务文件,则可能会接收到下列错误消息:
错误 部件“result”为它的类型定义了无效值“anyElement”。类型声明必须引用在模式中定义的有效值。
错误 部件“return”为它的元素定义了无效值“findPatientResult”。元素声明必须引用在模式中定义的有效值。
错误 部件“response”为它的元素定义了无效值“findPatientResponse”。元素声明必须引用在模式中定义的有效值。变通方法是:
- 删除 WSDL 文件。
- 通过重新运行“Web 服务”向导来重新生成 Web 服务。
- 当在带有 GTK 的 Linux 上运行 WebSphere Studio 时, 创建 Web 服务向导总是将 Web 服务类型缺省设置为“框架 Java Bean Web 服务”,不管工作台中的选择如何都是如此。用户应覆盖缺省值并选择期望的 Web 服务类型。
- 在带有 Tomcat 4.1 和 4.0 服务器(服务器安装了带有 Axis 的 Web 应用程序)的 Linux 上会发生该问题。如果服务器已启动且需要在“Web 服务”向导中的某个位置重新启动,向导可能会挂起,原因是 Axis 阻止 Tomcat 服务器停止。
可通过在启动“Web 服务”向导之前停止服务器并在生成测试“Web 服务”应用程序的向导页面上取消选择“在服务器上运行”来解决此问题。
- FileNStoPkg 选项:命令行中 WSDL2WebService 的 -fileNStoPkg 选项当前未起作用。请使用 -NStoPkg 并在命令行中输入每个映射。另一个选项是使用 Web 服务向导(如果名称空间至包的映射是必需的话)。
- 带有空格的目录:避免从目录名中包含空格的目录运行 WSDL2WebService。否则,生成的 compile.bat(在 Linux 上则为 compile.sh)不会进行编译。
- 客户机部署描述符和 WSDL 文件:在运行 Bean2WebService、EJB2WebService 和 WSDL2WebService 之后,客户机端部署描述符(webservicesclient.xml、ibm-webservicesclient-bnd.xmi、ibm-webservicesclient-ext.xmi 和 _mapping.xml)在 client-side/META-INF 下面。如果用户想要创建受管理的客户机应用程序,则应该遵循下列过程:
- 要以 EJB 或 J2EE 应用程序客户机的形式运行受管理的客户机,用户必须在归档的 META-INF 下面封装所有部署描述符,并将服务端的 wsdl(在 WEB-INF/wsdl 下面(如果服务在 Web 容器中)或者在 META-INF/wsdl 下面(如果服务在 EJB 容器中))复制至客户机项目的 META-INF/wsdl。
- 要在 Web 容器中运行受管理的客户机,用户必须将所有部署描述符封装到客户机归档的 WEB-INF 中(通常采用 WebSphere Studio 中的 WAR 或 Web 项目的形式)。还必须将 WSDL 文件从服务端复制到 WEB-INF/wsdl。用户还需要通过将出现的每个 META-INF 替换为 WEB-INF 来手工编辑 webservicesclient.xml(使用文本编辑器,或者,如果在 WebSphere Studio 中,则使用 xml 编辑器)。
类名带有下划线:当从 Java bean 或 EJB 创建 Web 服务时,如果服务 bean 的类名带有下划线并且后面的字符是小写的(例如,test.Simple_bean),则不能在 WebSphere Application Server 上启动服务。变通方法是使用不带下划线的服务 bean 名称或在下划线后面使用大写字母(例如,test.Simple_Bean)。
- 当在工作空间中没有现有 Web 服务器的情况下完成 Web 服务创建方案时,单击第三页上的“上一步”将导致“下一步”按钮被禁用。变通方法是从向导选择取消操作并重新启动向导。要避免此问题,可在开始 Web 服务方案之前创建服务器和配置,或者不要在没有现有 Web 服务器时单击第三页上的“上一步”。
- 当用户右键单击工作台中的 Java 文件时,“Web 服务”菜单下面的生成样本应用程序弹出操作会为 IBM SOAP 代理生成 Web 服务样本 JSP。要为其它 Web 服务运行时(IBM WebSphere 5.0.2 和 Apache Axis 1.0)生成 Web 服务样本 JSP,右键单击 WSDL 文件并选择“Web 服务”菜单下面的生成客户机弹出操作。完成该向导后,选择测试生成的代理。
当从具有相对导入且受“HTTP 基本认证”保护的 WSDL 文件生成框架或客户机时,用户将看到一条错误消息,指示即使输入了正确的用户标识和密码,也不能解析该 WSDL 文件。问题是用户标识和密码只用来检索原始 WSDL 文件而不是检索它导入的那些文件。
要解决此问题,用户可首先下载 WSDL 文件及其导入到工作台的所有文件,然后从下载的 WSDL 文件生成框架或客户机。
- 不支持 WSDL:将 WSDL 添加至部署到 WebSphere V5.0.2 的 Web 服务的端点 URL 并在“测试环境”或远程服务器环境中运行以获取已部署 Web 服务的 WSDL 文件不受支持。生成的 WSDL 文件可在下列两个位置下面找到:Java bean Web 服务的 Web 项目的 WebContent/WEB-INF/wsdl 以及 EJB Web 服务的 EJB 项目的 ejbModule/META-INF/wsdl。如果从 Web 项目提供的 WSDL 是必需的,则用户可以引用 Web 项目的 WebContent/wsdl 下面 WSDL 文件的副本,也可以在 WebContent 下面创建其自己的位置并从 Web 项目提供 WSDL。
- 具有实用程序 JAR 或多个源文件夹:当从 Java bean 或 EJB 创建 Web 服务时,如果 Web 项目中有多个源文件夹或如果 bean 在 EAR 文件内的实用程序 JAR 中,则可能会在模块中生成不必要的文件。因为这些生成的文件已存在于模块中(在实用程序 JAR 中或在另一个源文件夹中),所以需要删除它们以使项目能够进行编译并使 Web 服务正确运作。另一个变通方法是将源文件夹合并成一个文件夹或将 bean 从实用程序 JAR 复制到源文件夹中。
- 数组在 RPC/文字中不受支持:当创建 RPC/文字服务时,方法特征符不能包含数组。如果包含了数组,则不能使用生成的客户机代码调用服务。目前还没有解决此问题的变通方法。如果可能的话,请尝试使用文档/文字或 RPC/编码。
- 方法重载在文档/文字中不受支持:在创建文档/文字服务时,方法重载(方法名相同,输入参数不同)不受支持。目前还没有解决此问题的变通方法。如果可能的话,请尝试使用 RPC/文字或 RPC/编码。
- WSDL import:WSDL import 语句在同一目录中只可具有绝对 URL 或相对 URL。例如,以下格式的相对导入不受支持:
<import namespace="http://someNamespace/" location="../someFile.wsdl"/>- 端口类型元素前的绑定元素:当从在端口类型元素之前包含绑定元素的 WSDL 文件生成客户机代理或框架时,将会出现“从 WSDL 文件生成 Java 文件和部署描述符时出错(详细信息:操作名重复)”。
- 抽象元素:当采用使用抽象元素或类型的操作从 WSDL 文件生成框架时,生成的 JavaBeans 不会进行编译。
- 不具有缺省 JAX-RPC 映射的类型:当使用这样的操作(其输入输出参数类型不具有任何缺省 JAX-RPC 映射)从 WSDL 文件生成框架时,生成的实现 bean 不会进行编译。问题是,当从 javax.xml.soap.SOAPFactory 创建 javax.xml.soap.SOAPElement 时,后者会抛出 javax.xml.soap.SOAPException。实现 bean 不捕获或重新抛出此异常,因此它不会进行编译。
- 输入与输出为相同模式类型:当从将相同的 XML 模式类型用于其输入/输出消息和故障消息的 WSDL 文件生成框架时,生成的构件在运行时不起作用。要解决此问题,不要在输入/输出消息与故障消息之间共享 XML 模式类型定义。
- 具有 minOccurs 和 maxOccurs 的 XSD 元素引用:当从 WSDL 文件生成框架时,不要以用户指定的 minOccurs 和 maxOccurs 值(<element ref="..." minOccurs="0" maxOccurs="unbounded"/>)来使用 XSD 元素引用。使用这样的元素将导致服务器启动期间发生 java.util.MissingResourceException。
- 与服务 bean 具有不同 API 的已发射 bean:如果从 Java bean 或 EJB 创建 Web bean 时发射极生成的 bean 与服务 bean 具有不同 API,则您可能遇到如下所示的运行时错误:
方法未定义。
找不到匹配的 Java 操作。
与生成的 bean 具有不同 API 的服务 bean 的示例有:
- 带有公用字段的 bean
- 带有名为 getBooleanValue 而非 isBooleanValue 的 getter 的布尔字段
- 名称为大写的方法名
文档文字自动换行:当使用文档文字创建自底向上的 Web 服务时,缺省情况下,会打开自动换行选项。如果存在具有不同类型的多个输入或根本没有输入时,您就可能会遇到互操作性问题。变通方法是使用 RPC/文字。 名称为小写或有下划线的 Java bean:当从带有小写文件名或后面跟有小写字母的下划线的 Java bean 创建 Web 服务时,将会发生以下错误:
从 WSDL 文件生成 Java 文件和部署描述符时出错,详细信息为 getOutputStream() IOException。不同的安全性配置:不要将具有不同安全性配置的 Web 服务生成到同一模块/项目中。对每个 Web 服务使用单独的项目。
如果 WebSphere Application Server V5.0 正用来主管 DADX Web 服务,则 DADX 组的 group.properties 文件应该使用以下 initialContextFactory 属性:
initialContextFactory=com.ibm.websphere.naming.WsnInitialContextFactory另外,包含 DADX 组的项目的 web.xml 文件需要添加以下内容。(假定数据源 JNDI 名为 jdbc/hospital。)
<resource-ref id="ResourceRef_1058550453092">
<res-ref-name>jdbc/hospital</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
若“通用测试客户机”无法预装入由 WebSphere V5.0.2 或 Axis 运行时生成的客户机定位器类,那么这是因为服务 Web 项目中的 Java bean 类的名称与客户机 Web 项目中 SEI 类的名称相同。要解决此问题:
- 从工作空间中除去客户机 Web 项目
- 右键单击客户机 Web 项目并单击“删除”。
- 在 EAR 项目中找出 application.xml,然后双击该文件以打开“应用程序部署描述符”编辑器。选择客户机 Web 项目模块并单击“除去”。关闭编辑器并保存更改。
- 在另一个 EAR 下面创建客户机 Web 项目,其中 EAR 项目名称在字母顺序上必须在服务 EAR 项目名称前面。例如,如果服务 EAR 项目名称为“DefaultEAR”,则创建称为“ClientEAR”的新 EAR 项目名称。
- 重新运行“Web 服务”向导。
在使用 WebSphere V5.0.2 和 Axis 运行时创建 Web 服务时,未发现文件覆盖、文件夹创建和自动文件检出首选项。始终允许文件夹创建,但从不启用自动文件检出。
当使用 WebSphere V5.0.2 运行时时,总是覆盖 WSDL 文件、SEI 和部署构件(串行器和解串器)。从不覆盖开发构件(服务 bean、复杂类型 bean、占位符和 helper 类)。但是,用户将接收到有关覆盖部署描述符(如果存在的话)的警告。用户可以选择“确定”以覆盖部署描述符并继续方案,或选择“取消”以避免覆盖描述符。
当使用 Apache Axis 1.0 运行时时,Axis 发射极每次都重新生成所有服务器/客户机 Java 文件(deploy.wsdd 和 undeploy.wsdd)。服务生成方案的 WSDL2Java 将只生成框架实现文件(如果它尚未存在的话)。如果此实现已存在,则它不会被覆盖。
使用 Apache Axis 1.0 运行时创建 Web 服务依赖于 Axis 1.0 中提供的 Java2WSDL 和 WSDL2Java 发射极。对文档/文字和文档/文字(自动换行)的支持是 Axis 1.0 中的疑难问题,因此当使用 Apache Axis 1.0 运行时创建 Web 服务时,用户应该使用 RPC/编码。
当定义包与名称空间之间的定制映射时,在单击添加按钮后,错误的缺省包和名称空间会出现在表中,用户应该覆盖这些缺省值并输入他们自己的包和名称空间映射。
当从 WSDL(它将同一名称用于其 <service> 元素和 <port> 元素之一)生成 Web 服务框架或代理时,不要将样本 JSP 用作测试客户机。生成的样本 JSP 包含错误,不会进行编译。在服务器上运行样本 JSP 的任何尝试将导致浏览器中出现 ERROR 500,它指示不能装入 JSP,而服务器控制台中的异常指示 servlet 容器无法编译样本 JSP。
如果在计算机上未定义主机名“localhost”,则在生成 WSDL 期间 Web 服务创建向导可能会失败。如果未定义“localhost”,则 UTC 也可能无法成功启动。
在 Windows 中,[INSTALL-DRIVE]\WINNT\system32\drivers\etc\hosts 文件中必须存在以下条目:
127.0.0.1 localhost
在 Linux 中,/etc/hosts 文件中必须存在以下条目:
127.0.0.1 localhost
IBM SOAP 运行时应该主要用于向下兼容性原因。对于所有生产用途,强烈建议将 Web 服务向导与 IBM WebSphere 5.0.2 运行时配合使用。当将 Web 服务向导与 IBM SOAP 运行时配合使用时,用户可能会遇到下列永久限制:
- 从 Java bean 生成 WSDL 文档
- 由于不存在从 char 或 java.lang.Character 到 WSDL XSD 的缺省映射,所以,char 和 java.lang.Character 要求您输入定制映射。
- 在服务 bean 的所有输入参数中,基本包装器类型 java.lang.Boolean、java.lang.Byte、java.lang.Short、java.lang.Integer、jaa.lang.Long、java.lang.Float 和 java.lang.Double 不能与它们相应的个别基本类型 boolean、byte、short、int、long、float 和 double 共存。例如,如果 java.lang.Integer 和 int 同时作为一个服务 bean 的输入参数出现在任何位置,则不能将该服务 bean 转换成完整的 Web 服务。在尝试使用“Web 服务”向导来从此服务 bean 类型创建 Web 服务时,除非未在该向导的“Web 服务 Java Bean 方法”页面中选择包含基本类型或包装器类型的方法,否则会出现一条警告消息。但是,必须确保在第一次遇到“Web 服务 Java Bean 方法”页面时未选择这些方法。在看到该警告后返回至此页面并清除有问题的方法可能会产生不完整的 Web 服务。在此情况下,应该重新启动该向导,以便在第一次遇到“Web 服务 Java Bean 方法”页面时可以选择正确的方法。
- 不支持多维数组。使用 Java 的备用方法是在维之间插入 Java bean。例如,不使用 MyType[][],模式 MyArray[](其中 MyArray 具有类型 MyType[] 的属性)将解决问题。
- 输入参数列表同时包含“DOM 元素”和简单 bean 类型的方法要求输入一个或多个定制映射。“Web 服务定义语言”(WSDL)版本 1.1 规范对所有输入部件(参数)支持一种编码样式。“简单对象访问协议(SOAP)版本 2.2”运行时不具有对带基本类型 SOAP 编码的“DOM 元素”和带“文字 XML”编码的 bean 的缺省映射支持。
- 当配置定制映射时,如果您尝试从 SOAP 运行时使用串行器或解串器类(即,包 org.apache.soap.encoding.soapenc 中的类)并接收到错误“不能从此项目中装入选择的串行器/解串器类”,则 soap.jar 很有可能不在 Web 项目构建路径上。要更正此问题,取消向导,使用 Web 项目属性对话框来将 WS_installdir\wstools\eclipse\plugins\com.ibm.etools.webservice\runtime\soap.jar 添加至 Web 项目的构建路径,然后重试 Web 服务向导。
- 对于嵌套复杂类型,定制映射不受支持。尽管嵌套类型将出现在向导的映射页面中,但是将忽略那些类型的定制映射。
- 根据其接口包含抽象 Java 类型的 Java 类创建 Web 服务时,Web 服务 Java 至 XML 映射页面可能会不正确地将抽象类型的解串器字段设置为 org.apache.soap.encoding.soapenc.BeanSerializer。由于 BeanSerializer 类中的解串器代码将不能构造抽象类型的实例,所以这将在运行时失败。要避免这种情况,必要时选择类型的“定制映射”选项,并将解串器字段更改为编写的用来对抽象类型进行串并转换的类的名称。
- Web 服务工具当前不支持从包含嵌套内部类(即,在顶级类内定义的内部类)的 Java Bean 创建 Web 服务。要解决此问题,应将内部类移至独立 Java 文件中的顶层类。
- 当从将其它 Java Bean 与“向量”、“散列表”或“映射”类型的属性配合使用的 Java bean 创建 Web 服务时,将从名称空间“http://xml.apache.org/xml-soap”生成 XSD,它具有包含“向量”和“映射”类型的复杂类型。因为此名称空间当前不存在任何模式,所以“XSD 验证器”将产生类似如下的错误和警告:
这些错误和警告不会影响“Web 服务”向导正确处理 WSDL 和 XSD。“映射”和“向量”类型将正确地映射至它们的 Java 对应类型。注意,其它供应商可能在处理包含这些类型的 WSDL 或 XSD 时具有一定的困难,这是因为 http://xml.apache.org/xml-soap 是 WSDL 1.1 或 SOAP 1.1 规范不能识别的名称空间。为了提高互操作性,应考虑使 Java 集合类采用数组和 bean,然后从适配器构建 Web 服务。
- 解析 src 时出错:不能将名称“xsd2:Vector”解析为类型定义组件。
- 警告 src-import.0:无法读取导入的模式文档“null”。
- 从 WSDL 文档生成 Java 构件
- 只支持每个 input 或 output 元素有一个 part。不支持一个输入或输出消息中存在多个逻辑 part。将处理第一个这样的 part,其余的将被忽略。
- 当从使用 xsd(http://www.w3.org/2001/XMLSchema)名称空间的类型 base64Binary 的 WSDL 生成 Web 服务框架或代理时,Web 服务运行时实际上将使用 soapenc(http://schemas.xmlsoap.org/soap/encoding/)名称空间的 xsi:type base64。通常,这两种类型可自由交换。但是,消息中的类型与模式中的类型之间的差异有可能会导致某些 SOAP 协议运行时拒绝消息。如果发生这种情况,可以手工创建类似于 Apache SOAP 的 Base64Serializer 的串行器,但它编写 xsd:base64binary 而不是 soapenc:base64。
- 如果 Java bean 框架是从包含不是有效 Java 标识的操作和部件名的 WSDL 文档创建的,则不会编译这些 Java bean 框架。WSDL 操作和部件名必须是有效的 Java 标识,才能成功创建 Java bean 框架。
- 缺省情况下,当生成 WSDL 时,Web 服务向导使用“http”URI,但是, 来自其它工具的某些 WSDL 文档可能偶尔会采用 Web 服务、“SOAP 操作”或“目标名称空间”URI(它们使用不同于“http”的方案,如“urn”)。 当根据包含非 http URI 的 WSDL 生成代理或框架时,Web 服务向导可能会将 URI 映射至 Java 包“com.example”而不是映射至更有意义的包。在某些情况下,Web 服务向导可能无法完全处理这样的 URI,从而产生错误“IWAB0234E 发生了内部错误。”
- 现在,当从 WSDL 生成 Java 代理和 Java 框架时,可以选择将 XSD 本征类型 boolean、byte、short、int、long、float 和 double 映射至“java.lang”包装器类型(例如,java.lang.Integer)而不是映射至 Java 基本类型(例如,int)。缺省情况下,Web 服务向导将映射至 Java 基本类型。要改为让向导映射至“java.lang”包装器类,打开“窗口”->“首选项”->“Web 服务”->“代码生成”并选择“将简单 XML 数据类型映射至 java.lang 包装器类”。
- 当在从 Java bean 或 EJB 创建 Web 服务时指定从 Java 类型到 XSD 类型的定制映射时,Bean 类字段自动设置为该 Java 类型的全名且不能编辑。当定制映射 Java 数组时,Bean 类名将采用数组格式,例如,“java.lang.String[]”,并且将按这样发送到“.isd”和“dds.xml”部署描述符文件中。SOAP 运行时不能正确处理这种格式的类名,并且将导致类似以下内容的错误:
SOAP 服务 http://tempuri.org/webservice.AddressBook 中发生部署错误:类名 java.lang.String[] 无法解析:java.lang.String[]
因此,不可能在服务端定制映射 Java 数组的串行器。部分变通方法是对定制映射保持串行器类字段为空白。这将抑制将数组类名生成到部署描述符中,并允许服务工作。注意,此问题和变通方法不会影响解串器类和定制映射解串器的能力。
- 运行时注意事项
- 如果您选择“Web 服务”代码生成首选项“启用基于元素的映射”并且选择了部署到 WebSphere Application Server V4,则可能会在 ISD 文件和 dds.xml 中生成以下条目:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:some-name"
xml2JavaClassName="some-serializer"/>XML 编辑器可能会显示以下错误:
属性“xmlns:x”的值无效。前缀名称空间绑定不能为空。
这对于 WebSphere Application Server V4 来说是无害的。但是,不要尝试将此 dds.xml 部署到使用 Xerces 2.x(XML4J 4.x)或更高版本的其它服务器(例如,WebSphere Application Server V5)。否则,在服务器装入 dds.xml 文件时,会产生类似的 Xerces 语法分析错误。应通过完成 Web 服务方案并选择正确的服务器类型来重新生成 dds.xml。这将为该服务器类型生成正确的 dds.xml。
另外,当尝试从该 ISD 文件部署 Web 服务时将产生类似的 Xerces 语法分析错误。变通方法是手工将该文件编辑为以下格式:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
qname="some-name"
xml2JavaClassName="some-serializer"/>
- 当调用根据 Java bean 或 EJB 创建的 Web 服务时,如果产生一个 SOAPException,而它具有类似如下的 targetException:
"java.lang.IllegalArgumentException: Unable to instantiate ..."
则问题可能是显示为 Web 服务的方法包含不具有作为参数和/或返回类型的公用缺省构造函数的 Java bean。公用缺省构造函数是必需的,以便 SOAP 运行时能够构造作为串并转换过程一部分的对象。- 当前部署到 Web 项目中的安全性文件 cl-ver-config.xml 和 sv-ver-config.xml 是来自 WebSphere V4.0 的文件,并不与 DTD 精确匹配。但这些文件都可在 WebSphere V4.0 和 WebSphere V5.0 上使用(尽管会发生指示必须声明“xmlns:ds”或“xmlns:SOAP-SEC”这样的验证错误)。
- 如果在编辑器中打开了“服务器配置”,则 Web 服务向导可能会因“Web 服务”Web 项目未添加至“服务器配置”而无法启动服务器。关闭“服务器配置”编辑器就可以解决此问题。
- ISD Web 服务
- 创建 Java 或 EJB Web 服务时,在填写了定制映射之后,除 XSD 位置 URL 之外的定制映射信息就存储在 ISD 文件中。当从该 ISD 文件创建 Web 服务时,就会检索那些信息。因此,当从 ISD 文件创建 Web 服务时,在向导的“Web 服务 Java 至 XML 映射”页面中,需要手工填写 XSD 位置 URL。
如果从 Java bean 或 EJB 创建 Web 服务,并选择 IBM SOAP 作为服务运行时而 Apache Axis 1.0 作为客户机运行时,则可能会出现以下错误:
找不到 WSDL
要避免该问题,首先创建 Web 服务而不选择生成代理。然后,从生成的 WSDL 文件创建 Web 服务客户机。
完成 Web 服务客户机向导后,如果用户单击“客户机环境配置”页面上的“完成”,则会出现以下错误:
“null”不可解析
变通方法是在该页面中单击“下一步”,然后在下一页面中单击“完成”。
在创建、测试和验证“符合 WS-I 的 Web 服务备忘单”和“从 WSDL 文件备忘单创建 Web 服务”时,如果要使用 HelloService.wsdl 文件(它位于 wsad_install/wstools/eclipse/plugins/com.ibm.etools.cs.wsdl.content_5.1/examples 中),则请根据如下所示的不同运行时修改服务端口位置:
对于 IBM Soap:
location="http://localhost:9080/HelloWorldSample/servlet/rpcrouter"
对于 Apache Axis 或 WebSphere 5.0.2 运行时
location="http://localhost:9080/HelloWorldSample/services/Hello_Port"
如果要导入您自己的 wsdl 文件,则请确保根据按上面所述选择的运行时正确设置了位置。
(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved.