基于CXF搭建webService的实例讲解可以分为如下步骤:
1. 环境准备
在开始之前,需要准备好以下环境:
- JDK1.8及以上版本
- Apache Maven
- Apache CXF框架
CXF可以通过Maven进行依赖管理,因此只需要在pom.xml中添加CXF的相关依赖即可,如下所示:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.3.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.6</version>
</dependency>
2. 定义WebService接口
定义WebService接口可以借助JAX-WS注解实现,以下是一个简单的示例:
@WebService
public interface HelloWorld {
@WebMethod
String sayHello(String name);
}
在以上例子中,我们定义了一个名为HelloWorld的WebService接口,并定义了一个名为sayHello的方法,该方法接收一个String类型参数name并返回一个String类型的结果。
3. 实现WebService接口
实现WebService接口需要借助CXF框架提供的代码自动生成工具wsdl2java,该工具会根据WebService接口生成对应的Java代码,以下是一个简单的示例:
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
在以上例子中,我们实现了HelloWorld接口,并编写了对应的实现方法。需要注意的是,实现类中需要添加@WebService注解,并指定对应的接口。
4. 发布WebService服务
在实现完WebService接口之后,需要将其发布为一个正式的WebService服务,步骤如下:
4.1 创建服务工厂
需要通过JaxWsServerFactoryBean类创建服务工厂,如下所示:
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
4.2 设置服务地址
需要通过setAddress方法设置服务的发布地址,如下所示:
factory.setAddress("http://localhost:8080/hello");
4.3 设置服务类
需要通过setServiceClass方法设置服务类,如下所示:
factory.setServiceClass(HelloWorld.class);
4.4 设置服务实现类
需要通过setServiceBean方法设置服务实现类,如下所示:
factory.setServiceBean(new HelloWorldImpl());
4.5 发布服务
需要通过create()方法发布服务,如下所示:
factory.create();
5. 测试WebService服务
最后,需要编写一个客户端测试WebService服务,代码示例如下:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/hello");
HelloWorld client = (HelloWorld) factory.create();
String message = client.sayHello("World");
System.out.println(message);
以上代码会调用WebService服务,并输出结果。
示例
这里提供两个示例,一个是发布简单的WebService服务,另一个是发布需要传输复杂数据类型的WebService服务。具体代码实现可以参考上面的步骤。
示例一:发布简单的WebService服务
定义一个WebService服务接口HelloWorld:
@WebService
public interface HelloWorld {
@WebMethod
String sayHello(String name);
}
实现该接口:
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
发布该服务:
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setAddress("http://localhost:8080/hello");
factory.setServiceClass(HelloWorld.class);
factory.setServiceBean(new HelloWorldImpl());
factory.create();
最后,编写一个客户端测试WebService服务:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/hello");
HelloWorld client = (HelloWorld) factory.create();
String message = client.sayHello("World");
System.out.println(message);
示例二:发布需要传输复杂数据类型的WebService服务
定义一个WebService服务接口StudentService:
@WebService
public interface StudentService {
@WebMethod
Student getStudent(int id);
}
定义一个学生类Student:
public class Student {
private int id;
private String name;
private int age;
//构造函数、get/set方法省略
}
实现该接口:
public class StudentServiceImpl implements StudentService {
public Student getStudent(int id) {
Student student = new Student();
student.setId(id);
student.setName("张三");
student.setAge(20);
return student;
}
}
发布该服务:
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setAddress("http://localhost:8080/student");
factory.setServiceClass(StudentService.class);
factory.setServiceBean(new StudentServiceImpl());
factory.create();
最后,编写一个客户端测试WebService服务:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(StudentService.class);
factory.setAddress("http://localhost:8080/student");
StudentService client = (StudentService) factory.create();
Student student = client.getStudent(1);
System.out.println(student.getId() + " " + student.getName() + " " + student.getAge());
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于CXF搭建webService的实例讲解 - Python技术站