规则引擎Visual Rules Solution开发基础教程【连载11】--WebService 搭建及调用

[b][size=x-large][align=center]WebService 搭建及调用[/align][/size][/b]

[size=medium] webservice的应用已经越来越广泛了,CXF开发webservice也是比较方便和简单的,它和spring的集成可以说是非常地好。举一个CXF开发webservice的例子吧。[/size]

[size=medium][b]一、环境搭建[/b][/size]

[size=medium] 首先,下载CXF,官网(http://cxf.apache.org/),具体位置如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7551/b9d6dcfd-4d27-3cb9-814f-6082be29abad.png[/img]
[/align]

[size=medium] 解压后,得到以下目录,如图所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7553/6d524341-e663-3308-bbf6-823cb54f30df.png[/img]
[/align]

[size=medium][color=red] 将上图中解压的..\apache-cxf-2.7.6\lib目录中的所有文件复制到新建工程lib目录下特别是endorsed文件夹也要原样复制。[/color][/size]

[size=medium][b]二、WebService的服务搭建[/b][/size]

[b][size=medium]1.创建工程[/size][/b]

[size=medium] 在eclipse/myEclipse中建立web工程webService_cxf,创建方式点击菜单项“File”—“New”—“Web Service Project”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7555/08ff51c5-3a70-3218-a77f-fe51a35002c2.png[/img]
[/align]

[size=medium] 弹出窗体,工程名名为webService_cxf,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7557/7d03a18e-b5ca-3b12-b60c-c59c17fb4e86.png[/img]
[/align]

[b][size=medium]2.新建接口文件TypeService.java[/size][/b]

[size=medium]package com.flageader.service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
[color=red]//必须有@WebService[/color]
@WebService
public interface TypeService {
//基本类型
public int testInt(short short1, short short2);
//数组
public String testArray(int[] int1,char[] char1, byte[] byte1) ;
//集合 list
public List testList(List list) ;
//集合 list<String>
public List<String> testListString(String[] str1) ;
//集合 map
public Map testMap(int id, String name, int age, char sex, String grade,String remark) ;
//日期
public Date testDate(Date date) ;
}
[/size]

[b][size=medium]3.新建实现类TypeServiceImpl.java[/size][/b]

[size=medium]package com.flageader.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TypeServiceImpl implements TypeService {
/**
* 常见类型 int
*/
public int testInt(short short1, short short2) {
int int1 = short1 + short2;
return int1;
}
/**
* 数组
*/
public String testArray(int[] int1, char[] char1, byte[] byte1) {
String str = "";
str+="<int[]={";
for (int i = 0; i < int1.length; i++) {
str += int1[i] + ",";
}
str+="}>\n<char[]={";
for (int i = 0; i < char1.length; i++) {
str += char1[i] + ",";
}
str+="}>\n<byte[]={";
for (int i = 0; i < byte1.length; i++) {
str += byte1[i] + ",";
}
str+="}";
return str;
}
/**
* 集合 list
*/
public List testList(List list) {
return list;
}
/**
* 集合 list<String>
*/
public List<String> testListString(String[] str1) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < str1.length; i++) {
list.add(str1[i]);
}
return list;
}
/**
* 集合 map
*/
public Map testMap(int id, String name, int age, char sex, String grade,
String remark) {
Map map = new HashMap();
map.put("id", id);
map.put("name", name);
map.put("age", age);
map.put("sex", sex);
map.put("grade", grade);
map.put("remark", remark);
return map;
}
/**
* 时间
*/
public Date testDate(Date date) {
return date;
}
}
[/size]

[size=medium][b]4.新建applicationContext.xml配置文件[/b][/size]

[size=medium]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd"
default-lazy-init="false">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<!-- implementor:为实现类的完整路径名 -->
<jaxws:endpoint id="typeService" implementor="com.flageader.service.TypeServiceImpl" address="/typeService" />
</beans>[/size]

[b][size=medium]5.修改配置文件web.xml[/size][/b]

[size=medium]找到工程中web.xml文件,打开,将以下内容替换web.xml中内容,并保存
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webServices/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
这样webService编程完成了,为了能知道创建的方法是否存在着问题,我们需要进行测试。[/size]

[size=medium][b]6.新建测试项[/b][/size]

[size=medium] 点击工程“webService_cxf”—“New”—“Source Folder”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7559/8c200bfe-1065-366d-b809-a1f718f9427c.png[/img]
[/align]

[size=medium] 将其命名为test,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7561/577f51c5-5a3c-359c-abed-e966829f85bf.png[/img]
[/align]

[size=medium] 在点击实现类“TypeServiceImpl”—“New”—“Other...”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7563/3399dfad-ab0a-3da9-ab54-7a1ca816dcd8.png[/img]
[/align]

[size=medium] 弹出窗体,在窗体中的文本框中输入“test”,在点击“Junit Test Case”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7565/78d4a583-e54a-37b3-b8d4-6a082ab84d58.png[/img]
[/align]

[size=medium] 弹出窗体“Junit Test Case”,点击“Browse...”,弹出窗体“Source Folder Selection”,选择“webService_cxf”—“Test”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7567/c36a48ba-ab46-357f-a33b-f05897e8fe76.png[/img]
[/align]

[size=medium] 点击下一步,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7569/024e6b2f-19f5-339b-a912-9fb5c9caa52c.png[/img]
[/align]

[size=medium] 选择方法,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7571/f3f693c4-a925-39e6-8262-17ba76cf9d27.png[/img]
[/align]

[size=medium] 这样创建了测试类TypeServiceImplTest.java。[/size]

