webservice客户端和服务端
需求:提供上报接口录入数据
先拿到对方的wsdl
然后根据里面的参数去封装对象
对应方法
搭建项目
pom.xml依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
主要是一个config文件
@Configuration
public class CxfConfig {
//默认servlet路径/*,可自定义
@Bean
public ServletRegistrationBean dispatcherServlet2() {
return new ServletRegistrationBean(new CXFServlet(), "/scdeap/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
//终端路径
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), new TestServiceImpl());
endpoint.publish("/services");
return endpoint;
}
}
注意:dispatcherServlet这个名字不能用,会和mvc的重复,换个名字就好
然后是interface和实现类,注入dao做入库操作
@WebService(name = "TestService", targetNamespace = "http://localhost:88/scdeap/services")
public interface TestService {
@WebMethod
public void saveLift(@WebParam(name = "reportParameter") ReportParameter reportParameter);
}
}
@WebService(name = "test",
targetNamespace = "http://localhost:88/scdeap/services",
endpointInterface = "com.xxx.service.TestService")
@Component
@Log4j2
public class TestServiceImpl implements TestService {
@Resource
private LiftDataInterfaceDao liftDataInterfaceDao;
@Override
public void saveLift(ReportParameter reportParameter) {
try {
LiftDataInterface liftDataInterface = setParameter(reportParameter);
liftDataInterfaceDao.insert(liftDataInterface);
} catch (Exception e) {
log.error("电梯上传失败");
log.error(e);
e.printStackTrace();
}
}
实体类
上面记得加XmlRootElement
@XmlRootElement(name="DATA")
@Data
public class DATA implements Serializable {
private String OIDNO;
private String Run_status;
}
基本上到这里就可以启动了,启动后访问
http://localhost:8080/scdeap/services?wsdl
有页面生成说明可以了
测试,客户端
2021的idea找不到webservice client的生成的。最后下了2019的版本
然后会生成一堆东西
就可以传参调用方法了
后记
之前自己搭建了好久这项目,其实不用,直接可以生成
这里就可以了,生成后把自己要用的业务逻辑放进去就好了。生成对应的客户端代码,然后发布使用。