利用 JDeveloper 和 Oracle 应用服务器开发、配置和管理 Web 服务

目的

在本教程中,您将利用 JDeveloper 来创建和部署 Java Web 服务,并使用 Application Server Control 来管理它。

所需时间

大约 30 分钟

主题

本教程包括下列主题:

 概述
 情景
 前提条件
 创建 Java 类

基于 Java 类创建 Web 服务

 使用 WSDL 编辑器
 部署并测试 Web 服务

管理 Web 服务

 监视 Web 服务
 总结
 相关信息

查看屏幕截图

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

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

概述

Web 服务是可以合并到应用程序中的分散的可重用软件组件。它们构建于现有的 XML 和 HTTP 协议之上,并遵循以下标准:

 WSDL(Web 服务描述语言):一种用于定义 Web 服务的基于 XML 的语言
 SOAP(简单对象访问协议):一种基于 XML 的协议,用于使用 XML 语法通过 HTTP 发送命令来访问 Web 上的服务
 UDDI(通用描述、发现与集成):Web 服务的通用目录,使软件可以发现 Web 上的服务并与其集成

JDeveloper 提供了许多特性来帮助您创建和部署 Web 服务,并找到现有的 Web 服务,以在您的应用程序中使用。本教程将向您介绍如何使用 JDeveloper 的一些 Web 服务工具来创建和选择性地监视 Web 服务,其中还包括如何使用 Application Server Control 来管理 Web 服务。

返回主题列表

情景

您希望使用 JDeveloper 为常用功能开发组件,并将其部署为 Web 服务。您还希望能够针对诸如日志和安全性的任务管理 Web 服务,并监视调用 Web 服务产生的 HTTP 请求和响应。

返回主题列表

前提条件

开始本教程之前,您应该:

1.

已经安装了 JDeveloper 10g (10.1.3.1.0)。

2.

已经通过双击 \jdeveloper.exe 启动了 JDeveloper。

如果您收到一条消息,询问您是否想从一个早期版本进行移植,单击 No

3.

双击 \jdev\bin\start_oc4j.bat 启动 Oracle Application Server Containers for J2EE (OC4J)。

如果提示您输入口令,则输入 welcome1。在您输入口令时不显示任何内容。您必须在下一行重新输入该口令进行确认。如果没有要求您输入口令,那么在稍后的步骤中,您需要知道在 OC4J 最初启动时设置的口令。

观察命令窗口中的结果,直到您看到消息“Oracle Containers for J2EE 10g (10.1.3.1.0) initialized”。然后您可以最小化窗口,但不要关闭它。

4.

在 JDeveloper 中创建到 OC4J 的连接:

  • 单击 Connections 选项卡(如果 Connections 选项卡不可见,则从菜单中选择 View > Connection Navigator)。
  • 右键单击 Application Server 节点,并从上下文菜单中选择 New Application Server Connection
  • 如果显示 Create Application Server Connection 向导的 Welcome 页面,则单击 Next
  • 在该向导的 Type 页面上,在 Connection Name 域中输入 oc4jconn 并单击 Next
  • 在向导的 Authentication 页面上,输入口令 welcome1(或最初启动 OC4J 时使用的任何口令)并选择 Deploy Password,然后单击 Next
  • 在向导的 Connection 页面上,单击 Next
  • 在向导的 Test 页面上,单击 Test Connection。在测试之后,Status 消息应显示 Success!。(如果显示了错误消息,则单击 Back,并更正您输入的连接信息。)
  • 单击 Finish

返回主题列表

创建 Java 类

JDeveloper 使您能够使用现有的 Web 服务,或利用 Java 或 PL/SQL 创建 Web 服务。在本教程中,您将创建一个基于 Java 类的 Web 服务。

要为 Web 服务创建 Java 类,执行以下步骤:

1.

在 Applications Navigator 中,右键单击 Applications 节点,然后从上下文菜单中选择 New Application

2.

在 Create Application 对话框中,在 Application Name 域中输入 JavaWebService

从 Application Template 下拉列表中选择 No Template [All Technologies]

单击 OK


3.

在 Create Project 对话框中,在 Project Name 域中输入 GetDates,然后单击 OK

