废话不多说,直接上代码
首先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文件.
测试成功!