程序员人生 网站导航

分布式系统(4)---Web Service实战--CXF实践篇

栏目:框架设计时间:2015-07-24 09:05:45

第2篇:CXF实践篇


CXF架构开发WebService步骤:

1、建立Web项目

2、准备所有的jar

                   

3web.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>


4applicationContext-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风格的webServiceRestful风格是以普通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实现了跨平台,跨语言。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