今天根据实际业务做一个小实验,遵从JSR181规范来写些代码。(代码控比较喜欢)
业务场景描述:
1)客户端发出一个内部代码,比如000000 (代表国家局),而ESB要输出给消费者 000000[国家局]。
2)客户端发出一个自己的内部代码,比如GJJ(代表国家局),而ESB要输出给消费者 000000[国家局]。
3)客户端发出一个内部代码,比如0000_TO_1100,表示要从1100这个服务器取得结果返回结果,也就是通过ESB再次访问一个Web Service,返回结果。
开发前准备。
1,Web service使用Petals ESB 开发之一 代理Web Service 当中的Hello.war包为准。
2,使用Petals Studio 1.3.4进行开发。
开发思路。
1)提供者:ESB做这Web service的客户端直接调用第三方的服务,根据返回结果再做加工处理。
2)消费者:把刚才的Service发布成SOAP协议的WEB服务
(其实,还有一种工作思路,就是通过取得JBIContextManager取到服务组件当中的资源,通过jbiContext.getMessageSender().send来发送请求。后面的教学当中会加入。)
开始了
第一步,创建服务组件,命名为:ConvertHello
第二步,创建提供者,使用jsr181创建java文件,如下图所示:
下一步,取名为:su-Jsr181-ConvertHello-provide,
使用下一步,如下图所示:
其中,JAX-WS实现类,要把名称写的符合规范,否则不允许通过,也就是命名必须为驼峰方式。
另外,通过WSDL来做定义,这里不是把WSDL直接转成JAVA的样式,也不去直接调用原来的HelloESB.wsdl,只是生成类似的代码。这种方法的设计可能是想原来的Web Service拥有相同的接口,这样方便调用者直接使用,不需要再次修改接口,官方建议使用JBIContextManager来调用,后面的章节会讲到。
第三步,把WSDL转换成JAVA客户端代码。方法如下。
要把生成的JAVA文件放在指定的目录 ,这个很重要哟,看清楚了大家。
@WebMethod( operationName="hello" ) @WebResult( name="returnMessage" ) public String hello( @WebParam( name="message" )String message) { HelloESBPortType hello = new HelloESB().getHelloESBHttpPort(); String newMessage = ""; if (message==null || message.equals("")){ return "Hello World!"; } if (message.equals("0000000")|| message.equalsIgnoreCase("GJJ")){ newMessage ="0000000[国家局]"; } if (message.contains("_TO_")){ //调用其它的Web service,这里省略。 } return hello.hello(newMessage); }
第五步,生成WSDL,
第六步,创建消费者
1)选择SOAP协议,
2)选择刚才的服务。
3)保存为su-SOAP-CovertHello-consume项目,
4)把刚才的提供者和消费者都加到服务组件当中。
5) 把服务组件生成部署包,右键->Petals->Fast Export to Petals
5)把服务组件部分部署到你的%ESB Install Dir% 目录下,会自动安装。
第七步,使用soap来测试你的服务。
这里我的测试图,大家参考一下。
导读:
- Petals ESB 简介
-
Petals ESB 安装部署
-
Petals ESB 开发之一 代理Web Service
- Petals ESB 开发之二 协议转换
- Petals ESB 开发之三 服务消息转换