理论教育 Web服务模型实例:创建、发布与验证

Web服务模型实例:创建、发布与验证

时间:2023-05-19 理论教育 版权反馈
【摘要】:图3-324 选择引用的EJB项目图3-325 创建后的效果20)通过开发组件的菜单进行编译并部署EAR工程,将创建的Web Service发布到服务器。22)在搜索条件中输入“PerInfo”,单击“Go”按钮,如图3-328所示,搜索创建的Web服务。23)已成功找到对应的Web服务,证明部署成功,如图3-329所示。图3-333 运行效果通过上面的验证,说明Web服务已经正确创建并发布至服务器。

Web服务模型实例:创建、发布与验证

1.Web服务的定义与测试

关于Web服务(Web Service)的概念这里不再赘述。下面通过EJB创建一个简单的Web服务。对于NetWeaver平台(或者说是Web Dynpro For Java对应的J2EE应用服务器)而言,所有的应用程序都是通过打包为EAR的文件进行部署的。所以,WebService服务创建包括创建EJB工程、创建EAR工程、配置Web服务等几个步骤。

开发实例:

1)首先创建一个测试用的Web服务,在NWDS中单击右上角的视图切换按钮,切换到DI视图(Development Infratructure perspective)。

2)右击“MyComponents”自定义的SC目录(黄色结点),选择创建一个“Develop⁃ment Component”,如图3-308所示。

978-7-111-58177-2-Chapter03-332.jpg

图3-307

978-7-111-58177-2-Chapter03-333.jpg

图3-308 创建开发组件

3)在弹出的窗口中选择对应的EJB类型,单击“Next”按钮,如图3-309所示。

4)输入自定义DC的名称,单击“Next”按钮,如图3-310所示。

978-7-111-58177-2-Chapter03-334.jpg

图3-309 选择项目类型

978-7-111-58177-2-Chapter03-335.jpg

图3-310 输入项目信息

5)根据实际需求,选择正确的Java EE版本(见图3-311),单击“Finish”按钮。

6)创建完成后,进入Java EE视图,右击EJB工程,选择创建一个“Session Bean”,如图3-312所示。

7)按照命名规范输入自定义的包名和类名(见图3-313),单击“Finish”按钮,完成EJB创建。

978-7-111-58177-2-Chapter03-336.jpg

图3-311 确认编译版本

978-7-111-58177-2-Chapter03-337.jpg

图3-312 创建EJB的菜单选择

8)创建完毕后,可以看到开发工具自动为EJB工程生成了一个空的类并实现了一个接口类,如图3-314所示。

9)创建一个自定义方法,本例直接返回一个字符串进行测试,加入下列代码,见图3-315:

return"李明";

10)打开本地接口类的Java编辑器,添加方法的声明,见图3-316:

public String getPerName(String perId);

978-7-111-58177-2-Chapter03-338.jpg

图3-313 输入项目信息

978-7-111-58177-2-Chapter03-339.jpg

图3-314 自动生成的类

978-7-111-58177-2-Chapter03-340.jpg

图3-315 添加代码1

978-7-111-58177-2-Chapter03-341.jpg

图3-316 添加代码2

至此,一个简单的EJB创建完毕。创建一个PerInfoWs的EJB,该EJB包含对个人信息的操作,同时只添加了一个返回个人姓名的方法。

11)接下来,基于该EJB创建对应的Web Service。再次定位刚刚建立的Session Bean,右击工程,在弹出的快捷菜单中选择“Web Services”→“Create Web Service”,创建一个Web Service,如图3-317所示。

978-7-111-58177-2-Chapter03-342.jpg

图3-317 创建Web服务的菜单选择

12)在弹出的对话框中,将配置级别的滑块选择“Develop Service”开发级别服务,单击“Next”按钮,如图3-318所示。

978-7-111-58177-2-Chapter03-343.jpg

图3-318 配置Web服务属性

13)由于创建Web服务需要指定接口,因此单击浏览按钮进行选择,如图3-319所示。

14)选择之前在代码中实现并声明的接口方法,单击“OK”按钮,如图3-320所示。

978-7-111-58177-2-Chapter03-344.jpg

图3-319 选择接口

978-7-111-58177-2-Chapter03-345.jpg

图3-320 选择接口方法

后面的步骤均使用默认选项直至创建完毕。

