在本教程中,您将利用 JDeveloper 来创建和部署 Java Web 服务,并使用 Application Server Control 来管理它。
所需时间
大约 30 分钟
本教程包括下列主题:
概述 | |
情景 | |
前提条件 | |
创建 Java 类 | |
使用 WSDL 编辑器 | |
部署并测试 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 的连接:
|
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 对话框中输入:
单击 OK。
新的 Java 类创建成功,并显示在编辑器中。 |
7. |
在编辑器中创建一个方法 getDate(),该方法使用 java.util.Calendar 返回日期和时间。 public Calendar getDate()
|
8. |
由于此代码引用一个对该程序包不可用的类,因此系统提示您导入该类。按 [Alt]+[Enter] 导入建议的类 java.util.Calendar。
|
9. |
在编辑器中创建第二个方法 getDateHence(),该方法使用 java.util.GregorianCalendar 在今天的日期上加上用户定义的天数(利用 int 参数 daysHence 来指定)。在 getDate() 方法下添加以下代码,当提示导入 java.util.GregorianCalendar 时按 [Alt]+[Enter]:
|
10. |
单击 Make 编译该类。日志应显示编译成功。
|
要在您刚才创建的 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 页面中
|
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 Content 和 WEB-INF\wsdl,然后双击 GetDatesWS.wsdl。 另一种打开 WSDL 的方法是在 Applications Navigator 中右键单击 GetDatesWS Web 服务,然后从上下文菜单中选择 Go to WSDL。
|
7. |
单击 WSDL 编辑器的 Source 选项卡。滚动至 WSDL 文件的底部,然后对在 soap:address 节点中定义的 URL 进行复制。该 URL 应当类似于:
在编辑器中选择整个 URL,并按 [Ctrl]+[C] 将其复制到剪贴板。您将在稍后的步骤中使用该 URL。
|
8. |
如果文件仍处于打开状态,则单击编辑器顶部的 GetDates.java 选项卡,或通过在 Applications Navigator 中双击它来重新打开 GetDates.java 文件。( JavaWebService > GetDates > A pplication Sources > datespackage > GetDates.java)。 请注意,由于您在上面所作的选择而生成的 Java 5 批注(以“ @”开始的行)。是否包含这些批注是可选的。
|
9. | 单击 Save All 保存您的工作。 |
还有另一种开发 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。 |
1. |
在 Applications Navigator 中,展开
Resources 节点。右键单击
WebServices.deploy,并从上下文菜单中选择
Deploy to >
oc4jconn。
在 Configure Application 对话框中,单击 OK。 日志窗口将显示部署成功。
|
2. |
打开浏览器并粘贴您从上面的 WSDL 文件(它是 OC4J 生成的 GetDatesWS 端点页面)中复制的 URL。 GetDatesWS 的终端页面将显示。注意包含两种方法(getDate 和 getDateHence)的链接的下拉列表。 单击 getDate。
|
3. |
该页面将显示一个可以指定方法参数的区域。因为该方法没有任何参数,所以只需单击 Invoke 按钮调用此 Web 服务的 getDate 方法。
|
4. |
调用此 Web 服务后,该窗口将显示包含结果(即当天的日期和时间)的 SOAP 信封。它看起来类似于:
|
5. |
单击 Back 返回至 GetDatesWS 终端页面,然后选择 getDateHence。
|
6. |
GetDateHence 方法需要一个参数。 在为 daysHence 参数提供的框中,输入数字 5 以返回从现在起五天之后的日期。单击 Invoke。
|
7. |
调用此 Web 服务之后,Test Result 窗口显示从今天起五天之后的日期和时间。它看起来类似于:
|
8. |
用不同的值重新测试 GetDateHence 方法:
保持浏览器打开,以在下一部分中继续使用。 |
要使用 Oracle Application Server Control 管理 Web 服务,执行以下步骤:
1. |
在浏览器内使用相同的服务器和端口号输入 Application Server Control 的 URL:
显示 Application Server Control 登录屏幕。 输入用户名 oc4jadmin 和口令 welcome1(或最初启动 OC4J 时使用的任何口令),并单击 Login。
|
2. |
在主页上单击 Web Services 选项卡。
|
3. |
单击 GetDatesWSSoapHttpPort 链接。
|
4. |
您可以从服务端口主页上查看性能信息。您可以看到 Web 服务被调用的次数、故障数以及以毫秒为单位的平均响应时间。 单击 Operations 选项卡。
|
5. |
在 Operations 选项卡上,您可以查看 getDate 和 getDateHence 操作的性能信息:
单击 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 列表中的 Tracing 和 Auditing,然后单击 Move 将它们移到 Enabled Features 列表中。
单击 OK。 |
11. |
在 Administration 选项卡上,单击 Auditing 特性的 Edit Configuration。
|
12. |
默认为两个操作都提供了所有的审计特性。 取消 getDate 操作的 Request Message、 Response Message 和 Fault Message 复选框的选中,保留 getDateHence 操作的这些复选框为选中状态。 单击 OK。
. |
13. |
再次调用每一个 Web 服务操作几次(如您在 配置并测试 Web 服务主题中的测试步骤第 3-8 中所做的那样)。 使用 Windows Explorer 打开 \j2ee\home\log\wsmgmt\auditing\log.xml 文件。
|
14. |
在该日志文件中,您可以看到 Web 服务操作的调用(屏幕截图显示启用了“换行”的 Notepad (Format > Word Wrap)):
请注意,您只能看到 getDateHence 操作的调用(正如您在审计选项中所指定的那样)。 当您检查完日志文件后,可以将其关闭。 虽然在本教程中您不会这么做,但您可以用 Web 服务的 Application Server Control 做的另一件事是为部署在 OC4J container 10.1.3 中的 JAX RPC Web 服务设置入站安全策略。您可以设置一些选项,如要求提供用于认证的用户名/口令、要求对消息正文进行签名、要求加密消息正文等。还可以从 JDeveloper 中定义和管理这些管理特性。 |
本主题将向您介绍当运行 Web 服务的代理时,如何使用 HTTP Analyzer 检查 JDeveloper 发送和接收的请求/响应包。当您启动 HTTP Analyzer 时,它将更新 JDeveloper 中的代理设置,以便所有的 TCP 数据都将通过一个中间端口发送,然后到达原始的代理(如果定义了的话)。当您关闭 HTTP Analyzer 或退出 JDeveloper 时,代理设置将还原。
要监视 Web 服务,执行以下步骤:
创建一个 Web 服务代理 | ||
使用 HTTP Analyzer |
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() 方法中找到以下注释行:
在该行下添加以下代码:
单击 Make 保存并编译文件。 |
9. |
单击 Run 运行该类。 消息日志将在一行上显示被调用的 URL。在下一行上,它将显示您的消息“The future date and time:”,消息后面显示作为 GregorianCalendar 对象的日期。
|
1. |
通过选择 View > HTTP Analyzer 来显示 HTTP Analyzer 窗口。Http Analyzer 窗口将打开。默认情况下,它将停靠在 JDeveloper 的用户界面右下方。 通过单击 HTTP Analyzer 中的 Start 开始监视数据包。
|
2. |
重新运行类。请求/响应数据包将在 HTTP Analyzer 中列出。
|
3. |
要查看一个数据包对中的内容,请在 History 页面中选中它,然后单击 Data 选项卡。数据页面将在请求信息(左侧面板)中显示发送给 Web 服务的值,并在响应信息(右侧面板)中显示 Web 服务返回的值。
如果您在 HTTP Analyzer 启动的情况下运行了其他操作,则您可以使用 Previous Request/Response Pair 和 Next Request/Response Pair 来查看其他的数据包对。 |
4. |
当调试 Web 服务时,您可以更改请求数据包的内容,并重新发送它,以查看响应数据包的变化。 要尝试这么做,可以在发送值 5 的请求数据包中将值改为 365。然后单击 Resend Request 。
|
5. |
修改后的数据包已被发送。单击 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 服务 |
热门下载 | ||
更多融合中间件下载 | ||