Web Services Invocation Framework 故障诊断技巧

一组特定提示,用于帮助您对使用 Web Services Invocation Framework (WSIF) 时遇到的问题进行故障诊断。

注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.logSystemErr.logtrace.logactivity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。

有关解决 WebSphere® Application Server 级别问题的信息,请参阅诊断问题(使用诊断工具)

要标识和解决与 WSIF 相关的问题,您可以使用标准的 WebSphere Application Server 追踪和记录工具。如果您遇到认为可能与 WSIF 相关的问题,您可检查 WebSphere Application Server 管理控制台和应用程序服务器 stdout.log 文件中的错误消息。您还可以启用应用程序服务器调试跟踪来提供详细的异常转储。

WSIF (Web Services Invocation Framework) 消息中提供具有每条消息所指的详细信息的 WSIF 运行时系统消息列表。

WSIF - 已知限制中提供了使用 WSIF 时受到的主要已知限制列表。

这里是主要 WSIF 活动的核对表,以及有关与每个活动关联的常见问题的建议:

创建服务
[AIX Solaris HP-UX Linux Windows][z/OS]

手动创建的 Web 服务描述语言 (WSDL) 文件会导致许多问题。为了帮助确保 WSDL 文件有效,请使用工具(例如 WebSphere Studio Application Developer (WSAD))创建 Web Service。

[IBM i]

手动创建的 Web 服务描述语言 (WSDL) 文件会导致许多问题。为了帮助确保 WSDL 文件有效,请使用工具(例如 WebSphere Development Studio for System i® (WDS))创建 Web Service。

定义传输机制
对于 Java™ 消息服务 (JMS),请检查您已正确设置 Java 命名和目录接口 (JNDI),并创建必需的连接工厂和队列。
[AIX Solaris HP-UX Linux Windows][z/OS]对于 SOAP,请确保部署描述符文件 dds.xml 是正确的 - 最好是通过使用 WebSphere Studio Application Developer (WSAD) 或类似的工具来创建。
[IBM i]对于 SOAP,请确保部署描述符文件 dds.xml 是正确的 - 最好是通过使用 WebSphere Development Studio for System i (WDS) 或类似的工具来创建。
创建客户机 - Java 代码

遵循正确格式创建 WSIF 服务、端口、操作和消息。有关正确代码的示例,请参阅示例:使用 WSIF 来动态调用 AddressBook 样本 Web Service

编译代码(客户机和服务)
检查代码的构建路径是正确的,而且它包含正确级别的 JAR 文件。
为部署到 Web 服务器而准备的服务创建有效 EAR 文件。
部署服务
当您安装和部署服务 EAR 文件时,仔细检查部署服务时给出的任何消息。
服务器设置和启动

确保 WebSphere Application Server server.policy 文件(在 /properties 目录中)具有正确的安全设置。有关更多信息,请参阅保护 WSIF

WSIF 设置

检查是否正确设置了 wsif.properties 文件。有关更多信息,请参阅wsif.properties 文件 - 初始内容

运行客户机

检查您是否已正确定义类路径以包括对您的客户机类、WSIF JAR 文件和任何其他所需 JAR 文件的引用,或者使用 WebSphere Application Server launchClient 工具运行您的客户机(更可取)。

检查您是否已正确定义类路径以包括对您的客户机类、WSIF JAR 文件和任何其他所需 JAR 文件的引用,或者使用 WebSphere Application Server launchClient 工具运行您的客户机(首选)。有关此工具的更多信息,请参阅《开发和部署应用程序》PDF 书籍中的『运行应用程序客户机』一章。

运行客户机代码时,接收到“无类定义”错误

此问题通常表明类路径设置错误。检查是否包含相关的 JAR 文件。

找不到 WSDL 错误

一些可能的原因是:

  • 应用程序服务器未运行。
  • WSDL 中的服务器位置和端口号不正确。
  • WSDL 的格式错误(检查应用程序服务器 stdout.log 文件中的错误消息)。
  • 自服务安装以来未重新启动应用程序服务器。

您可能还需要尝试以下检查:

  • 您可以从错误消息中指定的位置将 WSDL 装入到您的 Web 浏览器吗?
  • 您可以将相应的 WSDL 绑定文件装入到您的 Web 浏览器吗?

Web Service EAR 文件未正确地安装到应用程序服务器中

