快速上手系列:webservice
不同公司的系统交互,用webservice可以起到安全的作用。
Webservice使用方法如下:
客户端:
这个是要打成jar包,给别人的用的,里面只是接口,没有实现。
用Webservice,举例两个包,
一个是Axis2,Axis是apache下一个开源的webservice开发组件,出现的算是比较早了,也比较成熟。
一个是Apche CXF,CXF开发webservice也是比较方便和简单的,它和spring的集成可以说是非常地好。
建项目,导包(下面例子项目用的CXF),写要暴露给外部的service接口,再写webservicesClient.xml,如:xxxService.java
@WebService
public interface xxxService{
//写接口名和接收的vo类
public xxxResDTO getXXX(xxxReqDTO xxxreqdto);
}
webservicesClient.xml里,每个service接口对应一个jaxws,里面是方法名,动态的地址,和一个类似aop的拦截(打印日志的吧)
<jaxws:client id = "xxxclient" serviceClass ="com.xxx.xxxService" --上面xxxService.java的路径 address= "发布的ip/xxx/xxxSe对外rvice?wsdl" --暴露给大家的访问地址 > <jaxws:outInterceptors> <ref bean = "xxxInterceptor" /> </jaxws:outInterceptors> </jaxws:client>
其实这个jar里就三个内容,出参入参DTO,service接口,xml文件。三个都写好后,把项目打成jar包,给别人用,别人怎么用呢?如下
别人拿到jar包,只要根据jar包里webservicesClient.xml的jaxws:client id的内容,注入实例,然后用实例去点方法就能调到方法了。如下
@Resource private xxxService xxxClient; //上面那个xxxService的实现
public xxx xxxbiz { //自己的业务 public xxx bizXXX(){ xxxDTO xxxdto = new xxxDTO(); xxxdto = xxxClient.getXXX(.....); //这里就调用实例的那个方法了 } }
服务端:
这是那个jar包所有service接口的具体实现方法。
这个项目也引上面那个client的包,然后直接实现,如下
@WebService public class xxxServiceImpl implentments xxxService{ @Override public xxxResDTO getxxx(){ //写这个webservice接口的实现 } }
然后在项目的resources->config->里加个配置文件webservicesContext.xml即可。
webservicesContext.xml里面四个东西,比客户端多了个实现类
<jaxws:endpoint id="xxxService" implementor="xxxServiceImpl" implementorClass = "com.xxx.xxxService" //类路径 address="/xxxService" > //对外路径 <jaxws:inTerceptors> <ref bean="xxxInterceptor"> </jaxws:inTerceptors> </jaxws:endpoint>
下面还有个aop
<aop:config> <aop:aspect ef ="xxxadvice"> <aop:around method="serviceInvoke" pointcut="execution(*.*(..))" /> //所有路径的所有方法都拦截 <aop:aspect>
步骤如上。
但是,别人用客户端client的jar包时,它是如何触发服务端的实现方法呢?
答:client的xml文件里,配有address,通过那个地址,找到了服务端项目,
对了,服务端项目的web.xml也要配置一下,如下:
<servlet> <servlet-name>CXFServlet</servlet-name> ... <servlet-mapping>... </servlet>
这样,只要七步,
Client端写DTO、service、xml,然后打包,
服务端写实现、xml、配web.xml。
就完成了一个webservice项目。