基于CFX的Web Service服务端和客户端demo

首先新建一个项目,修改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='李四'}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值