尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

spring cloud发布webservice应用和调用

spring cloud发布webservice应用和调用 1.创建configpackagecn.yuanqiao.cqbc.webservice.config;/** * author 赵常飞 * date 2024/6/29 17:22 */importcn.yuanqiao.cqbc.webservice.service.CqbcWebservice;importcn.yuanqiao.cqbc.webservice.service.impl.CqbcWebserviceImpl;importorg.apache.cxf.Bus;importorg.apache.cxf.bus.spring.SpringBus;importorg.apache.cxf.jaxws.EndpointImpl;importorg.apache.cxf.transport.servlet.CXFServlet;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.web.servlet.ServletRegistrationBean;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjavax.xml.ws.Endpoint;/** *Author: 赵常飞 *Date: 2024/6/29 17:22 *Description: *Note: */ConfigurationpublicclassCqbcWebServiceConfig{Bean(namecxfServlet)// 注入servlet bean name不能dispatcherServlet ,否则会覆盖dispatcherServletpublicServletRegistrationBeanCXFServletcxfServlet(){returnnewServletRegistrationBeanCXFServlet(newCXFServlet(),/webservice/*);}Bean(nameBus.DEFAULT_BUS_ID)publicSpringBusspringBus(){returnnewSpringBus();}/*接口和实现类,可以是多个,*/BeanpublicCqbcWebservicecqbcWebservice(){returnnewCqbcWebserviceImpl();}BeanQualifier(identifier1)//多个时,用于区分publicEndpointendpoint(){// 参数二是SEI实现类对象EndpointImplendpointnewEndpointImpl(this.springBus(),this.cqbcWebservice());// 发布服务endpoint.publish(/CqbcWebservice);returnendpoint;}}2.接口WebService(nameCqbcSaveArchive,//该名字可自定义targetNamespacehttp://service.webservice.cqbc.yuanqiao.cn// 该URL一般为当前包名的倒序)publicinterfaceCqbcWebservice{StringCqbcSaveArchive(WebParam(namepaketInfo)StringpaketInfo,WebParam(namefile2base64)Stringfile2base64);}3.实现类importcn.yuanqiao.cqbc.webservice.service.CqbcWebservice;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Service;importjavax.jws.WebService;ServiceWebService(serviceNameCqbcSaveArchive,// 与接口中的name相同targetNamespacehttp://service.webservice.cqbc.yuanqiao.cn,// 一般为当前包名的倒序endpointInterfacecn.yuanqiao.cqbc.webservice.service.CqbcWebservice// 为接口类的包名)publicclassCqbcWebserviceImplimplementsCqbcWebservice{privatefinalLoggerloggerLoggerFactory.getLogger(CqbcWebserviceImpl.class);OverridepublicStringCqbcSaveArchive(StringpaketInfo,Stringfile2base64){logger.info(paketInfo{},paketInfo);logger.info(file2base64{},file2base64);returnnull;}}4.调用NamingServicenamingServicenacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());InstanceinstancenamingService.selectOneHealthyInstance(ServiceNameConstants.CQBC_SERVICE);//推送Stringurlhttp://instance.getIp():instance.getPort()/webservice/CqbcWebservice?wsdl;//构造xml参数StringBuffersbnewStringBuffer();sb.append(?xml version\1.0\ encoding\UTF-8\?soapenv:Envelope xmlns:soapenv\http://schemas.xmlsoap.org/soap/envelope/\ xmlns:xsd\http://www.w3.org/2001/XMLSchema\ xmlns:xsi\http://www.w3.org/2001/XMLSchema-instance\soapenv:Bodyns1:CqbcSaveArchive soapenv:encodingStyle\http://schemas.xmlsoap.org/soap/encoding/\ xmlns:ns1\http://service.webservice.cqbc.yuanqiao.cn\paketInfo xsi:type\xsd:string\123456789/paketInfofile2base64 xsi:type\xsd:string\123456789/file2base64/ns1:CqbcSaveArchive/soapenv:Body/soapenv:Envelope);try{StringreturnmsgwebServiceHttp.sendWebService(url,CqbcWebservice,CqbcSaveArchive,sb);System.out.println(returnmsg);}catch(Exceptione){e.printStackTrace();}5.工具类packagecn.yuanqiao.archive.danganzhengli.utils;/** * author 赵常飞 * date 2024/3/25 19:09 */importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.dataformat.xml.XmlMapper;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.URL;importjava.net.URLConnection;/** *Author: 赵常飞 *Date: 2024/3/25 19:09 *Description: *Note: */publicclasswebServiceHttp{publicstaticStringsendWebService(Stringurl,StringisClass,StringisMethod,StringBufferparamsXml)throwsException{//传过来的xml格式StringxmlparamsXml.toString();if(xmlnull){return传入xml参数不能为空;}URLsopulnewURL(url);//获取连接URLConnectionconnentionsopul.openConnection();//缓存设置connention.setUseCaches(false);//设置输入输出新创建的connection默认是没有读写权限的connention.setDoInput(true);connention.setDoOutput(true);//设置请求头connention.setRequestProperty(Content-Length,xml.length());//这里设置请求头类型为xml,传统http请求的是超文本传输格式text/htmlconnention.setRequestProperty(Content-Type,text/xml; charsetutf-8);//调用的类名方法名connention.setRequestProperty(isClass,isMethod);//这里如果携带token设置token,没传则不设置// if (token!null){// connention.setRequestProperty(Authorization,Bearer token);// }OutputStreamosconnention.getOutputStream();OutputStreamWriteroswnewOutputStreamWriter(os,utf-8);//写入传过来的xml文件格式osw.write(xml);//释放资源osw.flush();osw.close();//下面获取webservice返回过来的流InputStreamisconnention.getInputStream();if(is!null){byte[]bytesnewbyte[0];bytesnewbyte[is.available()];is.read(bytes);//将字节数组转换为字符串输出StringoutXmlnewString(bytes,UTF-8);//webservice返回为xml,在此处解析为json,只取返回值XmlMapperxmlMappernewXmlMapper();JsonNodejsonNodexmlMapper.readValue(outXml,JsonNode.class);ObjectMapperjsonMappernewObjectMapper();StringjsonjsonMapper.writeValueAsString(jsonNode);JSONObjectjsonObjectJSON.parseObject(json);returnjsonObject.getJSONObject(Body).getJSONObject(isMethodResponse).getJSONObject(return).toString();}returnnull;}}
返回列表