15)再次进入DI视图,创建一个EAR工程,用于依赖EJB工程并部署至服务器端。选择新建类型为“Enterprise Application”,如图3-321所示,单击“Next”按钮。

978-7-111-58177-2-Chapter03-346.jpg

图3-321 选择项目类型

16)根据实际的命名规范,输入自定义ear名称(见图3-322),单击“Next”按钮。

978-7-111-58177-2-Chapter03-347.jpg

图3-322 输入项目信息

17)根据实际需求,选择对应的Java EE版本,如图3-323所示,单击“Next”按钮。

978-7-111-58177-2-Chapter03-348.jpg

图3-323 选择对应的编译版本

18)选中对应引用的EJB工程(见图3-324),单击“Finish”按钮。

19)保存所有修改,完成两个工程的创建,如图3-325所示。

978-7-111-58177-2-Chapter03-349.jpg

图3-324 选择引用的EJB项目

978-7-111-58177-2-Chapter03-350.jpg

图3-325 创建后的效果

20)通过开发组件的菜单进行编译并部署EAR工程,将创建的Web Service发布到服务器。右击EAR工程名,选择“Development Component”→“Build”进行编译,编译完成后在同一菜单中选择“Deploy”进行部署,如图3-326所示。

21)下面验证一下Web服务是否部署成功。用管理员账号登录服务器NWA管理页面,并进入“NWA”→“Configuration”→“Connectivity”→“Single Service Administration”,如图3-327所示。

22)在搜索条件中输入“∗PerInfo∗”,单击“Go”按钮,如图3-328所示,搜索创建的Web服务。

23)已成功找到对应的Web服务,证明部署成功,如图3-329所示。

978-7-111-58177-2-Chapter03-351.jpg

图3-326 部署应用的菜单选择

978-7-111-58177-2-Chapter03-352.jpg

图3-327 NWA平台中的独立服务管理

978-7-111-58177-2-Chapter03-353.jpg

图3-328 搜索对应服务

978-7-111-58177-2-Chapter03-354.jpg

图3-329 搜索服务结果

24)在下面的WSDLs中,可以看到Web服务对应的WSDL地址,单击“Test”按钮对功能进行测试,如图3-330所示。

978-7-111-58177-2-Chapter03-355.jpg

图3-330 获取WSDL信息

25)在测试向导中选择需要测试的方法,选择自定义创建的“getPerName”方法(见图3-331),单击“下一步”按钮。

26)由于方法不需要输入参数(见图3-332),因此直接单击“Next”按钮即可。

978-7-111-58177-2-Chapter03-356.jpg

图3-331 测试对应服务

978-7-111-58177-2-Chapter03-357.jpg

图3-332 输入参数值

27)运行结果右侧显示了服务正确返回的执行结果,功能测试完毕,如图3-333所示。

978-7-111-58177-2-Chapter03-358.jpg

图3-333 运行效果

通过上面的验证,说明Web服务已经正确创建并发布至服务器。

其实创建Web服务的方式有很多,对Java来讲就有很多,更何况延伸至不同的平台都有对应的发布Web服务的方式。这里介绍的是通过NWDS提供的Web服务的创建向导快速创建Web服务的方法,并且服务端也有针对发布、测试、配置的一整套环境,使得Web服务的使用更加地灵活和方便。

2.Web Dynpro与Web服务

上一节通过NWDS创建了一个简单的Web服务,下面通过一个开发实例重点介绍如何在Web Dynpro中通过模型的创建和配置进行Web服务的调用。

开发实例:

1)使用现有的Web Dynpro工程,或重新创建一个简单工程,如图3-334所示。本例以之前创建的mydynp03为例。

2)右击“Models”,在弹出的快捷菜单中选择“Create Model”,如图3-335所示。

3)在弹出的窗口中选择对应的模型类型,这里选择第二项“Adaptive Web Service Mod⁃el”,单击“Next”按钮,如图3-336所示。

978-7-111-58177-2-Chapter03-359.jpg

图3-334 原Web Dynpro项目目录

978-7-111-58177-2-Chapter03-360.jpg

图3-335 创建模型的菜单选择

978-7-111-58177-2-Chapter03-361.jpg

图3-336 选择模型类型

4)输入自定义模型名称,选中“Remote Location/File System”单选按钮作为WSDL描述文件的源文件,单击“Next”按钮,如图3-337所示。

978-7-111-58177-2-Chapter03-362.jpg

图3-337 输入模型信息

