在本教程中,为您介绍 Web 服务。您将通过一个简单示例了解如何从 Oracle Forms 调用 Web 服务。您将使用 JDeveloper 和 Oracle ADF 构建 Web 服务接口,只需很少的代码。
所需时间
大约 30 分钟
本教程包括以下主题:
|
概述 |
|
情景 |
|
|
|
|
|
从 Oracle Forms 调用 Web 服务 |
|
总结 |
将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。
虽然本示例所用代码示例非常简单,但它展示了如何创建一个用于调用外部 Web 服务的存根,然后从 Oracle Forms 调用该存根。本示例假定您正在使用 Oracle Forms 9.0.4 和 JDeveloper 10.1.3.1。
为了重点讨论技术要素,本应用场景尽可能保持简单;但一旦您了解了简单情况,就可以轻松地将其应用于更“真实”的示例。该场景来自 Oracle Forms“Summit”订单/录入应用,您可以调用一个 Web 服务,向电话发送一条 SMS 消息,包含订单的详细信息。
本教程的第一步是识别提供 SMS 消息功能的 Web 服务。有各种注册表可提供此行为。在本示例中,Esendex 提供了许多不同的 Web 服务。具体来说,以下 SMS 服务提供了各种 SMS 消息发送选项。本示例将使用 SendMessage 服务。您可以在以下链接处注册一个免费帐户来测试此服务。(注意:HTTPS Web 服务可能需要其他步骤,但这不在本方法文档的讨论范围内)
|
创建应用 | |
|
设置浏览器代理 | |
|
创建 Web 服务代理 | |
|
测试 Web 服务 | |
|
部署 Web 服务代理 |
现在将创建放置业务逻辑代码的应用。
1. |
在 Applications Navigator 中,右键单击 Applications 节点并从上下文菜单中选择 New Application...。
|
2. |
在 Create Application 对话框中,在 Application Name 中输入 WebServicesApp。注意:输入应用名称时,目录名称会自动更改。 从 Application Template 下拉列表中选择应用模板 No Template [All technologies]。 单击 OK。
|
3. |
在 Create Project 对话框中,在 Project Name 中输入 WebServiceProxy。 单击 OK。 Applications Navigator 显示 WebServiceApp 应用和新项目
|
4. |
在 Applications Navigator 中,右键单击 WebServiceProxy 节点并从上下文菜单中选择 Project Properties...。
|
5. |
选择 Compiler 节点并将 Source 和 Target 下拉列表设置为 1.4。 单击 OK。 根据您用于 Forms 的 JRE 版本的不同,您可能必须执行此步骤,以确保来自 JDeveloper 的编译类可以被 Form 所用的 JRE 读取。否则,在导入 Java 类时会出现“Unsupported major.minor version”错误。
|
6. |
单击 Save All
|
如果您的网络使用代理访问互联网,则需要将代理的名称告知 JDeveloper。否则,可以省略这些步骤。
1. |
从主菜单中依次选择 Tools、Preferences。
|
2. |
单击 Web Browser and Proxy,然后选择 Use HTTP Proxy Server。根据需要设置 Host Name、Port Number 和 Exceptions。 单击 OK。
|
在本节中,您将创建一个 Web 服务代理以调用外部 Web 服务。
1. |
右键单击新项目并从上下文菜单中选择 New。 在 New Gallery 中,选择 Business Tier 节点下的 Web Services,然后选择 Web Service Proxy。 单击 OK
|
2. |
在 Create Web Service Proxy 对话框中,如果显示 Welcome 屏幕,则单击 Next。系统提示提供 WSDL Document URL 时,粘贴 SendMessage 服务的 WSDL 文件的 URL。在撰写本文时,该 URL 目前为 http://www.esendex.com/secure/messenger/soap/SendService.asmx?wsdl。 单击 Next,然后单击 Finish。
|
3. |
JDeveloper 现在将在代码编辑器中显示 Java 客户端文件。这就是将调用外部 Web 服务的存根。
|
4. |
单击 Save All
|
JDeveloper 将在 Web 服务代理中自动创建一个主方法,这意味着您可以运行和测试该 Web 服务。此代理(只是一个 Java 类)应已在代码编辑器中打开。您还可以从 Application Navigator 或 System Navigator 中选择该类。
1. |
在 SendServiceSoapClient 中,您将看到一个主方法以及一条注释://Add your own code here。添加以下代码: // Add your own code here
|
2. |
您还需要将代码添加到该类,这样它就知道在 JDeveloper 约束之外运行时(从 Forms 调用它时就会出现这种情况)要使用的正确代理。 static 注意,根据代理的不同(假定您有一个代理),可能还会要求您提供代理的用户名和密码。这将按照类似上面的方式设置。
|
3. |
单击 Save All
|
4. | 右键单击 Java 客户端,并从上下文菜单中选择 Run。这将运行客户端,将调用 Web 服务并向电话发送 SMS。 |
5. |
测试主方法之后,需要更新 SendMessage 方法,因为这将是 Forms 实际调用的方法。 MessengerHeader header = new MessengerHeader();
|
6. |
单击 Save All |
您已在 JDeveloper 中构建和测试了 Web 服务代理。为了从 Forms 调用 Web 服务代理,必须以 JAR 文件形式将代理部署到文件系统。
1. |
右键单击新项目并从上下文菜单中选择 New。 在 New Gallery 中,选择 General 节点下的 Deployment Profiles,然后选择 JAR file。 单击 OK
|
2. |
您可以接受默认名称和目录(并记下来)。 单击 OK
|
3. |
将显示 JAR Deployment Profile Properties。 单击 OK
|
4. |
单击 Save All
|
5. |
右键单击 Resources 节点下的存档文件并选择 Deploy to JAR file。这将在文件系统中部署 JAR 文件 |
|
设置 CLASSPATH | |
|
导入 Java 代码 | |
|
调用导入的 Java 类 |
Oracle Forms 需要能够查看相关 Java 文件。将这些文件添加到 CLASSPATH 环境变量即可对 Forms 公开。
1. |
在 Windows 上,单击 Start、Settings,然后从上下文菜单中单击 Control Panel。
|
2. |
双击 System。在 Advanced 下单击 Enironment Variables。选择 CLASSPATH,然后选择 Edit 或 New。 添加前面创建的 JAR 文件的位置(包括 JAR 文件名) 单击 OK。
|
3. |
下载 http://download.oracle.com/otn/java/oc4j/101320/wsclient_extended_101320.zip 并解压缩其中包含的 JAR 文件。将 JAR 文件的位置(包括 JAR 文件名)添加到 CLASSPATH 在打开的对话框中单击 OK。
|
4. |
还需要将 JAR 文件位置添加到 Forms 运行时环境,以便在运行时访问。为此,将两个 JAR 文件位置均添加到您的 default.env(这是默认名称)文件的 CLASSPATH。 如果已经在运行,请重新启动 OC4J。
|
最后一步是显示现在您可以从自己的应用代码轻松使用此 Web 服务。
1. |
启动 Oracle Forms Builder(请注意,为使新 CLASSPATH 生效,必须重新启动 Builder)
|
2. |
对于所选的表单,从菜单中选择 Program,然后选择 Import Java Classes... 注:对于 Java Importer Options,您需要取消选中 Generate persistent names 复选框。否则,PL/SQL 块将抛出编译错误。
|
3. |
展开 Java 类列表,找到 SendServiceSoapClient Java 类。 单击 Import。
|
4. |
在 Import Classes 域中输入 java.lang.String,然后单击 Options 并选中 Include inherited mehtods/fields,单击 OK,然后单击 Import。
|
5. |
对 java.lang.Exception 重复这个过程 |
最后一步是在表单中的相应触发器点编写 PL/SQL。
1. |
在相应的触发器点添加以下代码。 DECLARE EXCEPTION
|
2. |
编译并运行该表单。
|
您已经使用这个简单示例识别 Web 服务、创建存根并从 Oracle Forms 调用该服务
将光标置于该图标上可以隐藏所有的屏幕截图。