4.

在 Applications Navigator 中,右键单击 GetDates 项目,然后从上下文菜单中选择 New

5.

在 New Gallery 中,选择 Categories 列表中的 General 节点,然后在 Items 列表中选择 Java Class。单击 OK

6.

在 Create Java Class 对话框中输入:

Name: GetDates
Package: datespackage

单击 OK

新的 Java 类创建成功,并显示在编辑器中。

7.

在编辑器中创建一个方法 getDate(),该方法使用 java.util.Calendar 返回日期和时间。

public Calendar getDate()
{
??return Calendar.getInstance();
}

8.

由于此代码引用一个对该程序包不可用的类,因此系统提示您导入该类。按 [Alt]+[Enter] 导入建议的类 java.util.Calendar

9.

在编辑器中创建第二个方法 getDateHence(),该方法使用 java.util.GregorianCalendar 在今天的日期上加上用户定义的天数(利用 int 参数 daysHence 来指定)。在 getDate() 方法下添加以下代码,当提示导入 java.util.GregorianCalendar 时按 [Alt]+[Enter]

public Calendar getDateHence( int daysHence)
{
?? GregorianCalendar myCalendar = new GregorianCalendar();
?? myCalendar.add(GregorianCalendar.DATE, daysHence);
?? return myCalendar;
}

10.

单击 Make Make 按钮 编译该类。日志应显示编译成功。

返回主题列表

基于 Java 类创建 Web 服务

要在您刚才创建的 Java 类的基础上创建 Web 服务,执行以下步骤:

1.

右键单击 GetDates 项目,并从上下文菜单中选择 New

?

2.

在 New Gallery 中,展开 Categories 列表中的 Business Tier 并选择 Web Services,然后从 Items 列表中选择 Java Web Service。单击 OK


3.

在 Select J2EE Web Service Version 对话框中选择 J2EE 1.4 (JAX-RPC) Web Service,然后单击 OK

4.

如果显示 Create Java J2EE 1.4 Web Service 对话框的 Welcome 页面,则单击 Next

在向导的 Class 页面中

  • 输入 GetDatesWS 作为 Web Service Name。
  • 从 Component To Publish 下拉列表中选择 datespackage.GetDates
  • 选中“ Generate annotations into class”复选框。
  • 单击 Next

5.

在向导的 Message Format 页面上,单击 Next

在向导的 Specify Custom DataType Serializers 页面上,单击 Next

在向导的 Mapping 页面上,单击 Next

在该向导的 Methods 页面上,从 Available Methods 列表中选择 check boxes next to both methods,然后单击 Finish

6.

如果在编辑器中还没有打开 Web 服务的 WSDL 文件,则打开它:在 Applications Navigator 中的 GetDates 项目下展开 Web ContentWEB-INF\wsdl,然后双击 GetDatesWS.wsdl

另一种打开 WSDL 的方法是在 Applications Navigator 中右键单击 GetDatesWS Web 服务,然后从上下文菜单中选择 Go to WSDL

7.

单击 WSDL 编辑器的 Source 选项卡。滚动至 WSDL 文件的底部,然后对在 soap:address 节点中定义的 URL 进行复制。该 URL 应当类似于:

http://138.3.51.14:8888/JavaWebService-GetDates-context-root/GetDatesWSSoapHttpPort

在编辑器中选择整个 URL,并按 [Ctrl]+[C] 将其复制到剪贴板。您将在稍后的步骤中使用该 URL。

8.

如果文件仍处于打开状态,则单击编辑器顶部的 GetDates.java 选项卡,或通过在 Applications Navigator 中双击它来重新打开 GetDates.java 文件。( JavaWebService > GetDates > A pplication Sources > datespackage > GetDates.java)。

请注意,由于您在上面所作的选择而生成的 Java 5 批注(以“ @”开始的行)。是否包含这些批注是可选的。

9. 单击 Save All Save All 按钮 保存您的工作。

返回主题列表

使用 WSDL 编辑器