5)输入创建的Web服务对应的WSDL地址(在Service Definitions中下方的“WSDLS”页签中可以看到),粘贴的同时开发工具会立即对服务做连通性测试。测试成功后,单击“Next”按钮,如图3-338所示。

978-7-111-58177-2-Chapter03-363.jpg

图3-338 输入服务地址

6)接着进行运行时间相关配置,选中“No service group configuration”单选按钮,不需要配置服务组,单击“Next”按钮,如图3-339所示。

978-7-111-58177-2-Chapter03-364.jpg

图3-339 确认服务配置

7)输入逻辑目的地名称,输入“MT_WS_PERINFO_DEST”(常用的命名规范为系统名+服务类型标识+服务标识+目的地,根据实际系统配置进行填写),单击“Next”按钮。此处MT默认为系统名,服务类型为Web Service,服务标识或描述为PERINFO,并且Meta⁃data与Execution采用同一个目的,如图3-340所示。

978-7-111-58177-2-Chapter03-365.jpg

图3-340 配置目的

如果仅采用URL做为源数据的目的地去执行,当服务的地址或端口变化后,则需要重新导入模型来更新实际开发时的URL远程访问地址。然而实际上对于正在运行的系统来讲,通过修改程序的方式去应对服务端接口的变化显然是不合理的,一方面是带来了较大的维护开发量,另外一方面如果在用户使用中去重新布署程序也会带来系统运行或数据丢失的风险。SAP使用服务器端配置的目的地就能够很好地解决这个问题,当运行时地址发生变化时,直接修改配置内容的WSDL地址即可。

8)根据需要对导入的模型类进行重命名,跳过则直接单击“Next”按钮,如图3-341所示。

978-7-111-58177-2-Chapter03-366.jpg

图3-341 确认导入内容

9)在弹出的对话框中,可以看到导入日志,也就是看到对应Web服务接口在Web Dynpro模型中生成的接口结构。根据接口方法的输入/输出,同时也会生成对应的请求与响应结构,请求结构中包含一个参数为PerId(方法的输入参数名),响应的结构中包含一个参数为Return(方法返回String类型的数据,系统默认命名为Return)。单击“Finish”按钮完成模型的导入配置,如图3-342所示。

10)完成配置后,就可以在工程的目录中看到对应导入的模型以及模型类结构,如图3-343所示。

978-7-111-58177-2-Chapter03-367.jpg

图3-342 导入日志查看

978-7-111-58177-2-Chapter03-368.jpg

图3-343 导入后的效果(www.daowen.com)

11)在导入模型完成之后,需要创建对模型接口的调用,即创建自定义控制器。

首先需要添加对导入模型的引用:右击组件中的“Used Models”,在弹出的快捷菜单中选择“Add”,如图3-344所示。

978-7-111-58177-2-Chapter03-369.jpg

图3-344 添加使用模型

由于之前的步骤中导入的模型是整个Web Dynpro工程可以使用的,只有在需要使用的组件中添加特定模型的引用,才能在组件中进行模型接口的调用。

12)在弹出的对话框中选择之前导入的模型,单击“OK”按钮,如图3-345所示。

13)添加引用之后,需要创建一个自定义控制器。在组件中右击“Custom Controller”,在弹出的快捷菜单中选择“Apply Template”,如图3-346所示。

978-7-111-58177-2-Chapter03-370.jpg

图3-345 选择模型

978-7-111-58177-2-Chapter03-371.jpg

图3-346 应用模板的菜单选择

14)选择“Service Controller”服务控制器,单击“Next”按钮,如图3-347所示。

978-7-111-58177-2-Chapter03-372.jpg

图3-347 选择模板类型

15)选择之前导入的“PerInfoModel”模型的请求方法,单击“Next”按钮,如图3-348所示。

978-7-111-58177-2-Chapter03-373.jpg

图3-348 选择对应的模型

16)对模型字段自动生成的自定义控制器中的上下文进行具体配置,可以选择所有字段也可以选择部分字段进行创建。仔细分析可以看到,“Request_∗”作为根结点,该结点下面的“Response”为方法返回生成的响应数据结构,与“Response”同级的为方法输入生成数据结构,因此不管是赋值还是解析,都是对“Request_∗”下面数据节点的操作。在本例中,选中所有的结点作为自定义控制器中的上下文,并同时完成映射配置,随后单击“Next”按钮,如图3-349所示。

