使用 JDeveloper 开发约定驱动的 Web 服务

使用 JDeveloper 开发约定驱动的 Web 服务

在本教程中,您将通过一种从上至下的方法使用 JDeveloper 开发一个 Java web 服务。

大约 30 分钟

主题

本教程包括下列主题:

创建 WSDL 约定文档

测试 WSDL 是否符合 WS-I

从 WSDL 约定文档生成 Web 服务
测试 Web 服务

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

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

概述

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

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

JDeveloper 提供了许多特性来帮助您创建和部署 web 服务,并找到现有的 web 服务,以在您的应用程序中使用。

从上至下的 web 服务开发范式意味着您将从 WSDL 着手,使用 WSDL 中的类型和操作定义生成所有的类和服务。这种方法要比从下至上的方法复杂,后者允许将现有的系统包装为 web 服务。但是,从下至上进行开发就是最好的方法吗?许多专家认为 SOA 是一种业务驱动的体系结构样式,若要构建成功,必须使用从上至下的方法。

本教程将使用 JDeveloper 的工具来进行端到端的约定驱动的开发,包括 WSDL 编辑、从上至下的 web 服务生成、遵从 Web 服务互操作性 (WS-I) 以及客户端的创建和测试。

返回主题列表

前提条件

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

1.

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

2.

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

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

返回主题列表

创建 WSDL 约定文档

要创建 WSDL 约定文档,执行以下步骤:

将模式与 WSDL 文档关联

1.

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

 

2.

在 Create Application 对话框中,输入 TopDownContractDevelopment 作为应用程序名,并选择 No Template 选项。单击 OK


3.

在 Create Project 对话框中,在 Project Name 中输入 WSDLDocument 并单击 OK

 

4.

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

 

5.

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

 

6.

在 Create WSDL Document 对话框中,输入 CreditRating 作为 WSDL Name,然后单击 OK

WSDL 文档创建完毕并在编辑器中打开。

 

7.

现在可以向该 WSDL 定义开始添加所需项了。为此,您可以使用 JDeveloper 窗口左下方的 Structure 窗口,并可修改代码编辑器的 Source 选项卡中的默认创建项。

在 Structure 窗口中,单击 Design 选项卡。

 

8.

右键单击 Types 并从上下文菜单中选择 Insert Types

 

9.

右键单击 types 并从上下文菜单中选择 Insert inside types > http://www.w3.org/2001/XMLSchema...

 

10.

在 Insert 对话框中,选择 <> schema 并单击 OK

 

11.

在编辑器中,单击 Source 选项卡并将以下行:

更改为:

xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"/>

注意:有关 schema 元素的信息,请参阅 W3C 建议。有关声明命名空间的描述,请参阅 XML 中的命名空间。以上文档均来自万维网联盟 (W3C)。

 

12.

接下来,将元素添加到该模式。在 Structure 窗口中,右键单击 schema 并从上下文菜单中选择 Insert inside schema > element

元素类似于变量,对于 web 服务而言是全局性的。

 

13.

在 Insert element 对话框中,输入名称 ssn

单击 Advanced Properties 选项卡,输入类型 string,然后单击 OK

 

14.

以类似的方式,右键单击 Structure 窗口中 schema 添加以下两个元素:

元素名称 类型
rating int
error string

您可以看到源代码反映了这些元素的添加。

 

15.

在编辑器中,单击 Source 选项卡。将以下属性添加到文件开头的 标记中:

xmlns:types="http://CreditRating.xsd"

该标记应如下所示:

xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="urn:CreditRating"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:types="http://CreditRating.xsd">

返回主题

定义服务接口

现在,添加 WSDL 的抽象元素或可重用元素。所有的开发人员都会在此阶段进行的操作,以允许其他人使用 WSDL 生成他们必须通过编码获得的基础 Java 实施类。

通过指定以下项来定义服务接口:

  • Messages:XML 数据类型,是操作的 in/out 参数
  • PortType:等同于方法签名,包括操作及其使用的消息(参数)
  • Bindings:PortType 于特定协议以及数据格式之间的关联

