CXF 简单教程初级版

本文是Apache CXF的初级教程,讲解如何引入CXF库,配置服务端servlet,创建并发布WebService,以及使用Eclipse生成客户端代码进行调用。通过实例展示了CXF的基本使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CXF基本使用(2011-10-16)
背景说明
CXF版本:apache-cxf-2.3.6
JDK版本:jdk1.6.0_15
引入CXF
从官网下载最新jar包,地址:http://cxf.apache.org/download.html
并把下载的jar文件引入到对应的项目工程里面。
为简单起见,我把lib目录下的所有文件引入到我对应目录里面。
如果用CXF开发客户端,那么CXF的引入就到此为止了。
如果用CXF开发服务端,那么需要在web.xml配置CXF的servlet过滤器。
对应代码:
<!-- cxf 服务端配置-->
<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>
<!--过滤cxf路径下所有的请求-->
<url-pattern>/cxf/*</url-pattern>
</servlet-mapping>
简单DEMO
服务端
IHelloService.java
package com.tds.ws.service;

import javax.jws.WebParam;
import javax.jws.WebService;
import com.tds.ws.vo.Customer;

@WebService
public interface IHellowService {
/**
* 服务器段
* @param c1
* @param c2
* @return
*/
public Customer selectMaxLongNameCustomer(@WebParam(name = "c1") Customer c1, @WebParam(name = "c2") Customer c2);

public Customer selectMaxAgeStudent(@WebParam(name = "c1") Customer c1, @WebParam(name = "c2") Customer c2);

}


@WebService注解告诉CXF,该方法将作为WEB服务方步出去(可指定别名)。
@WebParam注解告诉CXF,该方法在客户端生成时,参数名称。
HelloServiceJImpl.java
package com.tds.ws.service.impl;

import javax.jws.WebService;
import com.tds.ws.service.IHellowService;
import com.tds.ws.vo.Customer;
@WebService
public class HellowServiceImpl implements IHellowService{
@Override
public Customer selectMaxAgeStudent(Customer c1, Customer c2) {
Customer c=null;
if(c1==null || c2==null){
c=new Customer();
System.out.println("输入参数为空");
c.setName("输入参数为空");//为测试方步
return c;
}
c=c1.getAge()>c2.getAge()?c1:c2;
return c;
}

@Override
public Customer selectMaxLongNameCustomer(Customer c1, Customer c2) {

if(c1==null || c2==null){
return null;
}
return c1.getName().length()>c2.getName().length()?c1:c2;
}

}


Customer.java:
package com.tds.ws.vo;

import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Customer")
public class Customer {

private long id;

private String name;

private Date birthday;

private int age;

private DataHandler imageData;


/**
* @return the imageData
*/
public DataHandler getImageData() {
return imageData;
}

/**
* @param imageData the imageData to set
*/
public void setImageData(DataHandler imageData) {
this.imageData = imageData;
}

/**
* @return the id
*/
public long getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the birthday
*/
public Date getBirthday() {
return birthday;
}

/**
* @param birthday the birthday to set
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}

/**
* @return the age
*/
public int getAge() {
return age;
}

/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}

}


以上完成了服务端业务代码,接着使用code first方式发布WebService。
PublishHellService.java发布类:
package com.tds.ws.util;

import javax.xml.ws.Endpoint;
import org.apache.cxf.endpoint.Server
import com.tds.ws.service.impl.HellowServiceImpl;

public class PublishHellService {

/**
* @param args
*/
public static void main(String[] args) {
// 一般方法发布WS
Endpoint.publish("http://127.0.0.1:8080/webApp/cxf/helloService", new HellowServiceImpl());
}
}


运行main方法,并打开浏览器输入如下网址:
http://127.0.0.1:8080/webApp/cxf/helloService?wsdl查看页面,如果能出现xml格式的文件说明cxf发布成功了。
客户端
客户端使用CXF生成比较简单,可以通过命令的方式生成,也可以通过eclipse方式生成。
命令方式:切换到下载的cxf包下的bin目录。运行以下命令:
//在E盘的code文件夹下生成客户端,并指定客户端的包路径为com.tds.cxf ,服务端的wsdl
//地址为
wsdl2java -p com.tds.cxf -d E:\code
http://127.0.0.1:8080/webApp/cxf/helloService?wsdl
Eclipse默认使用axis构建ws客户端,在这里需配置选项方可。
方法:window-->preferences-->web Service-->Cxf2.Xpreferences指定cxf runtime的依赖库。


这里用eclipse方式生成
在自己的web项目中邮件New-->Web Service-->Web Service Client 并next。

在service definition中输入刚才的网址:http://127.0.0.1:8080/webApp/cxf/helloService?wsdl
并点击Finish结束。
此时会生成如下代码:

客户端代码:
package com.tds.ws.client.cxf.util;

import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.xml.datatype.XMLGregorianCalendar;

import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl;
import com.tds.ws.client.cxf.service.Customer;
import com.tds.ws.client.cxf.service.IHellowService;
import com.tds.ws.client.cxf.service.impl.HellowServiceImplService;

/**
* Ws一般调用方式
* @author Administrator
*
*/
public class BaseClient {

public static void main(String[] args) {
HellowServiceImplService service=new HellowServiceImplService();
IHellowService port = service.getHellowServiceImplPort();
Customer[] c=getCustomer();
port.selectMaxAgeStudent(c[0], c[1]);
}
private static Customer[] getCustomer() {
Customer c1 = new Customer();
c1.setAge(18);
GregorianCalendar x1 = (GregorianCalendar) GregorianCalendar.getInstance();
x1.set(Calendar.YEAR, 1985);

XMLGregorianCalendar r = new XMLGregorianCalendarImpl(x1);
c1.setBirthday(r);
c1.setId(11);
c1.setName("zhangsan");
Customer c2 = new Customer();
c2.setAge(20);
x1.set(Calendar.YEAR, 1986);
c2.setBirthday(r);
c2.setId(12);
c2.setName("lisi");
return new Customer[] { c1, c2 };
}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值