springboot实现webservice接口以及动态客户端

maven坐标

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
        <version>3.2.5</version>
    </dependency>

编写服务端接口

@WebService
public interface WebServiceApi {

    @WebMethod
        // @WebMethod发布的方法,@WebParam:对参数的别名
    UserInfo getUserById(@WebParam(name = "senderID") String senderID,
                         @WebParam(name = "ServiceID")String ServiceID,
                         @WebParam(name = "EndUser")String[] EndUser,
                         @WebParam(name = "DataObjectCode")String DataObjectCode,
                         @WebParam(name = "Condition")String Condition,
                         @WebParam(name = "Requiredltems")String[] Requiredltems ,
                         @WebParam(name = "InfoCodeMode")String InfoCodeMode ,
                         @WebParam(name = "sfzh")String sfzh ,
                         @WebParam(name = "cxlb")String cxlb
    );

`

实现类,如果调用成功,打印传递参数,返回用户对象

@WebService(serviceName = "cfxUserWebService", targetNamespace = "http://api.webservice.example.com/")
@Component
@Log4j2
public class WeServiceImpl implements WebServiceApi{
    @Override
    public UserInfo getUserById(String senderID, String ServiceID, String[] EndUser, String DataObjectCode, String Condition, String[] Requiredltems, String InfoCodeMode, String sfzh, String cxlb) {
        log.info("senderID="+senderID);
        log.info("ServiceID="+ServiceID);
        log.info("EndUser="+EndUser.toString());
        log.info("DataObjectCode="+DataObjectCode);
        log.info("Condition="+Condition);
        log.info("Requiredltems="+Requiredltems.toString());
        log.info("InfoCodeMode="+InfoCodeMode);
        log.info("sfzh="+sfzh);
        log.info("cxlb="+cxlb);

        UserInfo user = new UserInfo();
        user.setAge(18);
        user.setUsername("孙悟空");
        user.setXb("男");
        user.setAddress("陕西省西安市");
        return user;

    }

配置类,发布接口

@Configuration
public class CxfConfig {

    /**
     * 1.自定义注册一个Servlet<br/>
     * 如果不自定义注册,则默认的匹配url是services,详见下方摘录的官文描述<br/>
     * 2.也可以在properties或yml文件中修改该路径,如cxf.path=/webservice,详见下方摘录的官文描述
     * 注意:beanName不能为dispatcherServlet
     * @return
     */
    @Bean(name = "cxfServlet")
    public ServletRegistrationBean cxfServlet() {
        return new ServletRegistrationBean(new CXFServlet(), "/webservice/*");
    }

    @Autowired
    private Bus bus;

    @Autowired
    private com.example.webservice.api.WebServiceApi WebServiceApi;

    // 配置CXF服务发布,默认服务是在host:port/services/发布地址
    @Bean
    public Endpoint userWebService() {
        EndpointImpl endpoint = new EndpointImpl(bus, WebServiceApi);
        endpoint.publish("/userWebService");
        return endpoint;
    }
}


启动 访问 http://localhost:8080/webservice/userWebService?wsdl若访问成功则服务端接口发布成功。


## 客户端 
   
 /**
     * 单/多参调用工具类(Object类型)
     *
     * @param cxfUrl url地址
     * @param method 调用方法名
     * @param obj 发送报文体
     * @return res 返回结果
     * @throws Exception 若有异常,在控制台输出异常,并将异常抛出
     */
    public static String cxfClientSingleParam(String cxfUrl, String method, Object... obj) {
        String res = null;
        // 创建动态客户端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient(cxfUrl);

        // 需要密码的情况需要加上用户名和密码
        // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
        Object[] objects = new Object[0];
        try {
            // 基本格式:invoke("方法名",参数1,参数2,参数3....);
            objects = client.invoke(method, obj);
            System.out.println("返回数据:" + objects[0].toString());
            res= JSONObject.toJSONString(objects[0]);
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }
        return res;
    }

测试代码

/**
 * 测试
 * @param args
 * @throws Exception
 */
public static void main(String[] args) throws Exception {
    String cxfUrl = "http://127.0.0.1:8080/webservice/userWebService?wsdl";
    String method = "getUserById";
    //参数
    String senderID = "1";
    String ServiceID = "2";
    List EndUser = null;
    String DataObjectCode = "";
    //查询字段拼接
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("tjxh", "1");
    String[] strings = {"610322199301132330"};
    jsonObject.put("value", strings);
    String Condition = jsonObject.toJSONString();
    List Requiredltems = null;
    String InfoCodeMode = "0000";
    String sfzh = "610322199301132330";
    String cxlb = "1";

    //调用服务
    CxfClient.cxfClientSingleParam(cxfUrl, method, senderID,ServiceID,EndUser,DataObjectCode,Condition,
            Requiredltems,InfoCodeMode,sfzh,cxlb
    );
}
返回执行结果以及日志输出

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满头黑发到中年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值