在本例中,将为该服务定义一个操作来获取贷款申请人的信用评价。要定义服务接口,执行以下步骤:

1.

首先,添加三个消息。

在编辑器窗口中,单击 CreditRating.wsdl 的 Design 选项卡,然后单击 Switch View 使 Messages 元素位于最左侧的位置。该步骤并非必要,但这样做有助于您更容易查看最先创建的内容。

 

2.

在 Structure 窗口中,选择 Design 选项卡。

右键单击 Messages 并从上下文菜单中选择 Insert Message


3.

在 New Message 对话框中,输入 CreditRatingRequestMessage 作为 Message Name,然后单击 OK

 

4.

在 Structure 窗口中,右键单击 message - CreditRatingRequestMessage 并选择 Insert Inside Message > http://schemas.xmlsoap.org/wsdl/ > part

 

5.

在 New Part 对话框中,输入 ssn 作为 Part Name 以及 types:ssn 作为 Part Type。

 

6.

按步骤 2 - 5 中所述以同样的方式添加以下消息及其相应的部分:

iaoxi
消息名称 部分名称 部分类型
CreditRatingResponseMessage rating types:rating
CreditRatingFaultMessage error types:error

添加消息完后,可单击 Structure 窗口中的任一元素,或单击编辑器的 Design 选项卡,您就能够在 Property Inspector 中查看并修改其值了。

 

7.

现在,定义等同于方法签名的 PortType(服务接口),它指定操作及其使用的消息(参数)。

在 Structure 窗口中,右键单击 PortTypes 并选择 Insert portType

 

8.

在 New Port Type 对话框中,输入 CreditRating 作为 Port Type Name,然后单击 OK

 

9.

在 Structure 窗口或编辑器中,右键单击 CreditRating portType 并选择 Insert inside portType - Credit Rating > operation

 

10.

在 New Operation 对话框中,输入 processCreditRating 作为 Operation Name。

Operation Type 应为 Request Response

从 Input 下拉列表中,选择 tns:CreditRatingRequestMessage,这是先前定义的消息之一。

从 Output 下拉列表中,选择 tns:CreditRatingResponseMessage,这是先前定义的另一个消息。

选择 Add Fault

输入 NegativeCredit 作为 Fault Name。

从 Fault 下拉列表中,选择 tns:CreditRatingFaultMessage,这是先前定义的第三个消息。

单击 OK

 

11.

在 WSDL 编辑器中展开 CreditRating Port Type,查看这些消息是如何与操作关联的。单击该操作的不同组件,查看与之关联的消息。

请注意,请求消息与流程的输入相关联,响应消息与流程的输出相关联,而错误消息与名为 NegativeCredit 的错误相关联。

 

12.

创建服务接口的最后部分是定义绑定。将 Port Type 绑定至特定的协议 (HTTP) 和数据格式 (SOAP)。

在 Structure 窗口中,右键单击 Bindings 并从上下文菜单中选择 Insert binding

 

13.

在 New Binding 对话框中,输入 CreditRatingSoapHttp 作为 Binding Name。

保留其他所有域的默认值。Port Type 的默认值就是您创建的 Port Type。

单击 OK

 

14.

在设计编辑器中,展开刚创建的绑定查看详情。

请注意,在单击任何元素时,编辑器的 Design 选项卡将显示它与其他元素的关系。

 

15.

在编辑器中,单击 Source 选项卡。

滚动至文件末尾的 NegativeCredit 错误定义。将以下行:

更改为:

fault use="literal" name="NegativeCredit"/>

返回主题

定义服务实施

创建 WSDL 文档的最后一步是创建服务实施定义。该定义包括指定特定实施人员打算实施的绑定的端口和服务将要在其中运行的服务器。

要定义服务实施,执行以下步骤:

1.

在 Structure 窗口的 Design 选项卡中,右键单击 Services 并从上下文菜单中选择 Insert service

 

2.

在 Insert Service 对话框中,输入名称 CreditRatingService,然后单击 OK


3.

在 Structure 窗口中,右键单击 service - CreditRatingService,然后从上下文菜单中选择 Insert inside service > http://schemas.xmlsoap.org/wsdl/ > port

 