其实在这一步配置中,与之前视图和控制器的上下文映射非常相似,在这里完成的则是自定义控制器的上下文与导入模型的数据结构进行映射。

17)默认可以同时创建模型的执行方法,即触发接口调用,输入方法名称,随后单击“Finish”按钮,如图3-350所示。

978-7-111-58177-2-Chapter03-374.jpg

图3-349 确认应用结点

978-7-111-58177-2-Chapter03-375.jpg

图3-350 输入方法名称

18)完成配置后,记得保存所有修改,检查编译错误,如图3-351所示。完成了自定义控制器的创建,在组件的模型编辑器中看到,增加了自定义控制器和导入模型两个对象,同时它们之间也已经完成了映射配置。

978-7-111-58177-2-Chapter03-376.jpg

图3-351 完成配置后的效果

19)接着需要从视图中对接口进行调用。首先将自定义控制器的方法封装至组件控制器中,通过数据链接添加组件控制器对自定义控制器的引用,如图3-352所示。

20)将两个控制器的上下文进行映射,如图3-353所示。

978-7-111-58177-2-Chapter03-377.jpg

图3-352 引用关系

978-7-111-58177-2-Chapter03-378.jpg

图3-353 上下文映射关系

21)在组件控制器新增自定义方法“executePerInfo”,添加后保存修改,如图3-354所示。

22)保存之后,双击方法进入代码编辑器,添加以下代码:

//获取自定义控制器的实例,并执行自定义控制器中的“execute”方法

wdThis.wdGetPerInfoModelControllerController().executeGetPerName();

23)将视图的上下文与组件控制器上下文进行映射,如图3-355所示。

978-7-111-58177-2-Chapter03-379.jpg

图3-354 添加自定义方法

978-7-111-58177-2-Chapter03-380.jpg

图3-355 添加上下文映射

24)打开“Dynp03_01Comp_01View”视图,在“Outline”元素清单中右击根结点,选择“Apply Template”,如图3-356所示,选择按钮类型并单击“Next”按钮至结束。

25)完成按钮创建后,保存所做的修改。随后双击按钮进入代码编辑器,如图3-357所示。

在按钮的事件处理器方法中添加赋值与打印代码:

978-7-111-58177-2-Chapter03-381.jpg

978-7-111-58177-2-Chapter03-382.jpg

图3-356 选择模板类型

978-7-111-58177-2-Chapter03-383.jpg

图3-357 创建按钮后的效果

26)至此,所有配置和代码工作都已完成,保存所有修改并编译部署至服务器,如图3-358所示。

27)单击“InvokeWs”按钮后,就能在页面下方看到Web服务返回的姓名信息,如图3-359所示。

978-7-111-58177-2-Chapter03-384.jpg

图3-358 运行效果

978-7-111-58177-2-Chapter03-385.jpg

图3-359 单击按钮效果

关于运行时的目标模板配置说明如下。

上述创建模型时,在配置本地目标的步骤输入了“MT_WS_PERINFO_DEST”,这个目标是需要在服务器端提前进行配置的,程序运行时模型的元数据运行程序也会通过配置的目标查找对应的接口、传递参数以及获取返回信息。

1)使用管理员账户登录到服务器NWA平台,单击“SOA”→“Technical Configura⁃tion”命令,随后单击“Destination Template Management”目标模板管理链接。

2)进入页面后,单击“New”按钮,新建一个目标输入的信息,如图3-360所示。

3)单击“Next”按钮,在下一步中输入服务验证信息。由于之前在创建Web Service时并未添加验证,因此此处选择“None”,如图3-361所示。

978-7-111-58177-2-Chapter03-386.jpg

图3-360 输入目标信息

978-7-111-58177-2-Chapter03-387.jpg

图3-361 选择验证方式

4)完成所有信息填写后,单击“Finish”按钮即可。

3.Java与Web服务

Java访问Web服务的方式有很多,目前比较成熟的框架包括有XFire、AJAX等。传统Java工程通过引入这些框架对应的第三方Jar包以及它们提供的API便可以完成对Web服务的调用,但前提是需要自己编写调用逻辑。在实际的项目开发中,Web服务的接口往往是比较复杂的,尤其对于嵌套的集合结构类型,客户端在不管构造赋值请求数据还是解析响应都是一个非常复杂而量大的过程,这样无疑降低了开发者的开发效率,同时也增加了接口双方调试的难度。而Web Dynpro在调用Web服务时自动生成本地客户端代理,并且提供的接口报文日志方便在接口调试时做数据跟踪,以及运行时的配置来应对服务端地址或端口变化的情况。

