Oracle 技术网 (OTN) > 面向开发人员和数据库管理员的下载、讨论和文档
利用 JDeveloper 和 Oracle 应用服务器开发、配置和管理 Web 服务

利用 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)。

2.

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

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

3.

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

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

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

4.

在 JDeveloper 中创建到 OC4J 的连接:

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

返回主题列表

创建 Java 类

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

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

1.

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

 

2.

在 Create Application 对话框中,输入应用程序名 JavaWebService

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

单击 OK


3.

在 Create Project 对话框中,输入项目名称 GetDates,然后单击 OK

 

4.

在 Application 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 服务名。
  • 从 Component To Publish 下拉列表中选择 datespackage.GetDates
  • 选中“Generate annotations into class”复选框。
  • 单击 Next

 

5.

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

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

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

注意:如果收到一个无法加载接口 datespackage.GetDatesWS 的错误,则重复步骤 1-5。

 

6.

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

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

 

7.

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

 

8.

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

请注意,由于您在上面所作的选择而生成的 Java 5 批注(以 "@" 开始的行)。这些批注是可选的,并且可能与以下所示的批注不同。

 

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

返回主题列表

使用 WSDL 编辑器

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

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

1.

如果文件仍处于打开状态,则单击编辑器顶部的 GetDatesWS.wsdl 选项卡,或通过在 Application 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 消息如何连接到 getDateHence 操作,getDateHence 操作如何反过来连接到 getDateHence 绑定的输入节点。

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

返回主题列表

部署并测试 Web 服务

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

1.

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

在 Configure Application 对话框中,单击 OK

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

 

2.

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

GetDatesWS 的终端页面将显示。注意两种方法(getDate 和 getDateHence)的链接。

单击 getDate


3.

getDate 测试页面将显示一个可以指定方法参数的区域。因为该方法没有使用任何参数,所以只需单击 Preview SOAP

 

4.

Preview of Request 窗口显示了将要发送的 SOAP 请求。单击 Invoke 发送该请求并调用此 Web 服务的 getDate 方法。

 

5.

调用此 Web 服务后,该窗口的底部将显示包含结果(即当天的日期和时间)的 SOAP 信封。它看起来类似于:
2005-11-15T16:51:26.566-07:00

 

6.

单击 Back 两次返回至 GetDatesWS 终端页面,然后点击 getDateHence

 

7.

GetDateHence 方法需要一个参数。

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

 

8.

该预览显示将作为 daysHence 参数传递的值 5。单击 Invoke

调用此 Web 服务后,该窗口的底部将显示包含结果(即从今天起五天之后的日期和时间)的 SOAP 信封。它看起来类似于:
2005-11-20T17:01:21.682-07:00

 

9.

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

  • 单击 back 返回 getDatesHence 页面。
  • 在参数值域中,输入数字 365 以返回从现在起一年之后的日期。
  • 单击 Preview SOAP
  • 单击 Invoke
  • 生成的 SOAP 信封包含的结果为从今天起一年之后的日期和时间。它看起来类似于:
    2006-11-15T17:04:57.282-07: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 列表中的 LoggingAuditing,然后单击 Move,把它们移动到 Enabled Features 列表中。

单击 OK

 

11.

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

 

12.

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

取消 getDate 操作的 Request MessagesResponse MessagesFault Messages 复选框的选中,保留 getDateHence 操作的这些复选框为选中状态。

单击 OK

.

13.

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

使用 Windows Explorer 打开并编辑 <JDEV_HOME>\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 服务代理

1.

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

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

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

 

2.

在 Create Project 对话框中,输入项目名称 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:/C:/JDeveloper/jdevstudio1013/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 页面上,将程序包名称更改为 datespackageproxy,然后单击 Next

 

7.

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

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

此 Web 服务代理生成过程创建了四个目录和大量文件,并在编辑器中打开 datespackage.GetDatesWSSoapHttpPortClient.java(如果该文件未自动打开,在 Application 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 选项卡。

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

 

4.

数据页面将在请求信息(左侧面板)中显示发送给 web 服务的值,并在响应信息(右侧面板)中显示 web 服务返回的值。

 

5.

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

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

 

6.

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

 

7.

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

返回主题

返回主题列表

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

返回主题列表

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

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

 

 

 

寄送此页面
打印机视图 打印机视图