面向 Forms 和 4GL 开发人员的 SOA:从 Oracle Forms 10.1.2 调用 Web 服务

目的

在本教程中,为您介绍 Web 服务。您将通过一个简单示例了解如何从 Oracle Forms 调用 Web 服务。您将使用 JDeveloper 和 Oracle ADF 构建 Web 服务接口,只需很少的代码。

所需时间

大约 30 分钟

主题

本教程包括以下主题:

 概述
 情景

识别 Web 服务

创建 Web 服务代理

 从 Oracle Forms 调用 Web 服务
 总结

查看屏幕截图

 将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。

概述

虽然本示例所用代码示例非常简单,但它展示了如何创建一个用于调用外部 Web 服务的存根,然后从 Oracle Forms 调用该存根。本示例假定您正在使用 Oracle Forms 9.0.4 和 JDeveloper 10.1.3.1。

返回主题列表

情景

为了重点讨论技术要素,本应用场景尽可能保持简单;但一旦您了解了简单情况,就可以轻松地将其应用于更“真实”的示例。该场景来自 Oracle Forms“Summit”订单/录入应用,您可以调用一个 Web 服务,向电话发送一条 SMS 消息,包含订单的详细信息。

返回主题列表

识别 Web 服务

本教程的第一步是识别提供 SMS 消息功能的 Web 服务。有各种注册表可提供此行为。在本示例中,Esendex 提供了许多不同的 Web 服务。具体来说,以下 SMS 服务提供了各种 SMS 消息发送选项。本示例将使用 SendMessage 服务。您可以在以下链接处注册一个免费帐户来测试此服务。(注意:HTTPS Web 服务可能需要其他步骤,但这不在本方法文档的讨论范围内)

返回主题列表

创建 Web 服务代理

第一步是创建一个 Java 代理/客户端,提供调用外部 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 节点并将 SourceTarget 下拉列表设置为 1.4

将光标置于该图标上可以查看该图像

单击 OK

根据您用于 Forms 的 JRE 版本的不同,您可能必须执行此步骤,以确保来自 JDeveloper 的编译类可以被 Form 所用的 JRE 读取。否则,在导入 Java 类时会出现“Unsupported major.minor version”错误。

6.

单击 Save All Save All 按钮 或选择 File | Save All 保存工作。

返回主题

设置浏览器代理

如果您的网络使用代理访问互联网,则需要将代理的名称告知 JDeveloper。否则,可以省略这些步骤。

1.

从主菜单中依次选择 ToolsPreferences

将光标置于该图标上可以查看该图像

2.

单击 Web Browser and Proxy,然后选择 Use HTTP Proxy Server。根据需要设置 Host Name、Port NumberExceptions

将光标置于该图标上可以查看该图像

单击 OK

返回主题

创建 Web 服务代理

在本节中,您将创建一个 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 Save All 按钮 或选择 File | Save All 保存工作。然后全部编译。

返回主题

测试 Web 服务

JDeveloper 将在 Web 服务代理中自动创建一个主方法,这意味着您可以运行和测试该 Web 服务。此代理(只是一个 Java 类)应已在代码编辑器中打开。您还可以从 Application Navigator 或 System Navigator 中选择该类。

1.

在 SendServiceSoapClient 中,您将看到一个主方法以及一条注释://Add your own code here。添加以下代码:

// Add your own code here
MessengerHeader header = new MessengerHeader();
header.setAccount("<您的帐号>");
header.setUsername("<您的用户名>");
header.setPassword("<您的密码> ");
myPort.sendMessage("<您的电话号码>","Message from Stub", MessageType.Text,header);

2.

您还需要将代码添加到该类,这样它就知道在 JDeveloper 约束之外运行时(从 Forms 调用它时就会出现这种情况)要使用的正确代理。

static
{
System.setProperty("http.proxyHost", "yourproxy.uk.oracle.com");
System.setProperty("http.proxyPort", "port number");
System.setProperty("http.nonProxyHosts","|<your machinename>");
}

将光标置于该图标上可以查看该图像

注意,根据代理的不同(假定您有一个代理),可能还会要求您提供代理的用户名和密码。这将按照类似上面的方式设置。

3.

单击 Save All Save All 按钮 或选择 File | Save All 保存工作。然后全部编译。

4. 右键单击 Java 客户端,并从上下文菜单中选择 Run。这将运行客户端,将调用 Web 服务并向电话发送 SMS。
5.

测试主方法之后,需要更新 SendMessage 方法,因为这将是 Forms 实际调用的方法。

MessengerHeader header = new MessengerHeader();
header.setAccount("<您的帐号>");
header.setUsername("<您的用户名>");
header.setPassword("<您的密码");
return _port.sendMessage(recipient, body, MessageType.Text, header);

6.

单击 Save All Save All 按钮 或选择 File | Save All 保存工作。然后全部编译。

返回主题

部署 Web 服务

您已在 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 Save All 按钮 或选择 File | Save All 保存工作。

5.

右键单击 Resources 节点下的存档文件并选择 Deploy to JAR file。这将在文件系统中部署 JAR 文件

将光标置于该图标上可以查看该图像

返回主题

返回主题列表

从 Oracle Forms 调用 Web 服务

构建、测试和部署 Web 服务代理之后,下一步是从 Forms 调用

 设置 CLASSPATH
 导入 Java 代码
 调用导入的 Java 类

设置 CLASSPATH

Oracle Forms 需要能够查看相关 Java 文件。将这些文件添加到 CLASSPATH 环境变量即可对 Forms 公开。

1.

在 Windows 上,单击 StartSettings,然后从上下文菜单中单击 Control Panel

将光标置于该图标上可以查看该图像

2.

双击 System。在 Advanced 下单击 Enironment Variables。选择 CLASSPATH,然后选择 EditNew

添加前面创建的 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。

返回主题

导入 Java 代码

最后一步是显示现在您可以从自己的应用代码轻松使用此 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 重复这个过程

返回主题

调用导入的 Java 类

最后一步是在表单中的相应触发器点编写 PL/SQL。

1.

在相应的触发器点添加以下代码。

DECLARE
jo ora_java.jobject;
xo ora_java.jobject;
rv varchar2(100);
ex ora_java.jobject;
BEGIN
JO := SendServiceSoapClient.new;
RV := SendServiceSoapClient.sendMessage(JO,'you number', 'TXT Message from Forms', xo, xo);

EXCEPTION
WHEN ORA_JAVA.JAVA_ERROR then
message('Unable to call out to Java, ' ||ORA_JAVA.LAST_ERROR);
WHEN ORA_JAVA.EXCEPTION_THROWN then
ex := ORA_JAVA.LAST_EXCEPTION;
message(Exception_.toString(ex));
END;

将光标置于该图标上可以查看该图像

2.

编译并运行该表单。

返回主题

返回主题列表

总结

您已经使用这个简单示例识别 Web 服务、创建存根并从 Oracle Forms 调用该服务

返回主题列表

 将光标置于该图标上可以隐藏所有的屏幕截图。