还有另一种开发 Web 服务的方法,即约定驱动 (contract-driven) 或从上至下的开发。该方法可以对业务要求做出更快的响应,而不是仅通过使用 Web 服务包装现有系统以便从下至上地创建服务层。在 JDeveloper 中,从上至下的方法使用 WSDL 编辑器而不是向导来创建一个新的 WSDL 并生成所有类和服务产物。

您在本教程中将不使用合约驱动的开发。但您现在可以检查 WSDL 编辑器,以查看向导为您创建的元素以及所有元素是如何关联的。要使用 WSDL 编辑器,执行以下步骤:

1.

如果文件仍处于打开状态,则单击编辑器顶部的 GetDatesWS.wsdl 选项卡,或通过在 Applications Navigator 中双击它来重新打开 GetDatesWS.wsdl 文件。( JavaWebService > GetDates > Web Content > WEB-INF\wsdl > GetDatesWS.wsdl)

单击编辑器底部的 Design 选项卡查看可视化编辑器。

Services 列中,选择 GetDatesWSSoapHttpPort 节点。

观察 Bindings 和 Port Types 列的内容现在是如何高亮显示并连接起来的。

注:为了看到所有的连接,您可能需要从 JDeveloper 菜单中选择 View | Refresh。要使查看更简单,可以双击编辑器顶部的选项卡,最大化编辑器窗口。您可通过再次双击来恢复该窗口。

2.

Bindings 列中,选择 getDate 节点。

观察 getDate 绑定如何链接到 Port Types 列中的 getDate 操作。

注:为了看到所有的连接,您可能需要从 JDeveloper 菜单中选择 View | Refresh

3.

展开 getDateHence 绑定节点,并选择 input 节点。

观察 GetDatesWS_getDateHence 消息(在 Messages 下面)如何连接到 getDateHence 操作,getDateHence 操作(在 Port Types 下面)如何反过来连接到 getDateHence 绑定的输入节点。

注:为了看到所有的连接,您可能需要从 JDeveloper 菜单中选择 View | Refresh

返回主题列表

部署并测试 Web 服务

要部署和测试您创建的 Web 服务 ,执行以下步骤:

1.

在 Applications Navigator 中,展开 Resources 节点。右键单击 WebServices.deploy,并从上下文菜单中选择 Deploy to > oc4jconn
( 注:这假定您已经启动了 OC4J,并已经创建了一条到它的连接 — 如 前提条件中所说明的那样。)

在 Configure Application 对话框中,单击 OK

日志窗口将显示部署成功。

2.

打开浏览器并粘贴您从上面的 WSDL 文件(它是 OC4J 生成的 GetDatesWS 端点页面)中复制的 URL。

GetDatesWS 的终端页面将显示。注意包含两种方法(getDate 和 getDateHence)的链接的下拉列表。

单击 getDate


3.

该页面将显示一个可以指定方法参数的区域。因为该方法没有任何参数,所以只需单击 Invoke 按钮调用此 Web 服务的 getDate 方法。

4.

调用此 Web 服务后,该窗口将显示包含结果(即当天的日期和时间)的 SOAP 信封。它看起来类似于:
2006-08-23T18:14:00.713+01:00

5.

单击 Back 返回至 GetDatesWS 终端页面,然后选择 getDateHence

6.

GetDateHence 方法需要一个参数。

在为 daysHence 参数提供的框中,输入数字 5 以返回从现在起五天之后的日期。单击 Invoke

7.

调用此 Web 服务之后,Test Result 窗口显示从今天起五天之后的日期和时间。它看起来类似于:
2006-08-28T18:30:20.495+01:00

8.

用不同的值重新测试 GetDateHence 方法:

  • 单击 back 返回 getDatesHence 页面。
  • 在参数值域中,输入数字 365 以返回从现在起一年之后的日期。
  • 单击 Invoke
  • Test Result 页面包含的结果为从今天起一年之后的日期和时间。它看起来类似于:
    2007-08-23T18:32:38.248+01:00

保持浏览器打开,以在下一部分中继续使用。

返回主题列表

管理 Web 服务

要使用 Oracle Application Server Control 管理 Web 服务,执行以下步骤:

1.

在浏览器内使用相同的服务器和端口号输入 Application Server Control 的 URL:
http://:/em

