SpringBoot_WebService_cxf 傷城~ 2021-10-06 04:24 448阅读 0赞 ### SpringBoot\_WebService\_cxf ### * 服务端 * * 依赖pom.xml * 配置源码 * * 实体类 * 服务接口 * 服务实现类 * 配置类 * 客户端 * * 依赖pom.xml * 源码 Springboot版本对应: Spring boot 1.4.x ------>cxf-spring-boot-starter-jaxws 3.1.x Spring boot 1.5.x------->cxf-spring-boot-starter-jaxws 3.2.x Spring boot 2.x------->cxf-spring-boot-starter-jaxws 3.3.x # 服务端 # ## 依赖pom.xml ## <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.plxc.cxf</groupId> <artifactId>springboot-cxf</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-cxf</name> <description>WebService服务-cxf</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--WerbService CXF依赖 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ## 配置源码 ## ### 实体类 ### @Data @NoArgsConstructor @AllArgsConstructor public class TUser implements Serializable{ private static final long serialVersionUID = 6258449347837988763L; private String id; private String name; private Integer age; private String address; } ### 服务接口 ### @WebService(name="UserService",targetNamespace="http://service.cxf.plxc.com") public interface UserService { @WebMethod String getName(@WebParam(name = "id") String id); @WebMethod TUser getUser(String id); @WebMethod List<TUser> getAllUser(); } ### 服务实现类 ### @WebService(serviceName="UserService",targetNamespace = "http://service.cxf.plxc.com", endpointInterface = "com.plxc.cxf.service.UserService") public class UserServiceImpl implements UserService { @Override public String getName(String id) { System.err.println("getName..."); return id; } @Override public TUser getUser(String id) { TUser user = new TUser(id, "小明", 28, "上海"); System.err.println("getUser..."); return user; } @Override public List<TUser> getAllUser() { TUser user1 = new TUser("1", "小明", 28, "上海"); TUser user2 = new TUser("2", "小明", 28, "上海"); List<TUser> result = new ArrayList<TUser>(); result.add(user1); result.add(user2); System.err.println("getAllUser..."); return result; } } ### 配置类 ### @Configuration public class WebServiceConfig { @Bean(name = Bus.DEFAULT_BUS_ID) public SpringBus springBus() { return new SpringBus(); } @Bean public UserService userService() { return new UserServiceImpl(); } /** * 发布服务 * * @return */ @Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), userService());// 绑定要发布的服务 endpoint.publish("/user"); // 显示要发布的名称 return endpoint; } } # 客户端 # ## 依赖pom.xml ## <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.3.2</version> </dependency> ## 源码 ## /** * 方式一:动态调用 * @throws Exception */ private static void test1() throws Exception { JaxWsDynamicClientFactory dcflient = JaxWsDynamicClientFactory.newInstance(); Client client = dcflient.createClient("http://127.0.0.1:8088/services/user?wsdl"); Object[] objects = client.invoke("getName", "111"); System.err.println(objects[0].toString()); Object[] objectall = client.invoke("getAllUser"); System.err.println( objectall[0].toString()); } /** * 方式二:通过接口协议获取数据类型 */ private static void test2() { try { // 接口地址 String address = "http://127.0.0.1:8088/services/user?wsdl"; // 代理工厂 JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); // 设置代理地址 jaxWsProxyFactoryBean.setAddress(address); // 设置接口类型 jaxWsProxyFactoryBean.setServiceClass(UserService.class); // 创建一个代理接口实现 UserService userService = (UserService) jaxWsProxyFactoryBean.create(); // 设置链接超时和响应时间 Client proxy = ClientProxy.getClient(userService); HTTPConduit conduit = (HTTPConduit) proxy.getConduit(); HTTPClientPolicy policy = new HTTPClientPolicy(); policy.setConnectionTimeout(1000); policy.setReceiveTimeout(1000); conduit.setClient(policy); System.err.println(userService.getName("test")); System.err.println(userService.getAllUser().size()); System.err.println(userService.getUser("test")); } catch (Exception e) { e.printStackTrace(); } } /** * * 方式三:部分依赖生成代码(需要通过wsimport -s . -d . -p com.example.demo.stub http://localhost:8088/services/user?wsdl生成类) * * @throws Exception */ private static void test3() throws Exception { // wsdl网络路径 URL url = new URL("http://127.0.0.1:8088/services/user?wsdl"); // 服务描述中服务端点的限定名称 两个参数分别为 命名空间 服务名 QName qName = new QName("http://service.cxf.plxc.com", "UserService"); Service service = Service.create(url, qName); UserService userService = service.getPort(UserService.class); System.err.println(userService.getName("test")); System.err.println(userService.getAllUser().size()); System.err.println(userService.getUser("test")); } /** * * 方式四:完全依赖生成代码(需要通过wsimport -s . -d . -p com.example.demo.stub http://localhost:8088/services/user?wsdl生成类) * */ private static void test4() { UserService_Service userService_Service = new UserService_Service(); UserService userService = userService_Service.getUserServiceImplPort(); System.err.println(userService.getName("test")); System.err.println(userService.getAllUser().size()); System.err.println(userService.getUser("test")); }
还没有评论,来说两句吧...