EAR 文件的格式可能是错误的。通过完成以下步骤来验证安装:
  • 对于 EJB 绑定,请运行 WebSphere Application Server 工具 \bin\dumpnamespace。此工具列出 JNDI 目录的当前内容。
  • 对于 SOAP over HTTP 绑定,请打开 http://pathToServer/WebServiceName/admin/list.jsp 页面(如果您已安装 SOAP 管理页面)。此页面列出了当前已安装的所有 Web Service。
  • 对于 SOAP over JMS 绑定,请完成以下检查:
    • 检查队列管理器是否正在运行。
    • 检查是否定义了必需的队列。
    • 检查 JNDI 设置。
    • 使用 jmsadmin 工具的“显示上下文”选项列出当前的 JNDI 定义。
    • 检查远程过程调用 (RPC) 路由器是否正在运行。

许可权问题或安全错误

检查 WebSphere Application Server server.policy 文件(在 /properties 目录中)是否具有正确的安全设置。有关更多信息,请参阅保护 WSIF

使用带有多个客户机的 WSIF 会引起 SOAP 语法分析错误

必须先确定 Web Service 的作用域,然后再将其部署到 WebSphere Application Server。Web Service 的部署描述符文件 dds.xml 包含以下行:

    <isd:provider type="java" scope="Application" ......

您可将 Scope 属性设置为 ApplicationSession。缺省设置是 Application,并且如果每个针对 Web Service 的请求都不要求为比单个实例长的实例提供对象,那么此值是正确的。如果 Scope 设为 Application,那么对象在执行单个实例期间不可用于另一个请求,并且它们在完成时发布。如果您的 Web Service 需要为多个请求提供对象,并且在每个请求中对象是唯一的,那么您必须将 scope 设为 Session。如果 Scope 设为 Session,那么对象在会话使用期限期间不可用于另一个请求,并且它们在会话补全时发布。如果 scope 设为 Application 而不是 Session,那么您可能会遇到下列 SOAP 错误:

SOAPException: SOAP-ENV:ClientParsing error, response was:
FWK005 parse might not be called while parsing.;
嵌套异常为:

[SOAPException: faultCode=SOAP-ENV:Client; msg=Parsing error, response was:

FWK005 parse might not be called while parsing.;
        targetException=org.xml.sax.SAXException:
FWK005 parse might not be called while parsing.]

如果在不同机器上的应用程序服务器上运行的 JMS 消息传递队列和队列连接工厂使用相同的名称,那么将导致 JNDI 查找错误

您不应该让不同机器上的应用程序服务器上运行的 JMS 消息传递队列和队列连接功能使用相同的名称,因为 WSIF 始终先查看本地的 JMS 目标,而且仅当它找不到本地的目标时,才会使用全 JNDI 引用。例如,如果您在远程机器上运行 Web Service,而且在本地运行应用程序服务器,其使用相同的名称用于消息传递队列和队列连接工厂,那么 WSIF 将找到并使用本地队列,即使远程 JNDI 目标在 WSDL 服务定义中完整提供。

WebSphere Application Server V5 上运行的 JAX-RPC 客户机使用 SOAP over JMS 来调用在 V5 应用程序服务器上运行的 Web Service

WebSphere Application Server V5 上运行的 JAX-RPC 客户机使用 SOAP over JMS 来调用在 V5 应用程序服务器上运行的 Web Service。在目标 MQ Series 队列上不需要用户标识或密码。在应用程序服务器迁移到 V6 之后并且使用 V6 缺省消息传递时,客户机请求失败,因为现在已经启用了基本认证。

此问题以日志消息形式出现:
SibMessage W [:] CWSIT0009W: A client request failed in the application server
with endpoint <endpoint_name> in bus <your_bus> with reason: CWSIT0016E: 
The user ID null failed authentication in bus <your_bus>.

要了解用于解决此问题的步骤,请参阅以下服务集成技术故障诊断技巧:将 V5.1 应用程序服务器迁移到 WebSphere Application Server V7.0 或更高版本

当前 WSIF 缺省 SOAP 提供程序(IBM Web Service SOAP 提供程序)不能实现与先前的 (Apache SOAP) 提供程序上运行的服务进行完全互操作

这是因为 IBM Web Service SOAP 提供程序设计为与符合 JAX-RPC 的 Web Service 进行完全互操作,而 Apache SOAP 无法提供这样的服务。要启用互操作,请修改 Web Service 或 WSIF 缺省 SOAP 提供程序,如WSIF SOAP 提供程序:使用现有应用程序中所述。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwsf_trouble
文件名:rwsf_trouble.html