1.CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web services的JAVA API,它使用户无需编写复杂的SOAP ENV,WSDL。在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。
在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。
2.使用CXF开发Webservice工程步骤:
1).为CXF设置编译和开发环境
在http://cxf.apache.org/download.html 下载相应的CXF包,/lib目录下的jar 文件引入工程
2).创建基于XCF的Webservice服务端工程。
3).编写Webservice的客户端程序,调用服务端服务。
3.CXF中的Factory:
CXF不但可以使用JAX-WS开发web服务,也可以将POJO发布为web服务,对于这两种不同的方式,对应的factory如下:
???????????????????????????????? 服务端?????????????????????????????? 客户端??
JAX-WS????????????????????? JaxWsServerFactoryBean???????????? JaxWsProxyFactoryBean
POJO?????????????????????????? ServiceFactoryBean???????????????????? ClientProxyFactoryBean
4.CXF使用JAX-WS开发服务端:
(1).定义服务接口:
在接口上添加Webservice注解:@WebService。如:
view plaincopy to clipboardprint?
package service;??
import javax.jws.WebService;??
@WebService?
public interface OrderProcess {??
??? String processOrder(Order order);??
}?
package service;
import javax.jws.WebService;
@WebService
public interface OrderProcess {
??? String processOrder(Order order);
}
(2).实现服务接口:
在实现类上也添加Webservice注解:@WebService(endpointInterface = 服务接口全路径,?? serviceName = 对外发布的服务名)。如:
view plaincopy to clipboardprint?
package service;??
import javax.jws.WebService;??
@WebService(endpointInterface = "service.OrderProcess",serviceName=”order”)??
public class OrderProcessImpl implements OrderProcess {??
??? public String processOrder(Order order) {??
??????? return "hello world"+order;??
??? }??
}?
package service;
import javax.jws.WebService;
@WebService(endpointInterface = "service.OrderProcess",serviceName=”order”)
public class OrderProcessImpl implements OrderProcess {
??? public String processOrder(Order order) {
??????? return "hello world"+order;
??? }
}
(3).对外发布服务:
view plaincopy to clipboardprint?
//创建web服务工厂??
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();??
//设置服务类??
factory.setServiceClass(服务接口实现类.class);??
//设置对外发布服务地址??
factory.setAddress(对外发布的服务地址);??
//创建服务??
Server server = factory.create();??
//启动服务??
server.start();?
//创建web服务工厂
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
//设置服务类
factory.setServiceClass(服务接口实现类.class);
//设置对外发布服务地址
factory.setAddress(对外发布的服务地址);
//创建服务
Server server = factory.create();
//启动服务
server.start();
5.CXF使用JAX-WS开发客户端:
view plaincopy to clipboardprint?
//创建web服务代理工厂??
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();??
//设置要调用的web服务服务端发布地址??
factory.setAddress(web服务的发布地址);??
//设置要调用的web服务??
factory.setServiceClass(web服务接口.class);??
//创建web服务对象??
服务接口 对象 = (服务接口) factory.create();??
通过对象调用web服务的方法??
6.CXF使用POJO开发服务端:??
和使用JAX-WS开发方式前两步完全一样,第三步稍有不同如下:??
//创建web服务工厂??
ServiceFactoryBean svrFactory = new ServiceFactoryBean();??
//设置服务类??
svrFactory.setServiceClass(服务接口实现类.class);??
//设置对外发布服务地址??
svrFactory.setAddress(对外发布的服务地址);??
//创建服务??
Server server = svrFactory.create();??
//启动服务??
server.start();?
//创建web服务代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//设置要调用的web服务服务端发布地址
factory.setAddress(web服务的发布地址);
//设置要调用的web服务
factory.setServiceClass(web服务接口.class);
//创建web服务对象
服务接口 对象 = (服务接口) factory.create();
通过对象调用web服务的方法
6.CXF使用POJO开发服务端:
和使用JAX-WS开发方式前两步完全一样,第三步稍有不同如下:
//创建web服务工厂
ServiceFactoryBean svrFactory = new ServiceFactoryBean();
//设置服务类
svrFactory.setServiceClass(服务接口实现类.class);
//设置对外发布服务地址
svrFactory.setAddress(对外发布的服务地址);
//创建服务
Server server = svrFactory.create();
//启动服务
server.start();
6.CXF使用POJO开发客户端:
和JAX-WS方式除了代理工厂不同以外,其他均相同:
view plaincopy to clipboardprint?
//创建web服务代理工厂??
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();??
//设置要调用的web服务服务端发布地址??
factory.setAddress(web服务的发布地址);??
//设置要调用的web服务??
factory.setServiceClass(web服务接口.class);??
//创建web服务对象??
服务接口 对象 = (服务接口) factory.create();?
//创建web服务代理工厂
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
//设置要调用的web服务服务端发布地址
factory.setAddress(web服务的发布地址);
//设置要调用的web服务
factory.setServiceClass(web服务接口.class);
//创建web服务对象
服务接口 对象 = (服务接口) factory.create();
通过对象调用web服务的方法
7.CXF与Spring的集成:
(1).对工程引入spring支持。
(2).在web.xml文件中添加spring和CXF相应的配置如下:
view plaincopy to clipboardprint?
<web-app>?
? <context-param>?
? <param-name>contextConfigLocation</param-name>?
? <param-value>spring配置文件路径</param-value>?
?</context-param>?
?<listener>?
? <listener-class>?
?? org.springframework.web.context.ContextLoaderListener??
? </listener-class>?
?</listener>?
?<servlet>?
? <servlet-name>CXFServlet</servlet-name>?
? <display-name>CXF Servlet</display-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>/service/*</url-pattern>?
?</servlet-mapping>?
</web-app>?
<web-app>
? <context-param>
? <param-name>contextConfigLocation</param-name>
? <param-value>spring配置文件路径</param-value>
?</context-param>
?<listener>
? <listener-class>
?? org.springframework.web.context.ContextLoaderListener
? </listener-class>
?</listener>
?<servlet>
? <servlet-name>CXFServlet</servlet-name>
? <display-name>CXF Servlet</display-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>/service/*</url-pattern>
?</servlet-mapping>
</web-app>
(3).在spring配置文件中导入CXF的相关配置如下:
view plaincopy to clipboardprint?
<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" />?
<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" />
(4).在spring配置文件中配置要发布的web服务如下:
view plaincopy to clipboardprint?
<jaxws:endpoint?
?? id="……"?
?? implementor="服务接口实现类全路径"?
?? address="/web服务发布地址(相对地址)" />?
<jaxws:endpoint
?? id="……"
?? implementor="服务接口实现类全路径"
?? address="/web服务发布地址(相对地址)" />
?
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chjttony/archive/2011/02/20/6196289.aspx