第2篇:CXF实践篇
CXF架构开发WebService步骤:
1、建立Web项目
2、准备所有的jar包
3、web.xml中配置cxf的核心servlet,CXFServlet
服务器端:
<display-name>cxf_demo</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-server.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>/ws/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
4、applicationContext-Server.xml
服务器端
<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" />
<jaxws:endpoint id="helloService" implementor="com.test.server.HelloWorldServerImpl"
address="/helloService" />
客户端
<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" />
<bean id="client" class="com.test.server.IHelloWorldServer"
factory-bean="clientFactory" factory-method="create" />
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.test.server.IHelloWorldServer" />
<property name="address" value="http://localhost:8080/cxf_demo/ws/helloService"/>
</bean>
CXF发布服务的类有两个:
JaxWsServerFactoryBean,我们用的这个。用于发布1个服务,可以通过默许构造实例此类。
JaxRsServerFactoryBean,此类用于发布Restful风格的webService;Restful风格是以普通get,post要求为标准的,并可以要求和相应json数据。
5、代码
服务器端,发布服务
IHelloWorldServer
@WebService
public interface IHelloWorldServer {
public String sayHello(String username);
}
HelloWorldServerImpl
@WebService(endpointInterface = "com.test.server.IHelloWorldServer",serviceName="HelloService")
public class HelloWorldServerImpl implements IHelloWorldServer{
@Override
public String sayHello(String username) {
return username + ":HelloWorld";
}
}
客户端
HelloWorldClient
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml");
IHelloWorldServer helloService = (IHelloWorldServer) context.getBean("client");
String response = helloService.sayHello("liutengteng");
System.out.println(response);
}
6、运行结果
访问地址:http://localhost:8080/cxf_demo/ws
WSDL:
客户端运行结果:
总结
通过上面简单的例子我们也很容易的看出来,远程调用就是通过服务器端发布服务,客户端调用。发布出来的WSDL通过XML的情势展现出来,XML解析,而且SOAP也是基于XML的。由于XML是各种语言通用的,故Web Service实现了跨平台,跨语言。