springboot与webservice整合,调用https接口

废话不多说,直接上代码
首先A系统整合webservice,并从mongdb中取数据
实体类:
import lombok.Data;
import org.springframework.data.annotation.Id;
import java.io.Serializable;
import java.util.Date;

/**

  • @Date: 2018-12-25 9:48

  • @Version 1.0
    */
    @Data
    public class AchieveExpress implements Serializable {

    @Id
    private String id;

    private String code;

    private String achieveExpressTitle;

    private String publisher;

    private String achieveExpressContent;

    private Byte status;//数据状

    private Date updateAt;

    private String updateBy;

    private String createTime;//创建的时间(年月日)

    private Date createAt;

    private String createBy;
    }

接口:

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import java.util.List;

/**

  • @Date: 2018-12-25 9:53

  • @Version 1.0
    */
    @WebService(name = “AchieveExpressService”, // 暴露服务名称
    targetNamespace = “http://service.web.tech.yankuan.com”) //命名空间,一般是接口的包名倒序
    public interface AchieveExpressService {

    @WebMethod
    @WebResult(name = “String”,targetNamespace = “”)
    List findByCode(@WebParam(name = “code”) String code);
    }

实现类:

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.terminus.boot.rpc.common.annotation.RpcProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.jws.WebService;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**

  • @Date: 2018-12-25 10:31

  • @Version 1.0
    */
    @WebService(serviceName = “AchieveExpressService”,//与前面接口一致
    targetNamespace = “http://service.web.tech.yankuan.com”, //与前面接口一致
    endpointInterface = “com.yankuan.tech.web.service.AchieveExpressService”) //接口地址
    @Component
    public class AchieveExpressServiceImpl implements AchieveExpressService {

    @Autowired
    MongoTemplate mongoTemplate;

    public List findByCode(String code) {
    Query query=new Query(Criteria.where(“code”).is(code));
    List dyns= mongoTemplate.find(query,AchieveExpress.class);
    return dyns;
    }

}

发布接口:

import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.xml.ws.Endpoint;

/**

  • @Date: 2019-01-08 13:58

  • @Version 1.0

  • webservice
    */
    @Configuration
    public class WebConfig {

    @Autowired
    private Bus bus;
    @Autowired
    CommonService service;

    @Autowired
    AchieveExpressService achieveExpressService;

    @Bean
    public Endpoint endpoint() {
    EndpointImpl endpoint = new EndpointImpl(bus, service);
    endpoint.publish("/CommonService");
    return endpoint;
    }

    @Bean
    public Endpoint endpoint2() {
    EndpointImpl endpoint = new EndpointImpl(bus, achieveExpressService);
    endpoint.publish("/AchieveExpressService");
    return endpoint;
    }

}

测试是否发布成功:填写wsdl地址
在这里插入图片描述
我们已经将项目部署到云端,分配的是http的接口

编写客户端代码:(此客户端代码,我将其变换一下也变成服务端,为另外一个系统提供webservice接口)

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;

/**

  • @Date: 2019-01-16 16:53

  • @Version 1.0
    */
    @WebService(name = “CxfClientService”, // 暴露服务名称
    targetNamespace = “http://service.web.datacenter.yankuan.com”) //命名空间,一般是接口的包名倒序
    public interface CxfClientService {

    @WebMethod
    @WebResult(name = “String”,targetNamespace = “”)
    Object findByCode();
    }

实现类:

import com.alibaba.fastjson.JSONObject;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.stereotype.Component;

import javax.jws.WebService;
import java.util.List;

@WebService(serviceName = “CxfClientService”,//与前面接口一致
targetNamespace = “http://service.web.datacenter.yankuan.com”, //与前面接口一致
endpointInterface = “com.yankuan.datacenter.web.service.CxfClientService”) //接口地址
@Component
public class CxfClientServiceImpl implements CxfClientService {
/**
* 动态调用方式
*/
public String findByCode() {
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(“http://technology-web-dev-6239.app.terminus.io/services/AchieveExpressService?wsdl”);
String json = null;
try {
// invoke(“方法名”,参数1,参数2,参数3…);
Object[] objects1= client.invoke(“findByCode”, “1”);
List object2 = (List) objects1[0];
json = JSONObject.toJSONString(object2);
System.out.println(“返回数据1111111111:” + json.toString());
} catch (Exception e) {
e.printStackTrace();
}
return json;
}

// public List findByCodeFor() {
//
// AchieveExpressService_Service service_service = new AchieveExpressService_Service();
// AchieveExpressService webCXFService = service_service.getAchieveExpressServiceImplPort();
// List achieveExpressList = webCXFService.findByCode(“1”);
//// String json = JSONObject.toJSONString(achieveExpressList);
// return achieveExpressList;
// }
}

加载本wsdl文件。成功。
在这里插入图片描述
由于,我们是要将这个数据还要作为服务端,供宁外一个系统调用,所以又写了代码。
发布上边的接口:

import io.terminus.boot.rpc.common.annotation.RpcConsumer;
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.xml.ws.Endpoint;

/**

  • @Date: 2019-01-08 13:58

  • @Version 1.0

  • webservice
    */
    @Configuration
    public class WebConfig {

    @Autowired
    private Bus bus;

    @Autowired
    CxfClientService cxfClientService;

    @Autowired
    private WebCXFService webCXFService;

    @Bean
    public Endpoint endpoint2() {
    EndpointImpl endpoint = new EndpointImpl(bus, cxfClientService);
    endpoint.publish("/CxfClientService");
    return endpoint;
    }

    @Bean
    public Endpoint sweptPayEndpoint() {
    EndpointImpl endpoint = new EndpointImpl(bus, webCXFService);
    endpoint.publish("/WebCXFService");
    return endpoint;
    }
    }
    由于我们要把自己的这套中间处理B项目,发布到阿里云,所以阿里云给我们自动生成了https地址
    C系统
    客户端代码:C系统调用B项目的数据
    @GetMapping(“findByCode1”)
    public String findByCode1() {
    // 创建动态客户端
    JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
    Client client = dcf.createClient(“file:/D:/CxfClientService.wsdl”);
    String objects = “”;
    try {
    // invoke(“方法名”,参数1,参数2,参数3…);
    // System.out.println(“返回数据:” + objects[0]);
    objects = (String) client.invoke(“findByCode”)[0];
    System.out.println(“返回数据:” + objects);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return objects;
    }

如下图:倒数第四行,由于生成的wsdl文件中地址是http的,所以要将在http后添加s,右键另存为,保存到本地,客户段代码加载本地的wsdl文件.
在这里插入图片描述
测试成功!

猜你喜欢

转载自blog.csdn.net/qq_37833810/article/details/86564406