1.pom.xml配置cxf依赖包
<!-- cxf框架依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.12</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.12</version>
</dependency>
2.编写调用接口
package cn.com.app.cxf;
import javax.jws.WebService;
@WebService
public interface IDemoService {
public String getUser(String param) throws Exception;
}
3.编写调用接口实现类
package cn.com.app.cxfImpl;
import javax.jws.WebService;
import cn.com.app.cxf.IDemoService;
@WebService(endpointInterface = "cn.com.app.cxf.IDemoService",//服务接口路径
targetNamespace="http://cxf.app.com.cn/"//命名空间(接口包名的反缀)
)
public class DemoServiceImpl implements IDemoService {
@Override
public String getUser(String param) throws Exception {
System.out.println("传入的参数为:"+param);
String result = "<Flag>success</Flag>";
return result;
}
}
4.编写配置类发布接口
package cn.com.app.constant;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import cn.com.app.cxfImpl.DemoServiceImpl;
import javax.xml.ws.Endpoint;
@Configuration
public class WebServiceConfig {
//发布服务名称localhost:端口号/ws
//注意:方法名不能为dispatcherServlet,否则会把默认映射覆盖掉,导致无法访问其他url
@Bean
public ServletRegistrationBean disServlet(){
return new ServletRegistrationBean<CXFServlet>(new CXFServlet(), "/ws/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), new DemoServiceImpl());//绑定要发布的服务实现类
endpoint.publish("/user"); //接口访问地址
return endpoint;
}
}
5.访问http://localhost:端口/ws,出现接口列表页面并能访问接口,则发布成功
6.客户端调用接口
JaxWsDynamicClientFactory dcflient=JaxWsDynamicClientFactory.newInstance();
Client client=dcflient.createClient("http://localhost:端口/ws/user?wsdl");
Object[] objects=client.invoke("getUser","123456");//getUser为调用的接口方法名
System.out.println("返回结果:"+objects[0].toString());