-
引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.2.7</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
-
定义公共接口,限制行为
package com.zhqc.cloud.oms.webService; import javax.jws.WebService; /** * @author zdd */ @WebService(targetNamespace = "http://andot.org/webservice/zhqc/server") public interface ApiService { }
-
定义webservice
package com.zhqc.cloud.oms.webService.sku; import com.zhqc.cloud.oms.webService.ApiService; import com.zhqc.cloud.oms.webService.sku.entity.SkuKSFNoticeRequest; import com.zhqc.framerwork.common.model.vo.ResponseVO; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; /** * @author zdd */ @WebService(targetNamespace = "http://andot.org/webservice/zhqc/server") public interface ApiSkuService extends ApiService { /** * 创建订单 * * @param skuKSFNoticeRequest 请求参数 * @return ResponseVO 返回结果 */ @WebMethod ResponseVO wmsApi(@WebParam(name = "KSF_Notice", targetNamespace = "http://andot.org/webservice/zhqc/server") SkuKSFNoticeRequest skuKSFNoticeRequest); }
package com.zhqc.cloud.oms.webService.sku; import com.alibaba.fastjson.JSONObject; import com.zhqc.cloud.common.model.base.dto.SkuAddOrUpdateReqDTO; import com.zhqc.cloud.common.utils.ConvertUtil; import com.zhqc.cloud.oms.api.base.service.ErpSkuService; import com.zhqc.cloud.oms.api.order.service.ErpOrderService; import com.zhqc.cloud.oms.webService.sku.entity.SkuDetail; import com.zhqc.cloud.oms.webService.sku.entity.SkuKSFNoticeRequest; import com.zhqc.framerwork.common.model.vo.BusinessResponseVO; import com.zhqc.framerwork.common.model.vo.ResponseVO; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.jws.WebService; import java.util.List; /** * @author zdd */ @Component @WebService(name = "ApiService", targetNamespace = "http://andot.org/webservice/zhqc/server", endpointInterface = "com.zhqc.cloud.oms.webService.sku.ApiSkuService", portName = "10000") @Slf4j public class ApiSkuServiceImpl implements ApiSkuService { @Resource @Lazy private ErpSkuService erpSkuService; @Override public ResponseVO wmsApi(SkuKSFNoticeRequest skuKSFNoticeRequest) { try { log.info("接收到SAP数据-saveOrUpdateOfSku:{}", JSONObject.toJSONString(skuKSFNoticeRequest)); List<SkuDetail> skuDetailList = skuKSFNoticeRequest.getSkuElements().getSkuElement().getSkuDetail(); for (SkuDetail skuDetail : skuDetailList) { erpSkuService.saveOrUpdate(ConvertUtil.cast(skuDetail, SkuAddOrUpdateReqDTO.class)); } } catch (Exception e) { log.error("createSku error", e); return BusinessResponseVO.buildFailVo(e.getMessage()); } return ResponseVO.success(); } }
- 定义接收字段及层级
package com.zhqc.cloud.oms.webService.sku.entity; import lombok.Data; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * @author zdd */ @Data @XmlRootElement(name = "KSF_Notice", namespace = "http://andot.org/webservice/zhqc/server") public class SkuKSFNoticeRequest { private SkuAPIMessage skuApiMessage; private SkuElements skuElements; @XmlElement(name = "API_Message", namespace = "http://andot.org/webservice/zhqc/server") public SkuAPIMessage getSkuApiMessage() { return skuApiMessage; } @XmlElement(name = "Elements", namespace = "http://andot.org/webservice/zhqc/server") public SkuElements getSkuElements() { return skuElements; } }
package com.zhqc.cloud.oms.webService.sku.entity; import lombok.Data; import javax.xml.bind.annotation.XmlElement; /** * @author zdd */ @Data public class SkuAPIMessage { private String guid; private String sourceSys; private String targetSys; private String singleTargetSys; private String updateTime; private String appKey; private String isTest; private String isManualSend; @XmlElement(name = "Guid", namespace = "http://andot.org/webservice/zhqc/server") public String getGuid() { return guid; } @XmlElement(name = "SourceSys", namespace = "http://andot.org/webservice/zhqc/server") public String getSourceSys() { return sourceSys; } @XmlElement(name = "TargetSys", namespace = "http://andot.org/webservice/zhqc/server") public String getTargetSys() { return targetSys; } @XmlElement(name = "SingleTargetSys", namespace = "http://andot.org/webservice/zhqc/server") public String getSingleTargetSys() { return singleTargetSys; } @XmlElement(name = "UpdateTime", namespace = "http://andot.org/webservice/zhqc/server") public String getUpdateTime() { return updateTime; } @XmlElement(name = "AppKey", namespace = "http://andot.org/webservice/zhqc/server") public String getAppKey() { return appKey; } @XmlElement(name = "IsTest", namespace = "http://andot.org/webservice/zhqc/server") public String getIsTest() { return isTest; } @XmlElement(name = "IsManualSend", namespace = "http://andot.org/webservice/zhqc/server") public String getIsManualSend() { return isManualSend; } }
package com.zhqc.cloud.oms.webService.sku.entity; import lombok.Data; import javax.xml.bind.annotation.XmlElement; /** * @author zdd */ @Data public class SkuElements { private SkuElement skuElement; @XmlElement(name = "Element", namespace = "http://andot.org/webservice/zhqc/server") public SkuElement getSkuElement() { return skuElement; } }
package com.zhqc.cloud.oms.webService.sku.entity; import lombok.Data; import javax.xml.bind.annotation.XmlElement; import java.util.List; /** * @author zdd */ @Data public class SkuElement { private List<SkuDetail> skuDetail; @XmlElement(name = "DETAIL", namespace = "http://andot.org/webservice/zhqc/server") public List<SkuDetail> getSkuDetail() { return skuDetail; } }
package com.zhqc.cloud.oms.webService.sku.entity; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import javax.xml.bind.annotation.XmlElement; import java.math.BigDecimal; import java.util.Date; import java.util.Objects; import java.util.stream.Stream; /** * @author zdd */ @Data public class SkuDetail { /** * 物料类型 */ private String mtart; /** * 物料类型描述 */ private String mtbez; /** * 物料号 */ private String matnr; /** * 物料描述 */ private String maktx; /** * 物料简称 */ private String normt; /** * 删除标识 */ private String lvorm; /** * 基本计量单位 */ private String meins; /** * 基本计量单位描述 */ private String mseht; /** * 附加计量单位1 */ private String meins1; /** * 附加计量单位描述1 */ private String mseht1; /** * 转换关系1 */ private String rate1; /** * 附加计量单位2 */ private String meins2; /** * 附加计量单位描述2 */ private String mseht2; /** * 转换关系2 */ private String rate2; /** * 附加计量单位3 */ private String meins3; /** * 附加计量单位描述3 */ private String mseht3; /** * 转换关系3 */ private String rate3; /** * 附加计量单位4 */ private String meins4; /** * 附加计量单位描述4 */ private String mseht4; /** * 转换关系4 */ private String rate4; /** * 附加计量单位5 */ private String meins5; /** * 附加计量单位描述5 */ private String mseht5; /** * 转换关系5 */ private String rate5; /** * 物料组 */ private String matkl; /** * 物料组描述 */ private String wgbez; /** * 跨工厂物料标识 */ private String mstae; /** * 口味码 */ private String labor; /** * 口味码描述 */ private String labtxt; /** * 产品层次 */ private String prdha; /** * 税收分类编码 */ private String zeinr; /** * 毛重/运费计算分摊系数 */ private BigDecimal brgew; /** * 重量单位 */ private String gewei; /** * 净重 */ private BigDecimal ntgew; /** * 业务量 */ private BigDecimal volum; /** * 大小/量纲 */ private String groes; /** * 国际商品编码(欧洲商品编码/通用产品代码) */ private String ean11; /** * 宽度 */ private BigDecimal breit; /** * 高度 */ private BigDecimal hoehe; /** * 长度 */ private BigDecimal laeng; /** * 长度/宽度/高度的尺寸单位 */ private String meabm; /** * 最短剩余货架寿命 */ private String mhdrz; /** * 总货架寿命 */ private String mhdhb; /** * 货架寿命到期日的期间标识 */ private String iprkz; /** * 物料的税分类 */ private String taxkm; /** * 税分类描述 */ private String vtext; /** * 同价汇总码-销售:销售组织数据2 */ private String mvgr1; /** * 正常箱折算系数 */ private String mvgr2; /** * 物料规格 */ private String mvgr4; /** * 标准价格 */ private String stprs; /** * 价格单位 */ private String peinh; /** * 绿灯天数 */ private BigDecimal glts; /** * 黄灯天数 */ private BigDecimal ylts; /** * 红灯天数 */ private BigDecimal rlts; /** * 业务量 */ private BigDecimal zdwhsz; /** * 评估分类 */ private String bklas; /** * 基准数量-每栈板标准箱数 */ private BigDecimal vbamg; @XmlElement(name = "MTART", namespace = "http://andot.org/webservice/zhqc/server") public String getMtart() { return mtart; } @XmlElement(name = "MTBEZ", namespace = "http://andot.org/webservice/zhqc/server") public String getMtbez() { return mtbez; } @XmlElement(name = "MATNR", namespace = "http://andot.org/webservice/zhqc/server") public String getMatnr() { return matnr; } @XmlElement(name = "MAKTX", namespace = "http://andot.org/webservice/zhqc/server") public String getMaktx() { return maktx; } @XmlElement(name = "NORMT", namespace = "http://andot.org/webservice/zhqc/server") public String getNormt() { return normt; } @XmlElement(name = "LVORM", namespace = "http://andot.org/webservice/zhqc/server") public String getLvorm() { return lvorm; } @XmlElement(name = "MEINS", namespace = "http://andot.org/webservice/zhqc/server") public String getMeins() { return meins; } @XmlElement(name = "MSEHT", namespace = "http://andot.org/webservice/zhqc/server") public String getMseht() { return mseht; } @XmlElement(name = "MEINS1", namespace = "http://andot.org/webservice/zhqc/server") public String getMeins1() { return meins1; } @XmlElement(name = "MSEHT1", namespace = "http://andot.org/webservice/zhqc/server") public String getMseht1() { return mseht1; } @XmlElement(name = "RATE1", namespace = "http://andot.org/webservice/zhqc/server") public String getRate1() { return rate1; } @XmlElement(name = "MEINS2", namespace = "http://andot.org/webservice/zhqc/server") public String getMeins2() { return meins2; } @XmlElement(name = "MSEHT2", namespace = "http://andot.org/webservice/zhqc/server") public String getMseht2() { return mseht2; } @XmlElement(name = "RATE2", namespace = "http://andot.org/webservice/zhqc/server") public String getRate2() { return rate2; } @XmlElement(name = "MEINS3", namespace = "http://andot.org/webservice/zhqc/server") public String getMeins3() { return meins3; } @XmlElement(name = "MSEHT3", namespace = "http://andot.org/webservice/zhqc/server") public String getMseht3() { return mseht3; } @XmlElement(name = "RATE3", namespace = "http://andot.org/webservice/zhqc/server") public String getRate3() { return rate3; } @XmlElement(name = "MEINS4", namespace = "http://andot.org/webservice/zhqc/server") public String getMeins4() { return meins4; } @XmlElement(name = "MSEHT4", namespace = "http://andot.org/webservice/zhqc/server") public String getMseht4() { return mseht4; } @XmlElement(name = "RATE4", namespace = "http://andot.org/webservice/zhqc/server") public String getRate4() { return rate4; } @XmlElement(name = "MEINS5", namespace = "http://andot.org/webservice/zhqc/server") public String getMeins5() { return meins5; } @XmlElement(name = "MSEHT5", namespace = "http://andot.org/webservice/zhqc/server") public String getMseht5() { return mseht5; } @XmlElement(name = "RATE5", namespace = "http://andot.org/webservice/zhqc/server") public String getRate5() { return rate5; } @XmlElement(name = "MATKL", namespace = "http://andot.org/webservice/zhqc/server") public String getMatkl() { return matkl; } @XmlElement(name = "WGBEZ", namespace = "http://andot.org/webservice/zhqc/server") public String getWgbez() { return wgbez; } @XmlElement(name = "MSTAE", namespace = "http://andot.org/webservice/zhqc/server") public String getMstae() { return mstae; } @XmlElement(name = "LABOR", namespace = "http://andot.org/webservice/zhqc/server") public String getLabor() { return labor; } @XmlElement(name = "LABTXT", namespace = "http://andot.org/webservice/zhqc/server") public String getLabtxt() { return labtxt; } @XmlElement(name = "PRDHA", namespace = "http://andot.org/webservice/zhqc/server") public String getPrdha() { return prdha; } @XmlElement(name = "ZEINR", namespace = "http://andot.org/webservice/zhqc/server") public String getZeinr() { return zeinr; } @XmlElement(name = "BRGEW", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getBrgew() { return brgew; } @XmlElement(name = "GEWEI", namespace = "http://andot.org/webservice/zhqc/server") public String getGewei() { return gewei; } @XmlElement(name = "NTGEW", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getNtgew() { return ntgew; } @XmlElement(name = "VOLUM", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getVolum() { return volum; } @XmlElement(name = "GROES", namespace = "http://andot.org/webservice/zhqc/server") public String getGroes() { return groes; } @XmlElement(name = "EAN11", namespace = "http://andot.org/webservice/zhqc/server") public String getEan11() { return ean11; } @XmlElement(name = "BREIT", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getBreit() { return breit; } @XmlElement(name = "HOEHE", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getHoehe() { return hoehe; } @XmlElement(name = "LAENG", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getLaeng() { return laeng; } @XmlElement(name = "MEABM", namespace = "http://andot.org/webservice/zhqc/server") public String getMeabm() { return meabm; } @XmlElement(name = "MHDRZ", namespace = "http://andot.org/webservice/zhqc/server") public String getMhdrz() { return mhdrz; } @XmlElement(name = "MHDHB", namespace = "http://andot.org/webservice/zhqc/server") public String getMhdhb() { return mhdhb; } @XmlElement(name = "IPRKZ", namespace = "http://andot.org/webservice/zhqc/server") public String getIprkz() { return iprkz; } @XmlElement(name = "TAXKM", namespace = "http://andot.org/webservice/zhqc/server") public String getTaxkm() { return taxkm; } @XmlElement(name = "VTEXT", namespace = "http://andot.org/webservice/zhqc/server") public String getVtext() { return vtext; } @XmlElement(name = "MVGR1", namespace = "http://andot.org/webservice/zhqc/server") public String getMvgr1() { return mvgr1; } @XmlElement(name = "MVGR2", namespace = "http://andot.org/webservice/zhqc/server") public String getMvgr2() { return mvgr2; } @XmlElement(name = "MVGR4", namespace = "http://andot.org/webservice/zhqc/server") public String getMvgr4() { return mvgr4; } @XmlElement(name = "STPRS", namespace = "http://andot.org/webservice/zhqc/server") public String getStprs() { return stprs; } @XmlElement(name = "PEINH", namespace = "http://andot.org/webservice/zhqc/server") public String getPeinh() { return peinh; } @XmlElement(name = "GLTS", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getGlts() { return glts; } @XmlElement(name = "YLTS", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getYlts() { return ylts; } @XmlElement(name = "RLTS", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getRlts() { return rlts; } @XmlElement(name = "ZDWHSZ", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getZdwhsz() { return zdwhsz; } @XmlElement(name = "BKLAS", namespace = "http://andot.org/webservice/zhqc/server") public String getBklas() { return bklas; } @XmlElement(name = "VBAMG", namespace = "http://andot.org/webservice/zhqc/server") public BigDecimal getVbamg() { return vbamg; } }
-
发布webservice
package com.zhqc.cloud.oms.webService; 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.beans.factory.annotation.Qualifier; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; import javax.xml.ws.Endpoint; import java.util.ArrayList; import java.util.List; /** * @Author zdd */ @Configuration public class WebServicePublishConfig { @Bean public ServletRegistrationBean wsServlet() { return new ServletRegistrationBean(new CXFServlet(), "/ws/*"); } @Resource private List<ApiService> apiServices; @Resource @Qualifier(Bus.DEFAULT_BUS_ID) private SpringBus bus; @Bean public Endpoint[] endpoint() { List<Endpoint> endpointList = new ArrayList<>(apiServices.size()); for (ApiService apiService : apiServices) { EndpointImpl endpoint = new EndpointImpl(bus, apiService); String simpleName = apiService.getClass().getSimpleName(); //如果有Impl结尾的类名,去掉Impl if (simpleName.endsWith("Impl")) { simpleName = simpleName.substring(0, simpleName.length() - 4); } endpoint.publish("/" + simpleName); endpointList.add(endpoint); } return endpointList.toArray(new Endpoint[0]); } }
-
测试:
http://ip:port/ws/ApiSkuService?wsdl
参数:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <wmsApi xmlns="http://andot.org/webservice/zhqc/server"> <KSF_Notice> <API_Message> <Guid>333</Guid> <SourceSys>1103</SourceSys> <TargetSys>1104</TargetSys> <SingleTargetSys>1105</SingleTargetSys> <UpdateTime>20230627093301</UpdateTime> <AppKey>1</AppKey> <IsTest>2</IsTest> <IsManualSend>3</IsManualSend> </API_Message> <Elements> <Element> <DETAIL> <MTART></MTART> <MTBEZ></MTBEZ> <MATNR></MATNR> <MAKTX></MAKTX> <NORMT></NORMT> <LVORM></LVORM> <MEINS></MEINS> <MSEHT></MSEHT> <MEINS1></MEINS1> <MSEHT1></MSEHT1> <RATE1></RATE1> <MEINS2></MEINS2> <MSEHT2></MSEHT2> <RATE2></RATE2> <MEINS3></MEINS3> <MSEHT3></MSEHT3> <RATE3></RATE3> <MEINS4></MEINS4> <MSEHT4></MSEHT4> <RATE4></RATE4> <MEINS5></MEINS5> <MSEHT5></MSEHT5> <RATE5></RATE5> <MATKL></MATKL> <WGBEZ></WGBEZ> <MSTAE></MSTAE> <LABOR></LABOR> <LABTXT></LABTXT> <PRDHA></PRDHA> <ZEINR></ZEINR> <BRGEW></BRGEW> <GEWEI></GEWEI> <NTGEW></NTGEW> <VOLUM></VOLUM> <GROES></GROES> <EAN11></EAN11> <BREIT></BREIT> <HOEHE></HOEHE> <LAENG></LAENG> <MEABM></MEABM> <MHDRZ></MHDRZ> <MHDHB></MHDHB> <IPRKZ></IPRKZ> <TAXKM></TAXKM> <VTEXT></VTEXT> <MVGR1></MVGR1> <MVGR2></MVGR2> <MVGR4></MVGR4> <STPRS></STPRS> <PEINH></PEINH> <GLTS></GLTS> <YLTS></YLTS> <RLTS></RLTS> <ZDWHSZ></ZDWHSZ> <BKLAS></BKLAS> <VBAMG></VBAMG> </DETAIL> </Element> </Elements> </KSF_Notice> </wmsApi> </soap:Body> </soap:Envelope>
springboot实现WebService接口
最新推荐文章于 2024-06-21 18:06:38 发布