最近工作中需要用到webservice,而且结合spring boot进行开发
一、本次开发除了用到spring boot基础jar包外,还用到了cxf相关jar包:
<!-- webservice 基本配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
二、首先我们创建一个实体类,内容是关于用户信息的查询和记录:
public class TestUser implements Serializable {
private static final long serialVersionUID = -5939599230753662529L;
private String userId;
private String username;
private String age;
private Date updateTime;
public void setUserId(String userId) {
this.userId = userId;
}
public void setUsername(String username) {
this.username = username;
}
public void setAge(String age) {
this.age = age;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getUserId() {
return userId;
}
public String getUserName() {
return username;
}
public String getAge() {
return age;
}
public Date getUpdateTime() {
return updateTime;
}
}
三、接下来我们创建接口类:
@WebService
public interface TestUserService {
@WebMethod
String getName(@WebParam(name = "userId") String userId);
@WebMethod
TestUser getUser(String userId);
}
四、接下来我们创建接口类实现类:
@WebService(targetNamespace = "http://service.webservice.demo.test.com/", endpointInterface = "com.test.demo.webservice.service.TestUserService")
public class TestUserServiceImpl implements TestUserService {
private Map<String, TestUser> userMap = new HashMap<String, TestUser>();
public TestUserServiceImpl() {
System.out.println("向实体类插入数据");
TestUser user = new TestUser();
user.setUserId("411001");
user.setUsername("zhansan");
user.setAge("20");
user.setUpdateTime(new Date());
userMap.put(user.getUserId(), user);
user = new TestUser();
user.setUserId("411002");
user.setUsername("lisi");
user.setAge("30");
user.setUpdateTime(new Date());
userMap.put(user.getUserId(), user);
user = new TestUser();
user.setUserId("411003");
user.setUsername("wangwu");
user.setAge("40");
user.setUpdateTime(new Date());
userMap.put(user.getUserId(), user);
}
@Override
public String getName(String userId) {
return "liyd-" + userId;
}
@Override
public TestUser getUser(String userId) {
System.out.println("userMap是:"+userMap);
return userMap.get(userId);
}
}
五、发布:
@Configuration
public class TestConfig {
@Bean
public ServletRegistrationBean createServletRegistrationBean() {
return new ServletRegistrationBean(new CXFServlet(), "/test/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public TestUserService userService() {
return new TestUserServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService());
endpoint.publish("/user");
return endpoint;
}
}
然后开始访问http://localhost:18902/test/user?wsdl ,结果如下图
六:调用
public class client {
public static void main(String args[]) throws Exception {
/*JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://localhost:18902/test/user?wsdl");*/
//getUser 为接口中定义的方法名称 张三为传递的参数 返回一个Object数组
/*Object[] objects = client.invoke("getUser", "411001");
//输出调用结果
JSONObject json = JSONObject.fromObject(objects[0]);
System.out.println("*****" + json);*/
JaxWsProxyFactoryBean client=new JaxWsProxyFactoryBean();
client.setAddress("http://localhost:18902/test/user?wsdl");
client.setServiceClass(TestUserService.class);
TestUserService testUserService=(TestUserService)client.create();
TestUser user=testUserService.getUser("411001");
System.out.println("姓名:"+user.getUserName());
System.out.println("年龄:"+user.getAge());
System.out.println("更新时间:"+user.getUpdateTime());
String name=testUserService.getName("411001");
System.out.println("姓名:"+name);
}
}
两种方法皆可获取结果