4.

在 New Port 对话框中,输入 CreditRatingServiceSoapHttpPort 作为 Port Name。Binding Name 默认值为刚创建的绑定。单击 OK

 

5.

在 Structure 窗口中,右键单击 port - CreditRatingServiceSoapHttpPort,然后从上下文菜单中选择 Insert inside port > soap:address

 

6.

在 Insert Address 对话框中,输入任意字符串,如 tbd,因为这对于本阶段指定运行完成服务的地方而言并非必要。单击 OK

 

7.

在 Application Navigator 中,右键单击 CreditRating.wsdl 并从上下文菜单中选择 Validate WSDL

通过日志窗口中的 Message 选项卡可获知是否存在错诶,而 Structure 窗口中的 Source 选项卡可以给出详细的错误信息。

 

8.

在 WSDL 编辑器中,单击 Source 选项卡,然后在代码中右键单击并从上下文菜单中选择 Reformat,整理 XML 布局。

 

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

返回主题

返回主题列表

WS-I Basic Profile 使您能够测试服务的合规性,以确保不同 web 服务系统间的互操作性。Web 服务互操作性组织 (http://www.ws-i.org) 致力于推进跨平台、操作系统以及编程语言的 web 服务互操作。支持 WS-I Basic Profile 是实现 web 服务互操作的基本要求。

要确保 WSDL 的合规性,执行以下步骤:

1.

该处下载 Basic Profile 测试工具。要下载的文件是一个 Java 链接,位于标题 Interoperability Testing Tools 1.1 之下。

下载完成后,将该文件解压缩到硬盘。

 

2.

在 JDeveloper 中,从菜单中选择 Tools > Preferences

在 Preferences 对话框中,从左侧的树中选择 WS-I Testing Tools

在右侧,单击 Browse 并导航至解压缩下载文件的位置。选定该位置并单击 Select

选择 Specify Test Assertions Document

单击 Browse 并导航至解压缩下载文件处的 \common\profiles 子目录,选择 BasicProfile_1.1_TAD.xml 文件并单击 Open

单击 OK


3.

在 Application Navigator 中,右键单击 CreditRating.wsdl 并从上下文菜单中选择 WS-I Analyze WSDL

 

4.

在 WS-I Analyze Web Service 向导中,单击 Welcome 页面中的 Next,然后接受默认值并单击 Validate WSDL 页面上的 Finish

WS-I 报告出现在编辑器中。

 

5.

wsi-report.html 的编辑器中,下滚至 Summary 部分。其中应显示了 WSDL 通过测试。

返回主题列表

从 WSDL 约定文档生成 Web 服务

要生成 Web 服务,执行以下步骤:

1.

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

在 New Gallery 中,从 Items 列表中选择 Empty Project 并单击 OK

 

2.

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


3.

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

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

 

4.

单击 Create J2EE 1.4 Java Web Service from WSDL 向导中 Welcome 页面上的 Next

在该向导的 Web Service Description 页面上,从 WSDL Document URL 下拉列表中选择刚创建的 CreditRating.wsdl,它会填充在 Service Name。单击 Next

 

5.

在该向导的 Default Mapping 选项中,可以单击 Next 逐页浏览所有选项。然而,因为接受所有默认值,所以可以只是单击 Finish

现在,您具有了一个完整的 web 服务以及所有的 JAX-RPC 文件,可以部署和运行服务了。

 

6.

在 Application Navigator 中,展开 Service 下的 Application Sourcesservice 程序包。

请注意,JDeveloper 已经创建了一个新的服务 CreditRatingService。在 Application Navigator 中选择 CreditRatingService 查看显示在 Structure 窗口中的其他关联文件。

 

7.

CreditRatingService.wsdl 文件在编辑器中打开。单击 Design 选项卡。在 Services 下,展开 CreditRatingServiceCreditRatingServiceSoapHttpPort

选择 soap:address 并查看其 Property Inspector。您可以看到,指定为 tbd 的位置现已默认为本地计算机。这将根据您实际部署服务的位置而变。该 soap address 或 endpoint 是 web 服务在网络上的位置 (URI)。

默认情况下,JDeveloper 通过使用端口 8888 的终端创建 WSDL,因为这是外部服务器默认情况下使用的端口。由于要使用嵌入式(非外部)OC4J 测试 web 服务,因此应将默认端口号更改为嵌入式 OC4J 服务器使用的端口号。要查看端口,可调用 Tools > Embedded OC4J Server Preferences,然后单击左侧树中的 Startup。嵌入式服务器的端口号显示在 HTTP 域中。一旦接受该端口号,就可以离开 preferences 窗口了。

如果 WSDL 中的 soap:address 与嵌入式 OC4J 端口的不同,则将其更改为正确的端口号。

 

8.

在 Application Navigator 中选择 CreditRatingService,在 Structure 窗口中双击 CreditRatingImpl.java 将其在编辑器中打开。请注意,它将 String 当作了参数,该参数的名称是 ssn,即先前创建的 Message 参数的名称。

您需要添加实际的方法实施。将

return 0;

替换为:

int id;
try
{
// Parses integer value of first 3 numbers form SSN
id = Integer.parseInt(ssn.substring(0,3));
}
catch(NumberFormatException e)
{
// if SSN is invalid returns -1
return -1;
}
if(id < 300)
{
// If value of the first 3 numbers from customer SSN is less
// than 300, credit rate is 1.
return 1;
}
else if(id < 600)
{
// If value less than 600, credit rate is 2.
return 2;
}
else if(id <900)
{
// If value less than 900, credit rate is 3.
return 3;
}
else
{
// Otherwise, credit rate is 0.
return 0;
}

 

9.

您还需要确保 CreditRatingImpl.java 正确实施了终端接口 CreditRating.java

在该接口中,processCreditRating() 方法抛出了一个 CreditRatingFaultMessage 异常,因此,processCreditRating() 方法(位于 CreditRatingImpl.java 中)也抛出了一个 CreditRatingFaultMessage 异常。如果情况并非如此,则将以下代码添加到 CreditRatingImpl.javaprocessCreditRating() 方法签名中:

throws CreditRatingFaultMessage

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

 

10.

在 Application Navigator 中,右键单击 CreditRatingService,然后从上下文菜单中选择 Run。这会将该 web 服务部署到 JDeveloper 的嵌入式 OC4J 服务器中。您应该会在日志窗口中看到一个消息,表明该 web 服务已启动。

返回主题列表

测试 Web 服务

现在,创建一个客户端,调用该 web 服务,对其进行测试。要测试该 Web 服务,执行以下步骤:

1.

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

在 New Gallery 中,从 Items 列表中选择 Empty Project 并单击 OK

 

2.

在 Create Project 对话框中,输入 Client 作为 Project Name,然后单击 OK


3.

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

在 New Gallery 中,展开 Categories 列表中的 Business Tier 并选择 Web Services,然后从 Items 列表中选择 Web Service Proxy。 这将使用该 web 服务的 WSDL 生成一个客户端代理,与该 web 服务相同,该代理具有所有公共可用数据接口。然后,客户端应用程序可以使用该代理对象访问该 web 服务。

单击 OK

 

4.

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

在该向导的 Web Service Description 页面上,从下拉列表中选择 CreditRatingService.wsdl。选择该文件填充其他域。

可以根据需要单击 Next 逐页浏览。然而,要接受所有默认值,只需单击 Finish 即可。

创建了文件 CreditRatingServiceSoapHttpPortClient.java,并自动将其在编辑器窗口中打开。

 

5.

您需要添加代码调用该 web 服务。在代码编辑器中的以下行后:

// Add your own code here

添加下列代码:

int rating = myPort.processCreditRating("78964022");
System.out.println("Credit Rating is " + rating);

 

6.

单击 Run Run 按钮。该 web 服务向日志窗口返回其结果。

返回主题列表

在本教程中,您通过从上至下的方法使用 JDeveloper 的 WSDL 编辑器开发了一个 web 服务。您测试了创建的 WSDL 的 WS-I 相符性,并通过创建并运行一个 web 服务客户端代理对该 web 服务进行了测试。

返回主题列表

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

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

 

 

 

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