1.导入jar包
org.apache.cxf
cxf-spring-boot-starter-jaxws
3.4.0
2.新建接口
package com.das.consultation.webService.service;
import com.das.consultation.webService.config.SoapConst;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
* created by jun on 2020/9/8
* describe:webservice接口
* version 1.0
*/
@WebService(targetNamespace = SoapConst.NAMESPACE_URI,name = "claSoap")
public interface ScheduleService {
@WebMethod
String HPS_getSchedule(@WebParam(name = "xmlStr") String xmlStr);
}
3.接口实现(具体接口实现根据自己的来)
package com.das.consultation.webService.service.Impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.das.consultation.entity.XmlMessage;
import com.das.consultation.entity.app.ScheduleInfo;
import com.das.consultation.util.JsonXmlUtils;
import com.das.consultation.util.PublicMethodUtil;
import com.das.consultation.webService.config.SoapConst;
import com.das.consultation.webService.service.ScheduleService;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import javax.jws.WebService;
import java.util.ArrayList;
import java.util.List;
/**
* created by jun on 2020/9/11
* describe:
* version 1.0
*/
@WebService(
targetNamespace = SoapConst.NAMESPACE_URI, //wsdl命名空间
name = "claSoap", //portType名称 客户端生成代码时 为接口名称
serviceName = "claSoapSoapService", //服务name名称
portName = "claSoapPortName", //port名称
endpointInterface = "com.das.consultation.webService.service.ScheduleService")
public class ScheduleServiceImpl implements ScheduleService {
@Override
public String HPS_getSchedule(@RequestBody String xmlStr) {
JSONObject jsonObject = JsonXmlUtils.xmlToJson(xmlStr);
JSONObject request = jsonObject.getJSONObject("request");
JSONObject data = request.getJSONObject("data");
String orgCode = data.getString("orgcode");
String depId = data.getString("depid");
String doctorId = data.getString("doctorid");
String beginDate = data.getString("begindate");
String endDate = data.getString("enddate");
List scheduleInfos = new ArrayList<>();
ScheduleInfo scheduleInfo = new ScheduleInfo();
scheduleInfo.setScheduleid("213142494");
scheduleInfo.setDepid("12542076");
scheduleInfo.setDepname("眼科");
scheduleInfo.setDoctorid("235t32723115");
scheduleInfo.setDoctorname("曾医生");
scheduleInfo.setVisitdate(PublicMethodUtil.ToDateTime("2020-8-12",4));
scheduleInfo.setIsyuyue("1");
scheduleInfo.setTimetype("白班");
scheduleInfo.setReglevel("普通门诊");
String str = PublicMethodUtil.getStringDate();
scheduleInfo.setBegintime(PublicMethodUtil.strToDate(str));
scheduleInfo.setEndtime(PublicMethodUtil.strToDate(str));
scheduleInfo.setGuahaoamt((float) 23.21);
scheduleInfo.setVisitamt((float) 30.34);
scheduleInfo.setYuyuemax(214);
scheduleInfo.setYuyuenum(143);
scheduleInfos.add(scheduleInfo);
XmlMessage xmlMessage = new XmlMessage();
JSONArray array = null;
try {
array = (JSONArray) JSON.toJSON(scheduleInfos);
if (!StringUtils.isEmpty(orgCode) && !StringUtils.isEmpty(depId)&& !StringUtils.isEmpty(doctorId) && !StringUtils.isEmpty(beginDate) && !StringUtils.isEmpty(endDate)) {
if (array.size() != 0) {
xmlMessage.setResult("0");
xmlMessage.setDesc("查询成功");
} else {
xmlMessage.setResult("1");
xmlMessage.setDesc("失败");
return JsonXmlUtils.jsonToXml(null,xmlMessage);
}
} else {
xmlMessage.setResult("1");
xmlMessage.setDesc("参数错误");
return JsonXmlUtils.jsonToXml(null,xmlMessage);
}
} catch (Exception e) {
e.printStackTrace();
xmlMessage.setResult("1");
xmlMessage.setDesc("查询异常");
return JsonXmlUtils.jsonToXml(null,xmlMessage);
}
return JsonXmlUtils.jsonArrayToXml(array,xmlMessage,"schedule",null,null);
}
}
4.发布webservice配置类
package com.das.consultation.webService.config;
import com.das.consultation.webService.service.Impl.ScheduleServiceImpl;
import com.das.consultation.webService.service.ScheduleService;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;
/**
* created by jun on 2020/9/11
* describe:
* version 1.0
*/
@Configuration
public class CxfConfig {
@Bean("cxfServletRegistration")
public ServletRegistrationBean dispatcherServlet() {
//注册servlet 拦截/NBA 开头的请求 不设置 默认为:/services/*
return new ServletRegistrationBean(new CXFServlet(), "/cla/*");
}
/**
* 申明业务处理类 当然也可以直接 在实现类上标注 @Service
* @author ShiFan
*/
@Bean
public ScheduleService scheduleService() {
return new ScheduleServiceImpl();
}
/**
* 非必要项
*/
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
/**
* 发布endpoint
*/
@Bean
public Endpoint endpoint(ScheduleService scheduleService) {
EndpointImpl endpoint = new EndpointImpl(springBus(), scheduleService);
//发布地址
endpoint.publish("/claService");
return endpoint;
}
}
5.命名空间类
package com.das.consultation.webService.config;
/**
* created by jun on 2020/9/2
* describe:空间名
* version 1.0
*/
public class SoapConst {
public static final String NAMESPACE_URI = "http://service.webService.consultation.das.com";
}
访问地址:[http://localhost:8083/cla/claService?wsdl
(http://localhost:8083/cla/claService?wsdl)出现以下画面则成功发布:
如果运行出现以下错误:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-09-11 13:23:44.965 ERROR 28612 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
The Bean Validation API is on the classpath but no implementation could be found
Action:
Add an implementation, such as Hibernate Validator, to the classpath
Process finished with exit code 1
说明是springBoot版本和cxf版本不匹配比如我的版本是2.3.2对应cxf版本应是3.4.0如下:
springboot版本
org.springframework.boot
spring-boot-starter-parent
2.3.2.RELEASE
cxf版本
org.apache.cxf
cxf-spring-boot-starter-jaxws
3.4.0
服务端项目结构:
6.测试cxf根据wsdl生成客户端代码
进入cxf安装目录如下:
进入cmd命令输入如下命令则生成如上图红色框的客户段代码:
wsdl2java -encoding utf8 -p com.das.webservice.cxf -d D:\MyStudySpace\webservice\webserviceClient\src\main\java\com\das\webservice\cxf http://localhost:8083/cla/claService?wsdl
7.新建项目webserviceClient
拷贝生成的代码到客户端如下:
8.新建测试类ClientTest
package com.das.webservice.cxf;
/**
* created by jun on 2020/9/11
* describe:
* version 1.0
*/
public class ClientTest {
public static void main(String[] args) {
ClaSoap claSoap = new ClaSoapSoapService().getClaSoapPortName();
String result = claSoap.hpsGetSchedule("231434123122319645 123123 1435425998 2018-10-3 2018-10-3 ");
System.out.println(result);
}
}
运行代码打印如下:
0 查询成功 1 Wed Aug 12 00:00:00 CST 2020 Fri Sep 11 15:14:05 CST 2020 30.34 Fri Sep 11 15:14:05 CST 2020 曾医生 普通门诊 23.21 235t32723115 214 12542076 白班 143 眼科 213142494