一、pom.xml添加依赖
org.apache.cxf
cxf-rt-frontend-jaxws
3.2.0
org.apache.cxf
cxf-rt-transports-http
3.2.0
二、配置类
@Configuration
public class CxfConfig {
@Bean
public ServletRegistrationBean dispatcherServletName() {
// 发布服务名称 localhost:8080/cxf
return new ServletRegistrationBean(new CXFServlet(), "/cxf/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), new WebServiceServerImpl());// 绑定要发布的服务实现类
endpoint.publish("/sendMessage"); // 接口访问地址
endpoint.getInInterceptors().add(new LoggingInInterceptor());
endpoint.getOutInterceptors().add(new LoggingOutInterceptor());
return endpoint;
}
}
三、WebService服务端接口类
@WebService(targetNamespace="http://webService.demo.com")
@WebServiceProvider
public interface WebServiceServer {
@WebMethod
//@WebMethod标注该方法为webservice暴露的方法,用于向外公布,它修饰的方法是webservice方法,去掉也没影响的,类似一个注释信息。
public String sendMessage(@WebParam(name = "contentParams")@RequestBody String contentParams);
}
四、WebService服务端实现类
@javax.jws.WebService(serviceName="WebServiceServer",//对外发布的服务名
targetNamespace="http://webService.demo.com",//指定你想要的名称空间,通常使用使用包名反转
endpointInterface= "com.demo.wsdemo.webService.WebServiceServer")//服务接口全路径, 指定做SEI(Service EndPoint Interface)服务端点接口
@Component
public class WebServiceServerImpl implements WebServiceServer {
private static Logger log = LoggerFactory.getLogger(WebServiceServerImpl.class);
@Override
public String sendMessage(String contentParams) {
log.info("请求入参>>>>>" + contentParams);
}
}
五、WebService客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
// http://127.0.0.1:8883/cxf/f01?wsdl
Client client = dcf.createClient("http://"+ip+":"+port+"/cxf/sendMessage?wsdl");
Object[] response = client.invoke("sendMessage", content);
String body = response[0].toString();
log.info("返回数据>>>>>" + body);