显示 Application Server Control 登录屏幕。

输入用户名 oc4jadmin 和口令 welcome1(或最初启动 OC4J 时使用的任何口令),并单击 Login

2.

在主页上单击 Web Services 选项卡。


3.

单击 GetDatesWSSoapHttpPort 链接。

4.

您可以从服务端口主页上查看性能信息。您可以看到 Web 服务被调用的次数、故障数以及以毫秒为单位的平均响应时间。

单击 Operations 选项卡。

5.

在 Operations 选项卡上,您可以查看 getDate 和 getDateHence 操作的性能信息:

  1. 请求总数 (Total Requests)
  2. 故障总数 (Total Faults)
  3. 响应时间 (Response Time)
  4. 活动的请求 (Active Requests)
  5. 最高的并发请求 (Highest Concurrent Requests)

单击 Home 选项卡。

6.

单击 Test Service

7.

调用每一个 Web 服务操作几次(如您在 配置并测试 Web 服务主题中的测试步骤第 3-8 中所做的那样)。

现在返回至 Operations 页面。您将看到请求总数 (Total Requests) 已经随着每一操作的调用数而相应地增加。

8.

单击 Home 选项卡。您将看到 Invocations 值已经增加,以反映两个操作的调用总数。

9.

单击 Administration 选项卡,然后单击 Enable/Disable Features

10.

在 Enable/Disable Features 页面中,按住 Ctrl 键单击选择 Available Features 列表中的 TracingAuditing,然后单击 Move 将它们移到 Enabled Features 列表中。

单击 OK

11.

在 Administration 选项卡上,单击 Auditing 特性的 Edit Configuration

12.

默认为两个操作都提供了所有的审计特性。

取消 getDate 操作的 Request MessageResponse MessageFault Message 复选框的选中,保留 getDateHence 操作的这些复选框为选中状态。

单击 OK

.

13.

再次调用每一个 Web 服务操作几次(如您在 配置并测试 Web 服务主题中的测试步骤第 3-8 中所做的那样)。

使用 Windows Explorer 打开 \j2ee\home\log\wsmgmt\auditing\log.xml 文件。

14.

在该日志文件中,您可以看到 Web 服务操作的调用(屏幕截图显示启用了“换行”的 Notepad (Format > Word Wrap)):

  • 标题信息

  • 传递给 Web 服务的参数

  • Web 服务返回的值

请注意,您只能看到 getDateHence 操作的调用(正如您在审计选项中所指定的那样)。

当您检查完日志文件后,可以将其关闭。

虽然在本教程中您不会这么做,但您可以用 Web 服务的 Application Server Control 做的另一件事是为部署在 OC4J container 10.1.3 中的 JAX RPC Web 服务设置入站安全策略。您可以设置一些选项,如要求提供用于认证的用户名/口令、要求对消息正文进行签名、要求加密消息正文等。还可以从 JDeveloper 中定义和管理这些管理特性。

返回主题列表

监视 Web 服务(可选)

本主题将向您介绍当运行 Web 服务的代理时,如何使用 HTTP Analyzer 检查 JDeveloper 发送和接收的请求/响应包。当您启动 HTTP Analyzer 时,它将更新 JDeveloper 中的代理设置,以便所有的 TCP 数据都将通过一个中间端口发送,然后到达原始的代理(如果定义了的话)。当您关闭 HTTP Analyzer 或退出 JDeveloper 时,代理设置将还原。

要监视 Web 服务,执行以下步骤:

 创建一个 Web 服务代理
 使用 HTTP Analyzer

创建一个 Web 服务代理

1.

要使用 HTTP Analyzer,您需要创建一个 Web 服务代理,以便您可以从 JDeveloper 内运行服务。您必须在一个新的项目中创建 Web 服务代理。

在 Applications Navigator 中,右键单击 JavaWebService 应用程序,然后从上下文菜单中选择 New Project

New Gallery 将打开,并高亮显示 Empty Project — 只需单击 OK

2.

在 Create Project 对话框中,在 Project Name 域中输入 GetDatesWSProxy,然后单击 OK


3.

右键单击 GetDatesWSProxy 项目,并从上下文菜单中选择 New

