首先新建一个项目,修改pom文件,添加cfx的依赖包,然后编写服务端和客户端代码,最后测试即可。
1、修改pom文件
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-databinding-jaxb</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-udp</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-addr</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-wsdl</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-policy</artifactId>
<version>3.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.neethi/neethi -->
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
2、编写服务端代码
接口:
import javax.jws.WebParam;
import javax.jws.WebService;
import java.util.List;
@WebService
public interface IUserWebService {
User getUserByName(@WebParam(name="userName",targetNamespace = "http://xx.com/") String userName);
List<User> getAllUsers();
}
实体类:
public class User {
private String id;
private String name;
public User(){
}
public User(String id,String userName){
this.id=id;
this.name=userName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
接口实现类:
import org.apache.cxf.common.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
public class UserWebServiceImpl implements IUserWebService{
private static List<User> users = new ArrayList<User>();
static {
users.add(new User("001", "李四"));
users.add(new User("002", "王五"));
users.add(new User("003", "赵六"));
}
public User getUserByName(String userName) {
if (StringUtils.isEmpty(userName)) {
return null;
}
for (User user: users) {
if (userName.equals(user.getName())) {
return user;
}
}
return null;
}
public List<User> getAllUsers() {
return users;
}
}
服务启动类:
import javax.xml.ws.Endpoint;
public class WebServiceApp {
public static void main(String[] args) {
// webservice接口
IUserWebService userService = new UserWebServiceImpl();
// 访问地址
String address="http://localhost:8080/userWebService";
// 发布服务
Endpoint.publish(address, userService);
System.out.println("web service 已启动");
}
}
3、编写客户端
客户端测试类:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import java.util.List;
public class WebServiceClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
// 服务端接口
svr.setServiceClass(IUserWebService.class);
// 服务端地址
svr.setAddress("http://localhost:8080/userWebService");
IUserWebService userWebService = (IUserWebService) svr.create();
List<User> users = userWebService.getAllUsers();
System.out.println(users);
User user=userWebService.getUserByName("李四");
System.out.println(user);
}
}
4、测试结果
浏览器访问 http://localhost:8080/userWebService?wsdl
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://chinaoly.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="UserWebServiceImplService" targetNamespace="http://chinaoly.com/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://chinaoly.com/" elementFormDefault="unqualified" targetNamespace="http://chinaoly.com/" version="1.0">
<xs:element name="getAllUsers" type="tns:getAllUsers"/>
<xs:element name="getAllUsersResponse" type="tns:getAllUsersResponse"/>
<xs:element name="getUserByName" type="tns:getUserByName"/>
<xs:element name="getUserByNameResponse" type="tns:getUserByNameResponse"/>
<xs:complexType name="getAllUsers">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getAllUsersResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:user"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="user">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:string"/>
<xs:element minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getUserByName">
<xs:sequence>
<xs:element minOccurs="0" name="userName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getUserByNameResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:user"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="getUserByNameResponse">
<wsdl:part element="tns:getUserByNameResponse" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:message name="getAllUsers">
<wsdl:part element="tns:getAllUsers" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:message name="getAllUsersResponse">
<wsdl:part element="tns:getAllUsersResponse" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:message name="getUserByName">
<wsdl:part element="tns:getUserByName" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:portType name="IUserWebService">
<wsdl:operation name="getAllUsers">
<wsdl:input message="tns:getAllUsers" name="getAllUsers"> </wsdl:input>
<wsdl:output message="tns:getAllUsersResponse" name="getAllUsersResponse"> </wsdl:output>
</wsdl:operation>
<wsdl:operation name="getUserByName">
<wsdl:input message="tns:getUserByName" name="getUserByName"> </wsdl:input>
<wsdl:output message="tns:getUserByNameResponse" name="getUserByNameResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="UserWebServiceImplServiceSoapBinding" type="tns:IUserWebService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getAllUsers">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getAllUsers">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getAllUsersResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getUserByName">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getUserByName">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getUserByNameResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="UserWebServiceImplService">
<wsdl:port binding="tns:UserWebServiceImplServiceSoapBinding" name="UserWebServiceImplPort">
<soap:address location="http://localhost:8080/userWebService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
编译器运行结果:
[User{id='001', name='李四'}, User{id='002', name='王五'}, User{id='003', name='赵六'}]
User{id='001', name='李四'}