目录
1. CXF方式
2. Xfire方式
3. AXIS2方式
4. AXIS1方式
5. AXIS1客户端调用
6. AXIS2客户端调用
7. CXF客户端调用
8. Web Service Client客户端调用
1.CXF方式
CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容:
表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为: java.lang.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是:
将上述jar包新建一个was共享库,可以解决。
使用cxf+spring搭建WebService:
第一步,添加jar包。
第二步,配置web.xml文件,如下(重要的地方已标记):
contextConfigLocation
classpath:/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
CXFServlet
org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/webservice/*
上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;
第三步,编写接口类与实现类,注意注解
接口类
@WebServicepublic interfaceSendService {public boolean sendOA(@WebParam(name = "param") String param);public booleansendOrg(OrgEntity org);
}
实现类
@WebService(endpointInterface= "com.service.SendService", serviceName = "sendService")public class SendServiceImpl implementsSendService {public booleansendOA(String param) {
System.out.println("-------sendOA---------param:" +param);if (param.equals("zhoujian")) {return true;
}return false;
}public booleansendOrg(OrgEntity org) {
System.out.println("-------sendOrg--begin-------");return true;
}
}
第四步,Spring配置文件
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">
“jaxws:client”该标签可以不必写,访问时可以手动拼接该url
第五步,发布,直接部署到服务器,访问:
http://10.137.138.11:9080/Wb/webservice/sendServie?wsdl
2. Xfire方式
据说xfire方式已经很老了,但个人感觉,xfire方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了。
Xfire方式发布webservice:
第一步,添加jar包,如下:
第二步,修改web.xml文件
XFireServlet
org.codehaus.xfire.transport.http.XFireConfigurableServlet
0
XFireServlet
/services/*
第三步,编写接口类
接口类:public abstract interfaceIBankingService {public abstractString transferFunds(String paramString1);
}
实现类:public class BankingService implementsIBankingService {publicString transferFunds(String fromAccount)
{return fromAccount + ":ok";
}
}
第四步,编写services.xml配置文件
在WEB-INF目录下新建目录META-INF,在该目录下新建文件夹xfire,该目录下新建文件services.xml
Banking
mybank
com.mybank.xfire.example.IBankingService
com.mybank.xfire.impl.BankingService
第五步,发布,部署到服务器,访问url:
http://localhost:9080/Xfire/services/Banking?wsdl
3. AXIS2方式
Axis2发布WebService有两种方式,其一是利用axis2插件打成aar包放到axis_war里面部署到服务器发布;其二是不打包发布(本例);我不清楚打包发布有什么好处,感觉很麻烦项目外还得部署一个war,现在介绍第二种不打包的方式,类似xfire,同时由于cxf与was不兼容导致wsdl.jar报错,但是xfire与axis2也用到wsdl.jar却不报错,我个人也是很费解,泰康项目目前使用的就是axis2方式。
Axis2发布WebService:
第一步,添加jar包,如下:很多是吧,不过都是从axis.war里面WEB-INF下的lib目录复制来的。
第二步,修改web.xml文件
AxisServletorg.apache.axis2.transport.http.AxisServlet
1
AxisServlet
/services/*
第三步,编写实现类
public classServiceImpl {publicString sayHello(String name){
System.out.println("================");return "hello:"+name;
}
}
第四步,增加WEN-INF内容
将axis.war解压下的WEN-INF文件夹内的conf、modules复制到项目WEB-INF下
第五步,在WEB-INF下创建文件夹services(名字不可改),在该目录下创建文件夹(名称随意),在该目录下创建文件夹META-INF(名称不可改),在该目录下创建文件services.xml(名称不可改),该文件内容为:
Web Service例子
com.ServiceImpl
第六步,部署到服务器,发布URL为:
http://localhost:9080/Axis2Test/services/axisDemo?wsdl
4. AXIS1方式
同上,不知道AXIS1哪里不好,配置也很简单,如下:
第一步,添加jar包
第二步,修改web.xml
AxisServlet
org.apache.axis.transport.http.AxisServlet
AxisServlet
/services/*
第三步,实现类与实体类
实现类packagecom;public classAxis {publicString sayHello(String name){
System.out.println("============:"+name);return "hi:"+name;
}publicString sayHelloToUser(User u){
System.out.println("============:"+u.getId());
System.out.println("============:"+u.getPath());
System.out.println("============:"+u.getAdd());return "hi:"+u.getName();
}
}
实体类:packagecom;public classUser {privateString id;privateString name;privateString add;privateString path;
getter setter ……方法
第四步,创建配置文件:在WEB-INF下新建文件“server-config.wsdd”