开发实例:

1)切换到DI视图,右击自定义的SC目录,选择“Development Component”,如图3-362所示。

2)在弹出的窗口中选择对应的EJB类型,单击“Next”按钮,如图3-363所示。

978-7-111-58177-2-Chapter03-388.jpg

图3-362 创建开发组件的菜单选择

978-7-111-58177-2-Chapter03-389.jpg

图3-363 选择项目类型

3)输入自定义DC的名称,单击“Finish”按钮,如图3-364所示。

978-7-111-58177-2-Chapter03-390.jpg

图3-364 选择编译版本

4)创建工程完毕后,展开工程,右击“ejbModule”中的“META-INF”,并选择“Import”导入,导入类型选择“Web services”中的“WSDL”,单击“Next”按钮,如图3-365所示。

5)描述文件源选择“Remote Location/File System”单选按钮,如图3-366所示,单击“Next”按钮。

978-7-111-58177-2-Chapter03-391.jpg

图3-365 选择服务类型

978-7-111-58177-2-Chapter03-392.jpg

图3-366 选择源文件类型

6)输入创建的Web Service WSDL地址,该地址通过服务器中NWA管理员平台的“Serv⁃ice Definitions”服务目的地进行查看,单击“Finish”按钮,如图3-367所示。

978-7-111-58177-2-Chapter03-393.jpg

图3-367 输入服务地址

7)完成WSDL文件的导入之后,可以看到在文件夹中已导入了对应的文件,如图3-368所示。

978-7-111-58177-2-Chapter03-394.jpg

图3-368 导入后的效果

8)右击导入的rootwsdl_PerInfoWsService.wsdl文件,选择“Web Services”→“Generate Client”,如图3-369所示。

978-7-111-58177-2-Chapter03-395.jpg

图3-369 创建客户端的菜单选择

9)客户端的配置级别选择“Develop Client”开发级别客户端,随后按默认配置单击“Next”按钮,如图3-370所示。

978-7-111-58177-2-Chapter03-396.jpg

图3-370 配置服务级别

10)客户端生成后,就能在对应的包中看到自动生成的代理类,如图3-371所示。

11)调用对应的Web服务,新建Session Bean,并填写相关的包名和类名,如图3-372所示。

978-7-111-58177-2-Chapter03-397.jpg

图3-371 自动生成的类文件

978-7-111-58177-2-Chapter03-398.jpg

图3-372 输入项目信息

12)接口中声明获取用户名的“getPerName”方法,代码示例如下:

978-7-111-58177-2-Chapter03-399.jpg

13)切换到Session Bean,定义导入的Service引用,通过获取ServiceInterface实现该方法,代码示例如下:

978-7-111-58177-2-Chapter03-400.jpg

14)保存所有修改即完成了Web服务调用的EJB实例,其他工程通过直接调用该EJB来访问创建的Web服务,或者可以将EJB再次发布Web Service并对客户端程序做测试。

4.消费端服务配置

新建的EJB工程通过EAR项目部署到SAP Java应用服务器后,能够在NWA中消费端服务功能中查找该客户端代理。

1)使用管理员账号登录NWA平台,单击“Configuration”→“Connectivity”命令,单击“Single Service Administration”链接并找到“Consumer Proxies”消费者代理配置,如图3-373所示。

978-7-111-58177-2-Chapter03-401.jpg

图3-373 查看服务列表

2)在“Configuration”配置页签中可以对Web服务进行详细配置,如图3-374所示。

978-7-111-58177-2-Chapter03-402.jpg

图3-374 代理的逻辑端口

3)配置明细包含代理类调用的Web Service地址以及Web服务的安全认证等,如图3-375所示。

978-7-111-58177-2-Chapter03-403.jpg

图3-375 逻辑端口的详细配置

4)单击“Edit”编辑“Security”安全信息,输入访问Web Service时输入的用户认证信息,如图3-376所示。

在Web服务接口保持不变,而WSDL地址发生变更时,Consumer Service是对应于JavaClient的服务端配置,通过后台修改这些参数可以灵活地应对接口服务端服务地址或认证信息的变动,并不需要做任何设计时的修改。

978-7-111-58177-2-Chapter03-404.jpg

图3-376 安全配置

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