此文件包含可影响 Web Service 的局限性(永久性和临时性)的综合列表。
您在处理 Web Service 时可能遇到的局限性分为以下几部分:
使用受保护的 WebSphere Application
Server 时遇到的问题
您可能会遇到下列错误消息:SSLSocketFactory
error message: java.net.SocketException: java.lang.ClassNotFoundException:
Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory
在使用 Web Service 资源管理器、生成样本 JSP、从 HTTPS WSDL 文件创建 Web Service 或客户机或者部署 Axis Web Service 之前,必须先将工作台配置成通过安全套接字层 (SSL) 与服务器通信。此任务的相关信息可在此处找到:使用 SSL 连接处理受保护服务器时的问题。
您可能会遇到下列错误消息:Error
opening socket: javax.net.ssl.SSLHandshakeException: unknown certifcate
要使用 Web Service 向导来检索 HTTPS WSDL,或者要对受保护的 WebSphere® Application Server 使用 Web Service 资源管理器,请完成配置 IBM® JRE 以与受保护的 WebSphere Application Server 通信中的步骤。
使用 Web Service 向导时遇到的问题
- 如果在使用任何 Web Service 向导的过程中单击取消,那么在部署描述符中可能有 Web Service 条目并且工作空间中有生成的文件。
关闭向导之后,请手动删除这些文件。
- Web Service 向导未能发布 EAR:
问题:使用存根运行时创建远程服务器时,未发布 EAR。
原因:Web Service 向导不确定是否可以启动服务器。
解决方案:在提供了“服务器”视图的任何透视图中,右键单击远程服务器并选择添加和移除项目。选择项目并将它添加至服务器。
- Web Service 向导无法处理所选择的项目类型:
问题:如果在选择了在服务器上安装服务选项的情况下,您尝试于包含 Java EE 应用程序客户机项目的 EAR 上运行 Web Service 向导,或者 EJB 项目不含 EJB,那么您不能使用该向导来生成 Web Service。
原因:Web Service 向导会检查以确保它们可以耗用在向导第三页上选择的项目类型。如果它们不能处理,那么该向导将阻止您继续执行后续操作。
解决方案:如果取消向导并在不选择在服务器上安装服务的情况下重新运行,或者向 EJB 项目添加一个 EJB,那么您可以在向导中继续进行。
- 如果在工作空间中选择了某个 WSIL 文件并随后启动了 Web Service 向导,那么该向导会告诉您选择无效,因为必须从 WSIL 文件选择 WSDL 文件。
要解决此问题,请单击 Web Service 向导中的浏览以选择特定的 WSDL 文件。
- 如果目标 Web 项目的名称包含非拉丁-1 字符,那么 Web Service 向导可能会在创建 Web Service 时发生错误。出现该问题的原因是,Web Service 代码生成器根据项目名称来计算 HTTP URL,但不允许在 HTTP URL 中使用非拉丁-1 字符。要解决此问题,应使用只包含 Latin-1 字符的项目名称。
- 如果工作空间中有多个 EAR 项目,并且您在 EJB 项目中选择了 Enterprise JavaBeans 并启动 Web Service 向导,那么在向导启动时,可能未选择所选企业 Bean。在“选择服务实现”对话框中,所选的 EAR 项目是工作空间中按字母顺序的第一个 EAR,而不是与包含该 Bean 的 EJB 项目相关联的 EAR。要解决此问题,请在“选择服务实现”对话框中手动选择所需的 EAR 项目。
- 在 Web Service 向导的第一页上选择监视 Web Service 流量时,“TCP/IP 监视器”视图偶尔不会自动显示。在这种情况下,可以通过选择来手工打开“TCP/IP 监视器”视图。Web Service 的请求和响应显示在该视图中。
使用 WebSphere JAX-WS 运行时环境和 JAXB 时遇到的问题
创建 Web Service 客户机时的局限性
将 Web Service 客户机部署至 EJB 项目时,必须在代理配置页面上选取用于设置 Web Service 客户机作用域的 EJB。此选择是 JSR-109 定义的一个需求,其中 component-scoped-refs 元素的组件名称必须与模块中 EJB 的 ejb-name 相匹配。
当项目中至少有一个 EJB 时,不发生任何错误。但是,如果项目中没有 EJB,那么代理配置页面上的选项是可编辑的并且缺省值等于 WSDL 中的服务名称加上“EJB”后缀。此外,客户机向导会显示一个警告,用于指示部署未完成,因为未将 Web Service 客户机的作用域设置为现有 EJB。您可以通过创建与 webservicesclient.xml 中使用的组件名称同名的 EJB 来修订此错误。
但是,如果通过从向导中取消来选择结束客户机创建操作,那么向导不会从 webservicesclient.xml 中移除未完成的 component-scoped-refs。
在重新部署之前,请先手动移除未完成的 component-scoped-refs。
Web Service 样本 JSP 的局限性
- Web Service 样本 JSP 不支持将数组或集合作为参数的方法。将从样本 JSP 的“方法”窗格中省略此类方法。
Web Service 资源管理器问题
- 当 Web Service 资源管理器装入使用多个内联模式的 WSDL 文件时,会针对这些模式间引用的类型生成警告消息。该警告消息类似于:Reference
of type <qualified_type_name> isn't resolved. 这些是警告而非错误,并且不会妨碍 Web Service 资源管理器的开始操作的功能,因此可以安全地予以忽略。
- Web Service 资源管理器不支持由使用除 HTTP 基本认证之外的其他协议(例如 NTLM)的认证代理服务器调用 Web Service。如果 Web Service 资源管理器因这种或其他任何原因而无法连接至所选 Web Service,那么它会在其结果窗格内显示错误 IWAB0135E
An unexpected error has occurred,后跟从 HTTP 响应检索的故障的相关信息。要解决此问题,应切换到“HTTP 基本认证”代理服务器。
- 如果模式使用包含序列的选项,那么当您从源代码视图切换至表单视图时,Web Service 资源管理器将发生问题。
如果您使用的是 complexType 中的某个选项元素,该选项包含两个或多个包括序列的元素并且您从表单视图切换至源代码视图,那么 Web Service 资源管理器可能无法在源代码视图中将相应的 XML 片段正确转换回表单视图而不丢失数据。要解决此问题,请在最初输入数据时,从表单视图中启动序列。当发生此配置时,建议不要使用源代码视图。如果使用了“源代码”视图,那么不要切换回表单视图。
- Web Service 资源管理器导入 WSDL,但未解析相对导入 URL。使用 Web Service 资源管理器时,将 WSDL 从 WSDL 页面导入到工作空间时会发生问题。如果选择了选项作为对 WSIL 文档的服务引用进行导入,那么这指的是 WSDL 的原始 URL,因此所有相对导入都可访问。如果选择了导入 WSDL 文档并且该 WSDL 文件包含相对导入,那么这些导入不再可访问,从而导致 WSDL 的副本在工具中的任意位置都很难或不可能处理。如果要导入的 WSDL 中有相对导入,请使用 WSIL 方法。如果需要 WSDL 的副本,请在导入以解决任何断开的链接之后手动检查相对导入。
使用 Web Service 命令行工具时的问题
- 将包含由使用 Java EE 1.4 的命令行生成的 EJB 客户机的 EAR 导入到工作空间会导致编译错误。要修正这些错误,右键单击 EJB 项目并选择属性。转至 Java 构建路径,然后选择库选项卡。移除 EJBClientProject/imported_classes(类文件夹)条目。添加类文件夹 EJBServiceClient/imported_classes/Meta-inf/classess。单击确定。
- 在将包含由使用 Java 1.4 的命令行工具生成的应用程序客户机的 EAR 导入工作空间之后,运行客户机时将产生 ClassNotFoundException 错误。要修正这些错误,右键单击应用程序客户机项目,然后选择属性。转至 Java 构建路径,然后选择库选项卡。移除 ApplicationClientProject/imported_classes(类文件夹)条目。添加类文件夹 ApplicationClientProject/imported_classes/Meta-Inf/classess。单击确定。
- 以 Axis 运行时为目标的 Web Service Ant 任务会处理 Web Service 的生成,但不处理 Web Service 的部署。因此,使用 Ant 任务创建的 Axis Web Service 在运行中的服务器上将不可访问,直到您使用 Apache Axis 本机 AdminClient 实用程序手动部署您的服务为止。使用 Axis AdminClient 工具将已生成的 deploy.wsdd 文件(位于 Web 项目的 WebContent/WEB-INF 目录中的子目录内)手动部署至 Axis。请参阅《Axis 1.4 用户指南》的“使用 AdminClient”部分,以获取更多详细信息。