Demo代码:https://github.com/earnext/test-webservice
需求:客户端调取服务端WebService接口插入用户数据。
目录:
- WebService生成客户端代码两种方式
- WebService常用注解
- 编写服务端(发布服务)
3.1. WebService服务端业务代码
3.2. WebService服务端配置(发布服务)- 编写客户端(调取接口)
4.1. 通过Apache CXF生成客户端代码调取WebService接口
4.2. 通过HttpURLConnection工具调取WebService接口
4.3. 通过HttpClient工具调取WebService接口
1.引入依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
2.生成代码
wsdl2java -d E:\apache-cxf-3.3.4\genCXFcode -encoding utf-8 -p com.dongxibao.client.webservice http://localhost:8081/webservice/insert-user?wsdl
3.抽取接口
这一步可以不做,接口多了抽取出来方便统一管理和查找。
/**
* @ClassName GlobalInterface
* @description
* @author Dongxibao
* @date 2020/5/30
* @Version 1.0
*/
public class GlobalInterface {
/** 测试webservice插入用户 */
public final static String INSERT_USER = "http://localhost:8081/webservice/insert-user?wsdl";
}
将生成代码的wsdl地址全部换成刚才配置的全局接口配置,这一步可以不做,替换是方便统一管理。
4.用生成的代码调取
// 方式一
@Test
public void testInsertUser() {
TestServerService_Service testServerService_service = new TestServerService_Service();
TestServerService testServerServiceImplPort = testServerService_service.getTestServerServiceImplPort();
UserDTO userDTO = new UserDTO();
userDTO.setAge(22);
userDTO.setName("test");
RestResult restResult = testServerServiceImplPort.insertUser(userDTO);
System.out.println(restResult.toString());
}
// 方式二
@Test
public void testInsertUser0() {
JaxWsProxyFactoryBean factoryBeanDemand = new JaxWsProxyFactoryBean();
factoryBeanDemand.setAddress(GlobalInterface.INSERT_USER);
factoryBeanDemand.setServiceClass(TestServerService.class);
factoryBeanDemand.getOutInterceptors().add(new LoggingOutInterceptor());
factoryBeanDemand.getInInterceptors().add(new LoggingInInterceptor());
TestServerService testServerService = (TestServerService)factoryBeanDemand.create();
UserDTO userDTO = new UserDTO();
userDTO.setAge(33);
userDTO.setName("test0");
RestResult restResult = testServerService.insertUser(userDTO);
System.out.println(restResult.toString());
}