[size=medium][b]7.添加测试类TypeServiceImplTest.java[/b][/size]

[size=medium]package com.flageader.service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
public class TypeServiceImplTest extends TestCase {
public void testTestInt() {
TypeService test=new TypeServiceImpl();
short short1=12;
short short2=24;
System.out.println("----int------\n"+test.testInt(short1, short2));
}
public void testTestArray() {
TypeService test=new TypeServiceImpl();
int[] int1={1,3,5,7};
char[] char1={'男','女','是','否'};
byte[] byte1={0,1};
System.out.println("----数组------\n"+test.testArray(int1,char1, byte1));
}
public void testTestList() {
TypeService test=new TypeServiceImpl();
List list=new ArrayList();
list.add("ddd");
list.add(3.4);
List list1=test.testList(list);
System.out.println("----list------");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public void testTestListString() {
TypeService test=new TypeServiceImpl();
String[] strs={"张三","李四","王五","赵六"};
List<String> list=test.testListString(strs);
System.out.println("----list<String>------\n");
for (int i = 0; i < list.size(); i++) { System.out.println("----list<String>------\n"+list.get(i));
}
}
public void testTestMap() {
TypeService test=new TypeServiceImpl();
Map map=test.testMap(1, "李丽", 12, '男', "六年级", "无");
System.out.println("----map------\n"+map);
}
public void testTestDate() {
try {
TypeService test=new TypeServiceImpl();
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd");
Date date =test.testDate(sim.parse("2004-09-02"));
System.out.println("----date------\n"+date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}[/size]

[size=medium][b]8.测试结果[/b][/size]

[size=medium] 得到测试结果如下图打印输出所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7574/f37f88f9-ec82-34ac-a7f4-7375672306b0.png[/img]
[/align]

[size=medium][b]9.工程发布[/b][/size]

[size=medium] myEclispe/Eclispe已经配置好Tomcat(如果没有请配置好),点击“Tomcat 6.x”—“Add Deployment...”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7576/96ba6c18-6597-3379-bcb2-60fb4696cff1.png[/img]
[/align]

[size=medium] 弹出窗体,选择工程“webService_cxf”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7578/3a6ea7d3-31d1-3673-bfd5-a731d67615ea.png[/img]
[/align]

[size=medium] 这样就发布了“webService_cxf”工程。[/size]
[size=medium][b] 启动tomcat[/b][/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7580/d9b21c79-6c15-3b0c-8fe9-99904651d77e.png[/img]
[/align]

[size=medium] 访问路径:http://localhost/webService_cxf/webServices/typeService?wsdl
a)怎样知道访问路径
localhost— ip地址
在此tomcat端口号为80,可省略,其他端口号是不能省略的,如h
ttp://localhost:8080
webService_cxf—工程名
webServices是由web.xml配置文件决定,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7582/1fd03105-8e52-3384-981a-f57741efff7e.png[/img]
[/align]

[size=medium] Typeservice是由applicationContext.xml配置文件决定,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7584/fcc2507a-a709-343c-b432-867d72a8e0e2.png[/img]
[/align]

[size=medium] wsdl—web接口定义语言,在最后需要问号传参,即:?wsdl[/size]

[size=medium]b)访问
http://localhost/webService_cxf/webServices/typeService?wsdl[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7586/ff4ad1c4-a161-3734-801a-6a142b891564.png[/img]
[/align]

[size=medium] 完成。[/size]

[b][size=medium]三、VRS调用WebService服务[/size][/b]


[size=medium] 使用VisualRulesSolution规则配置器作为客户端调用WebService服务。[/size]

[size=medium][b]1.新建规则包Client[/b][/size]

[size=medium] 点击工程“test1”—“新建规则包”,并命名为Client,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7588/424c4e5a-8555-3376-b2e9-64e552e4f816.png[/img]
[/align]

[size=medium] 点击规则包“Client”下的“对象库”—“添加web服务向导”,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7590/8453226e-2a69-3dc6-b241-5802bf85463e.png[/img]
[/align]

[size=medium] 弹出窗体,在wsdl地址对应的文本框中输入http://localhost/webService_cxf/webServices/typeService?wsdl,点击查找,勾选方法, 如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7592/c02b346b-bcd7-3683-8d2d-c71d3a190eca.png[/img]
[/align]

[size=medium] 显示如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7594/276a43f6-b65f-3909-a434-9c0363ea6c2d.png[/img]
[/align]

[size=medium][b]2.调用日期型接口[/b][/size]

[size=medium] 新建规则包“date”,添加web服务,选择如下服务,勾选参数,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7596/bbea40a5-5b9e-3bbb-a1b2-9c1393c8b421.png[/img]
[/align]

[size=medium] 勾选方法[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7598/dce24e70-42bd-3674-bce7-f6fd017b0d6f.png[/img]
[/align]

[size=medium] 对象库中参数定义,如下图:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7600/2e4058ea-71b9-3736-84ce-9be995b383f8.png[/img]
[/align]

[size=medium] 规则配置如下,其中[/size]

[img]http://dl2.iteye.com/upload/attachment/0112/7602/4e9d635b-1ec0-3e45-aaab-d439a00d8643.png[/img]

[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7604/4e383f0d-7b27-30b0-9fe0-d200abc0d43e.png[/img]
[/align]

[size=medium] 测试结果[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/7606/92a25cf1-9a08-30de-a01d-34ff2075c0e0.png[/img]
[/align]

[size=medium] 其他接口的调用方法也都类似,调用的时候一定要注意参数类型。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值