简单介绍:

A项目需要调用B项目的方法,可以通过webService(下面简写为ws)提供接口的服务,ws提供接口的方式比较多,这里写关于soap服务的提供和调用。

两个项目:ws_service(提供者)、ws_consumer(消费者)
在ws_service中存在 selectUserById方法,传递id,返回json字符串;

1.代码实例

服务提供者

添加所需jar包

<!--cxf-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-security</artifactId>
            <version>3.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.ws.security</groupId>
            <artifactId>wss4j</artifactId>
            <version>1.5.2</version>
        </dependency>

2.web.xml文件中添加 CXFServlet

<!-- 添加ws需要的 CXFServlet-->
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <!--设置拦截路径-->
        <url-pattern>/cxf/*</url-pattern>
    </servlet-mapping>

3.创建服务接口

注意添加 @WebService注解;添加在接口或者实现类上都可以。

package com.mr.user.service;
import javax.jws.WebService;
/**
 * Created by LI WAN on 2019/1/23.
 */
@WebService
public interface UserService {

    String userSelectById(Integer id);
}

4.创建接口实现类

实现类实现接口,重写接口中的方法,这里简单的输出一下,在项目中,可以通过spring注入UserService bean对象,通过 id 查询数据;将查询到的数据,转换为json返回即可。

package com.mr.user.service;

import com.mr.user.mapper.UserMapper;
import com.mr.utils.MyWsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by LI WAN on 2019/1/23.
 */

public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;

    @Override
    public String userSelectById(Integer id) {
        System.out.println("通过id:"+id+"查询数据");
        return "通过"+id+"查询到张三用户的数据";
    }

}


5.暴露服务接口

在spring配置文件中添加代码:

头约束
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://cxf.apache.org/jaxws
       http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 通过 bean标签将实现类添加在IOC容器中,也可以通过注解方式 -->
<bean id="userServerImpl" class="com.mr.server.UserServerImpl"></bean>
<!--
    暴露接口
    通过 <jaxws:endpoint ></jaxws:endpoint >标签暴露接口
    address:通过该地址访问到该接口服务
    implementor:语法:#对象名,这里引入的是spring IOC容器中的对象名
            实现类添加在容器中,可以通过<bean id="" class="" >
                              或者通过@Component() 注解
 -->
<jaxws:endpoint address="/user" implementor="#userServerImpl"></jaxws:endpoint>

6.启动项目,查看接口

访问路径:ip:端口号/项目名/CXFServlet(web.xml)中设置的拦截路径
webService 调用

7.查看接口

注意:记住这个路径,下面会使用到,
webService 调用
webService 调用

8.测试接口

写接口的目的是让别人调用,但是也要确保接口能使用,所以要对接口进行测试,查看是否可以使用,然后再将接口给别人调用。

newwebService 调用
webService 调用
webService 调用
开发接口 成功

服务消费者

1.创建消费者项目

2.jar包同上

3.添加 MyWsUtil 工具类

package com.mr.utils;

import com.mr.user.service.UserService;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

/**
 * Created by LI WAN on 2019/1/23.
 */
public class MyWsUtil {
    /**
     * 获取webservice服务接口
     * @param url :ws接口路径
     * @param t   :接口class对象
     * @param <T> :java类
     * @return
     */
    public static <T> T getMyWs(String url, Class<T> t) {
        JaxWsProxyFactoryBean jwpf = new JaxWsProxyFactoryBean();
        jwpf.setAddress(url);
        jwpf.setServiceClass(t);
        T create = (T)jwpf.create();
        return create;
    }

   //测试
    public static void main(String[] args) {
        //接口的wsdl路径
        String url = "http://localhost:8085/cxf/user?wsdl";
        //工具类获取到 接口
        UserService userService = MyWsUtil.getMyWs(url, UserService.class);
        //直接调用接口,传入参数,获取到返回值
        String s = userService.userSelectById(1);
        System.out.println(s);
    }
}

4.在项目中添加接口

webService 调用

5.调用

public static void main(String[] args) {
        //接口的wsdl路径
        String url = "http://localhost:8085/cxf/user?wsdl";
        //工具类获取到 接口
        UserService userService = MyWsUtil.getMyWs(url, UserService.class);
        //直接调用接口,传入参数,获取到返回值
        String s = userService.userSelectById(1);
        System.out.println(s);
    }

结果

webService 调用

相关文章: