1:添加依赖
Maven工程:java
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.3.3</version> </dependency>
Gradle工程:git
'org.apache.cxf:cxf-spring-boot-starter-jaxws:3.3.3'
2:服务端接口github
package com.nobody.service; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; /** * 测试接口 * * @author Μr.ηobοdy * * @date 2019-12-29 * */ @WebService(name = "UserService", // 暴露服务名称 targetNamespace = "http://service.nobody.com" // 命名空间,通常是接口的包名倒序 ) public interface UserService { @WebMethod @WebResult(name = "String", targetNamespace = "") String addUser(@WebParam(name = "username") String username, @WebParam(name = "age") int age); }
3:服务端接口实现web
package com.nobody.service.impl; import javax.jws.WebService; import org.springframework.stereotype.Component; import com.nobody.service.UserService; /** * 测试接口实现 * * @author Μr.ηobοdy * * @date 2019-12-29 * */ @WebService(serviceName = "UserService", // 与接口中指定的name一致 targetNamespace = "http://service.nobody.com", // 与接口中的命名空间一致,通常是接口的包名倒 endpointInterface = "com.nobody.service.UserService" // 接口地址 ) @Component public class UserServiceImpl implements UserService { @Override public String addUser(String username, int age) { return "Add user success,username:" + username + ",age:" + age; } }
4:CXF配置spring
package com.nobody.config; import javax.xml.ws.Endpoint; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.nobody.service.UserService; /** * cxf配置 * * @author Μr.ηobοdy * * @date 2019-12-29 * */ @Configuration public class CxfConfig { @Autowired private Bus bus; @Autowired private UserService userService; @Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(bus, userService); endpoint.publish("/UserService"); return endpoint; } }
5:wsdl文件
默认服务在host:port/工程服务名/services/所在的路径下。由于本工程没设置服务名,故此接口发布路径为/services/UserService,wsdl文件路径为:apache
http://localhost:8080/services/UserService?wsdl
服务启动后,在浏览器输入以上地址便可看到wsdl文件:
6:客户端调用浏览器
package com.nobody.controller; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("demo") public class DemoController { @GetMapping("test") public String test(@RequestParam String username, @RequestParam int age) { String result = null; // 建立动态客户端 JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient("http://localhost:8080/services/UserService?wsdl"); // 若是须要密码时加上用户名和密码 // client.getOutInterceptors().add(new ClientLoginInterceptor(USERNAME,PASSWORD)); // 接受返回值对象 Object[] objects = new Object[0]; try { // 调用 objects = client.invoke("addUser", username, age); result = "调用webservice接口返回数据:" + objects[0]; } catch (Exception e) { e.printStackTrace(); } return result; } }
7:启动工程,在浏览器输入如下地址便可进行调用app
http://127.0.0.1:8080/demo/test?username=Mr.nobody&age=18
返回结果:
8:项目Github下载地址
Springboot整合cxf使用WebServiceide
本文同步分享在 博客“Μr.ηobοdy”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。svg