这里是一个简单的例子
服务端pom文件如下
<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>
<groupId>cxf</groupId>
<artifactId>cxf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.12</version>
</dependency>
</dependencies>
</project>
这里只依赖可一个Cxf组件,服务端配置类如下:
@Configuration
public class TestConfig {
//这里有默认值,如果不配置默认是/services/*
@Bean
public ServletRegistrationBean dispatcherServlet() {
return new ServletRegistrationBean(new CXFServlet(), "/test/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public CxfService cxfService() {
return new CxfServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), cxfService());
endpoint.publish("/user");
return endpoint;
}
}
服务接口类如下
@WebService(targetNamespace="http://cxf.cgj")
public interface CxfService {
@WebMethod(operationName="sayHello")
String sayHello(@WebParam(name="User") User user);
}
服务接口实现类如下
@WebService(targetNamespace="http://cxf.cgj",endpointInterface="cgj.cxf.CxfService")
public class CxfServiceImpl implements CxfService {
@Override
public String sayHello(User user) {
return "hello "+ user.toString();
}
}
这里@WebService注解标明是一个服务类,targetNamespace指发布的命名空间,接口和实现类必须一致要不然会报错,如果不指定默认是当前包路径;endpointInterface指发布的哪个类的方法,这里指定接口的路径,表示对外发布接口中的方法,如果不指定默认发布当前类的所有方法(注意实现类比接口方法多的情况);@WebMethod修饰一个发布的方法,可以改方法名或者排除不发布;
客户端pom与服务端一致,客户端代码如下
public static void main(String[] args) throws Exception {
JaxWsDynamicClientFactory dcf =JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client =dcf.createClient("http://localhost:8080/test/user?wsdl");
User user=new User();
Body body=new Body();
body.setGender("男");
user.setBody(body);
Object[] objects=client.invoke("sayHello",user);
System.out.println("*****"+objects[0].toString());
}
输出结果如下
hello User [sysHead=null, body=Body [name=null, gender=男]]