在 New Gallery 中,展开 Business Tier 并选择 Categories 列表中的 Web Services,然后在 Items 列表中选择 Web Service Proxy 并单击 OK

4.

如果显示了 Create Web Service Proxy 向导的 Welcome 页面,则单击 Next

在向导的 Web Service Description 页面上,调用 WSDL Document URL 下拉列表并选择出现在工具提示中的 WSDL,它类似于如下所示(虽然在您的计算机上路径的开头部分将不同):

file:/D:/JDev10131/jdev/mywork/JavaWebService/GetDates/public_html/WEB-INF/wsdl/GetDatesWS.wsdl

[Tab] 键验证 WSDL,然后单击 Next

5.

在向导的 Port Endpoints 页面上,选择 Run against a service deployed to an external server 选项。选择出现在列表中的 Port Name and Endpoint URL,然后单击 Next

6.

单击接下来的两个向导页面(Custom Mappings 和 Defined Handlers)上的 Next

在该向导的 Default Mapping Options 页面上,将 Package Name 更改为 datespackageproxy,然后单击 Next

7.

单击向导的 Support Files 页面上的 Next

您将在 Finish 页面上看到列出了两个方法。单击 Finish

Web 服务代理创建过程生成了四个目录和许多文件,并在编辑器中打开了 datespackage.GetDatesWSSoapHttpPortClient.java(如果该文件没有自动打开,那么请在 Applications Navigator 中双击打开它)。

8.

在编辑器中的 main() 方法中找到以下注释行:

// Add your own code here :

在该行下添加以下代码:

int addDays = 5;
System.out.println("The date and time "
+ addDays + " days hence is:" + myPort.getDateHence(addDays));

单击 Make Make 按钮保存并编译文件。

9.

单击 Run Run 按钮运行该类。

消息日志将在一行上显示被调用的 URL。在下一行上,它将显示您的消息“The future date and time:”,消息后面显示作为 GregorianCalendar 对象的日期。

返回主题

使用 HTTP Analyzer

1.

通过选择 View > HTTP Analyzer 来显示 HTTP Analyzer 窗口。Http Analyzer 窗口将打开。默认情况下,它将停靠在 JDeveloper 的用户界面右下方。

通过单击 HTTP Analyzer 中的 Start Start 按钮开始监视数据包。

2.

重新运行类。请求/响应数据包将在 HTTP Analyzer 中列出。

3.

要查看一个数据包对中的内容,请在 History 页面中选中它,然后单击 Data 选项卡。数据页面将在请求信息(左侧面板)中显示发送给 Web 服务的值,并在响应信息(右侧面板)中显示 Web 服务返回的值。

如果您在 HTTP Analyzer 启动的情况下运行了其他操作,则您可以使用 Previous Request/Response Pair Previous Request/Response Pair 按钮和 Next Request/Response Pair Next Request/Response Pair 按钮来查看其他的数据包对。

4.

当调试 Web 服务时,您可以更改请求数据包的内容,并重新发送它,以查看响应数据包的变化。

要尝试这么做,可以在发送值 5 的请求数据包中将值改为 365。然后单击 Resend Request Resend request 按钮

5.

修改后的数据包已被发送。单击 Next Request/Response Pair Next Request/Response Pair,检查响应数据包查看变化。

6.

要关闭 HTTP Analyzer 窗口,单击 Http Analyzer 选项卡上的 x

返回主题

返回主题列表

总结

在本教程中,您将一个 Java 类发布为 Web 服务。您对其进行了部署和测试,然后使用 Application Server Control 管理该 Web 服务。您还为 Web 服务创建了一个 Web 服务代理,并使用 HTTP Analyzer 对其进行监视。

返回主题列表

相关信息

要了解有关如何使用 Web 服务的更多信息,请参考:

 OTN 网站上的 面向服务体系结构技术中心
 OTN 上的 Web 服务管理
 OTN 上的 Web 服务论坛
 OTN 上的 使用 JDeveloper 和 WS-Security 保护 Web 服务

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

Left Curve
热门下载
Right Curve
Left Curve
更多融合中间件下载
Right Curve