【WSDL】WebService描述语言的实践
问题的产生:
上班写了一个改接口的需求,其中涉及了一个WSDL这么一个概念
WSDL是个啥???? 翻了翻项目,里面就是个文件,以wsdl为后缀名
内容结构和XML相似,或者直接说是XML文件也可以
线索分析:
首先这个文件是放在Java包中的,这很神奇,一般Java包中只会存放Java文件
在这个项目中,wsdl文件也放在Java包中

所在的模块:wsdl所存在的位置是放在Interface模块中,也就是说,WSDL文件是和接口相关的
我们随意全文查找一个接口的信息来看看:

SD08本身:
package com.yonyou.dcs.intf.server.SD08; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; /**
* <p>anonymous complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="in" type="{http://www.w3.org/2001/XMLSchema}string"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"in"
})
@XmlRootElement(name = "SD08")
public class SD08 { @XmlElement(required = true)
protected String in; /**
* 获取in属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getIn() {
return in;
} /**
* 设置in属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setIn(String value) {
this.in = value;
} }
SD08Request:
package com.yonyou.dcs.intf.server.SD08; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType; /**
* <p>SD08_Request complex type?? Java ??
* */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SD08_Request", propOrder = {
"vin",
"engineNo",
"modelCode",
"productDate",
"factoryDate",
"saleDate",
"maintainHandbookNo",
"gearBoxManufactor",
"gearBoxModel",
"gearBoxNo",
"frontAxleManufactor",
"frontAxleModel",
"frontAxleNo",
"middleAxleManufactor",
"middleAxleModel",
"middleAxleNo",
"rearAxleManufactor",
"rearAxleModel",
"rearAxleNo",
"tbox",
"engineTypeInfo"
})
public class SD08Request { @XmlElement(required = true)
protected String vin;
@XmlElement(required = true)
protected String engineNo;
@XmlElement(required = true)
protected String modelCode;
@XmlElement(required = true)
protected String productDate;
@XmlElement(required = true)
protected String factoryDate;
@XmlElement(required = true)
protected String saleDate;
@XmlElement(required = true)
protected String maintainHandbookNo;
@XmlElement(required = true)
protected String gearBoxManufactor;
@XmlElement(required = true)
protected String gearBoxModel;
@XmlElement(required = true)
protected String gearBoxNo;
@XmlElement(required = true)
protected String frontAxleManufactor;
@XmlElement(required = true)
protected String frontAxleModel;
@XmlElement(required = true)
protected String frontAxleNo;
@XmlElement(required = true)
protected String middleAxleManufactor;
@XmlElement(required = true)
protected String middleAxleModel;
@XmlElement(required = true)
protected String middleAxleNo;
@XmlElement(required = true)
protected String rearAxleManufactor;
@XmlElement(required = true)
protected String rearAxleModel;
@XmlElement(required = true)
protected String rearAxleNo;
@XmlElement(required = true)
protected String tbox;
@XmlElement(required = true)
protected String engineTypeInfo;
SD08Response:
package com.yonyou.dcs.intf.server.SD08; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; /**
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"out"
})
@XmlRootElement(name = "SD08Response")
public class SD08Response { @XmlElement(required = true)
protected String out; /**
*/
public String getOut() {
return out;
} /**
*/
public void setOut(String value) {
this.out = value;
} }
最核心的代码是这个 【SD08SOAPImpl】
在这个部分调用了这个方法:
/**
* Please modify this class to meet your needs
* This class is not complete
*/ package com.yonyou.dcs.intf.server.action; import java.sql.Timestamp; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import com.yonyou.dcs.intf.dto.IntfOprtMsgDTO;
import com.yonyou.dcs.intf.server.SD08.SAPDMS08Type;
import com.yonyou.dcs.intf.server.SD08.SD08Request;
import com.yonyou.dcs.intf.server.SD08.SD08Response;
import com.yonyou.dcs.intf.server.service.SD08ServImpl; /**
* This class was generated by Apache CXF 3.1.11 2017-06-07T10:50:58.568+08:00
* Generated source version: 3.1.11
*
* 车辆库接口
*
* 表 :tm_vehicle_base 所属微服vehCusView
*
* 新加字段表中未添加
*
*/ @javax.jws.WebService(serviceName = "SAP_DMS_08", portName = "SAP_DMS_08Port", targetNamespace = "http://wsServer.jmc.eai.infoservice.com/SAP_DMS_08/", wsdlLocation = "classpath:/com/yonyou/dcs/intf/server/wsdl/SD08.wsdl", endpointInterface = "com.yonyou.dcs.intf.server.SD08.SAPDMS08Type")
public class SD08SOAPImpl implements SAPDMS08Type { private static final Logger logger = LoggerFactory
.getLogger(SD08SOAPImpl.class);
private Timestamp startTime;
private Timestamp endTime; @Autowired
private SD08ServImpl serv; public com.yonyou.dcs.intf.server.SD08.SD08Response sd08(
SD08Request sd08Request) {
com.yonyou.dcs.intf.server.SD08.SD08Response _return = new SD08Response();
logger.info("Executing operation sd08");
// 判断数据是否为空
if (sd08Request == null) {
return _return;
} logger.info("sd08 start");
// try {
startTime = new Timestamp(System.currentTimeMillis());
IntfOprtMsgDTO oprtMsg = serv.processData(sd08Request);
endTime = new Timestamp(System.currentTimeMillis());
serv.addSd08Record(sd08Request, oprtMsg, startTime, endTime);// 时间日志 logger.info("sd08 end");
return _return;
// } catch (java.lang.Exception ex) {
// ex.printStackTrace();
// throw new RuntimeException(ex);
// }
}
}
在ServeImpl中:
package com.yonyou.dcs.intf.server.service; import java.sql.Timestamp;
import java.util.List;
import java.util.Map; import com.yonyou.dcs.intf.po.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.yonyou.dcs.common.Constant;
import com.yonyou.dcs.common.bean.ElemBean;
import com.yonyou.dcs.common.util.CommonUtils;
import com.yonyou.dcs.common.util.POUtil;
import com.yonyou.dcs.common.util.ThrowableUtil;
import com.yonyou.dcs.intf.common.BaseTxn;
import com.yonyou.dcs.intf.common.IntfConstans;
import com.yonyou.dcs.intf.common.MsgSendServImpl;
import com.yonyou.dcs.intf.dto.IntfOprtMsgDTO;
import com.yonyou.dcs.intf.server.SD08.SD08Request;
import com.yonyou.dcs.intf.server.dao.SD08DAO; @Service
public class SD08ServImpl {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired
private BaseTxn bt; @Autowired
private SD08DAO dao; @Autowired
private POUtil poUtil; @Autowired
private RecvServImpl recvServ; @Autowired
private MsgSendServImpl msgSendServ; public IntfOprtMsgDTO processData(SD08Request sd08Request) {
IntfOprtMsgDTO retMsg = null;
Long baseId = null;
try {
// Long companyId = getFactoryCompanyOfModel(sd08Request.getModelCode());
ElemBean companyInfo = getFactoryCompanysOfModel(sd08Request.getModelCode()); bt.beginTxn(IntfConstans.TXN_VEHCUSVIEW,
IntfConstans.JNDI_VEHCUSVIEW);// 开启事物 TmVehicleBasePO vehBaseInfo = dao.queryVehicleBaseByVin(sd08Request
.getVin()); TmEngineInfoPO engineInfo = dao.queryEngineInfoByVin(sd08Request
.getVin()); if (vehBaseInfo != null) {
setCommonField(sd08Request, vehBaseInfo, companyInfo.getLong("realCompanyId"));
dao.modifyVehicleBase(vehBaseInfo);
retMsg = new IntfOprtMsgDTO(Constant.INTF_OPRT_STATUS_UPTSUC,
"修改成功");
} else {
vehBaseInfo = new TmVehicleBasePO();
setCommonField(sd08Request, vehBaseInfo, companyInfo.getLong("realCompanyId"));
vehBaseInfo = dao.addVehicleBase(vehBaseInfo);
retMsg = new IntfOprtMsgDTO(Constant.INTF_OPRT_STATUS_ADDSUC,
"新增成功");
} if (null != engineInfo) {
setCommonFieldForEngineInfo(sd08Request, engineInfo);
dao.modifyEngineInfo(engineInfo);
// retMsg = new IntfOprtMsgDTO(Constant.INTF_OPRT_STATUS_UPTSUC,"修改成功");
} else {
engineInfo = new TmEngineInfoPO();
setCommonFieldForEngineInfo(sd08Request, engineInfo);
dao.addEngineInfo(engineInfo); // engineInfo =
// retMsg = new IntfOprtMsgDTO(Constant.INTF_OPRT_STATUS_ADDSUC,"新增成功");
} baseId = vehBaseInfo.getLongId(); // 判断是否是进出口、批售大客户,如果是要创建(如果没有)大客户信息,并将大客户与车表关联 // 增加其他公司
if(!companyInfo.isNull("otherCompanyIds")) {
String[] otherCompanyIds = companyInfo.getStr("otherCompanyIds").split(",");
for(String otherCompanyId : otherCompanyIds) {
TrVehbaseCompanyPO trvcPO = TrVehbaseCompanyPO.findFirst("VEHICLE_BASE_ID=? AND COMPANY_ID=?", baseId, otherCompanyId);
if(trvcPO != null) {
trvcPO.set("VALID_STATUS", Constant.STATUS_ENABLE);
trvcPO.saveIt();
} else {
trvcPO = new TrVehbaseCompanyPO();
trvcPO.set("VEHICLE_BASE_ID", baseId);
trvcPO.set("COMPANY_ID", otherCompanyId);
trvcPO.set("VALID_STATUS", Constant.STATUS_ENABLE);
trvcPO.saveIt();
}
}
} bt.endTxnTrue();
} catch (Exception ex) {
retMsg = new IntfOprtMsgDTO(Constant.INTF_OPRT_STATUS_SYSFAL,
ex.getMessage(), ThrowableUtil.getStackTraceToString(ex));
logger.error(ThrowableUtil.getStackTraceToString(ex));
bt.endTxnFalse();
} finally {
bt.txnClean();
} if(baseId != null) {
boolean suc = msgSendServ.sendVehicleBase(baseId);
logger.info("the sd08 send vehicle_base({}) is {}", baseId, suc);
} return retMsg;
} @SuppressWarnings("rawtypes")
private Long getFactoryCompanyOfModel(String modelCode) {
Long factoryCompanyId = null;
try {
bt.beginTxn(IntfConstans.TXN_GMSPUBLICSERV,
IntfConstans.JNDI_GMSPUBLICSERV); Map modelInfo = dao.queryModelInfo(modelCode);
factoryCompanyId = modelInfo.get("COMPANY_ID") == null ? null
: Long.parseLong(modelInfo.get("COMPANY_ID").toString()); bt.endTxnTrue();
} catch (Exception ex) {
logger.error(ThrowableUtil.getStackTraceToString(ex));
bt.endTxnFalse();
} finally {
bt.txnClean();
}
return factoryCompanyId;
} @SuppressWarnings("rawtypes")
private ElemBean getFactoryCompanysOfModel(String modelCode) {
ElemBean retBean = new ElemBean();
try {
bt.beginTxn(IntfConstans.TXN_GMSPUBLICSERV,
IntfConstans.JNDI_GMSPUBLICSERV); Map modelInfo = dao.queryModelInfo(modelCode);
if(modelInfo != null) {
retBean.put("realCompanyId", Long.parseLong(modelInfo.get("COMPANY_ID").toString()));
List<TrBrandCompanyPO> trbcPOs = TrBrandCompanyPO.find("BRAND_ID=? AND VALID_STATUS=10011001", modelInfo.get("BRAND_ID"));
String otherCompanyIds = "";
for(TrBrandCompanyPO trbcPO : trbcPOs) {
otherCompanyIds = otherCompanyIds + ("".equals(otherCompanyIds)?"":",") + trbcPO.getString("COMPANY_ID");
}
retBean.put("otherCompanyIds", otherCompanyIds);
} else {
retBean.put("realCompanyId", "");
retBean.put("otherCompanyIds", "");
} bt.endTxnTrue();
} catch (Exception ex) {
logger.error(ThrowableUtil.getStackTraceToString(ex));
bt.endTxnFalse();
} finally {
bt.txnClean();
}
return retBean;
} private void setCommonField(SD08Request req, TmVehicleBasePO po,
Long companyId) {
po.set("COMPANY_ID", companyId);
po.setString("COLOR", req.getModelCode().substring(14, 16));
po.setString("VIN", req.getVin());
po.setString("ENGINE_NO", req.getEngineNo());
if (!CommonUtils.checkIsNullStr(req.getFactoryDate())) {
po.set("FACTORY_DATE", req.getFactoryDate());
}
po.setString("MODEL_CODE", req.getModelCode());
if (!CommonUtils.checkIsNullStr(req.getProductDate())&&!"00000000000000".equals(req.getProductDate())) {
po.set("PRODUCT_DATE", req.getProductDate());
}
po.setString("MAINTAIN_HANDBOOK_NO", req.getMaintainHandbookNo());
po.set("GEAR_BOX_MANUFACTOR", req.getGearBoxManufactor());
po.set("GEAR_BOX_MODEL", req.getGearBoxModel());
po.set("GEAR_BOX_NO", req.getGearBoxNo());
po.set("FRONT_AXLE_MANUFACTOR", req.getFrontAxleManufactor());
po.set("FRONT_AXLE_MODEL", req.getFrontAxleModel());
po.set("FRONT_AXLE_NO", req.getFrontAxleNo());
po.set("MIDDLE_AXLE_MANUFACTOR", req.getMiddleAxleManufactor());
po.set("MIDDLE_AXLE_MODEL", req.getMiddleAxleModel());
po.set("MIDDLE_AXLE_NO", req.getMiddleAxleNo());
po.set("REAR_AXLE_MANUFACTOR", req.getRearAxleManufactor());
po.set("REAR_AXLE_MODEL", req.getRearAxleModel());
po.set("REAR_AXLE_NO", req.getRearAxleNo());
po.set("IS_JMC", 1);
po.set("IS_FACT_JMC", Constant.IF_TYPE_YES);
if (!CommonUtils.checkIsNullStr(req.getTbox())&&!"Y".equals(req.getTbox())) {
po.set("TBOX", Constant.IF_TYPE_YES);
}
} private void setCommonFieldForEngineInfo(SD08Request req, TmEngineInfoPO po) {
po.setString("vin", req.getVin());
po.setString("engin_info", req.getEngineTypeInfo());
} public void addSd08Record(SD08Request sd08Request, IntfOprtMsgDTO oprtMsg,
Timestamp startTime, Timestamp endTime) {
try {
bt.beginTxn(IntfConstans.TXN_INTF, IntfConstans.JNDI_INTF);
// 日志表
TiSd08RecordPO po = new TiSd08RecordPO();
poUtil.copyToPO(sd08Request, po);
po.set("HANDLE_STATUS", oprtMsg.getStatus());
po.setString("OPRT_MSG", oprtMsg.getMsg());
po.insert(); // 添加主记录
recvServ.addRecvRecord(oprtMsg, "SD08", po.getId(), startTime,
endTime);
bt.endTxnTrue();
} catch (Exception ex) {
logger.error(ThrowableUtil.getStackTraceToString(ex));
bt.endTxnFalse();
} finally {
bt.txnClean();
}
} }
到了Dao中就是具体的一些表操作了【数据访问层用的是 ActiveJDBC】
package com.yonyou.dcs.intf.server.dao; import java.util.LinkedList;
import java.util.List;
import java.util.Map; import com.yonyou.dcs.intf.po.TmEngineInfoPO;
import org.springframework.stereotype.Repository; import com.yonyou.dcs.common.util.DcsDaoUtil;
import com.yonyou.dcs.intf.common.IntfConstans;
import com.yonyou.dcs.intf.po.TmVehicleBasePO; @Repository
public class SD08DAO { public TmVehicleBasePO queryVehicleBaseByVin(String vin) {
List<TmVehicleBasePO> list = TmVehicleBasePO.find("VIN = ?", vin);
return list == null || list.size() == 0 ? null : list.get(0);
} public TmEngineInfoPO queryEngineInfoByVin(String vin) {
List<TmEngineInfoPO> list = TmEngineInfoPO.find("VIN = ?", vin);
return list == null || list.size() == 0 ? null : list.get(0);
} public void modifyVehicleBase(TmVehicleBasePO po) {
po.set("UPDATED_BY", IntfConstans.UPDATE_BY_OEM);
po.set("QMS_IS_SCAN", 0);
po.set("FORDPASS_SCAN", 0);
po.saveIt();
} public void modifyEngineInfo(TmEngineInfoPO po) {
po.set("UPDATED_BY", IntfConstans.UPDATE_BY_OEM);
po.saveIt();
} public TmVehicleBasePO addVehicleBase(TmVehicleBasePO po) {
po.setLong("IS_DELIEVE", 0);
po.setString("MID_CONFIRM_FLAG", "0");
po.setLong("CREATED_BY", IntfConstans.CREATE_BY_OEM);
po.insert();
return po;
} public TmEngineInfoPO addEngineInfo(TmEngineInfoPO po) {
po.setLong("CREATED_BY", IntfConstans.CREATE_BY_OEM);
po.insert();
return po;
} @SuppressWarnings("rawtypes")
public Map queryModelInfo(String modelCode) {
String sql = "SELECT * FROM VW_PRODUCT T WHERE T.MODEL_CODE_NEW = ?"; List<Object> params = new LinkedList<Object>();
params.add(modelCode); List<Map> list = DcsDaoUtil.findAll(IntfConstans.JNDI_GMSPUBLICSERV,
sql, params); return list == null || list.size() == 0 ? null : list.get(0);
} }
所以到这里可以基本得出一些结论:
WSDL用来描述,或者说定义了接口的信息
Request类描述的这个接口的数据模型是怎样的【封装数据模型】
然后SOAPI的这个类承接了Controller的功能,处理请求的数据
再往下Service层和Dao层就是实际对接数据库的实现
工作的要求:
这里有点问题就是,一般来说一个接口对应的数据库的一张表
但是需求有变动,BA让我新增一张表来存储一个新的字段,所以我要完整的看完这个流程才知道接口干了什么。
关于百度上提供的WSDL概念我真没懂
越看我是越晕,我理解就是一个接口规范描述,或者数据传输协议
关于WSDL本身的东西并不是很多:
https://www.runoob.com/wsdl/wsdl-tutorial.html
翻看W3C或者菜鸟教程就行了,工作上有可能自己自动生成还是怎样,反正怎么效率高怎么来,不纠结这个
WSDL文件案例:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://wsServer.jmc.eai.infoservice.com/SAP_DMS_08/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SAP_DMS_08" targetNamespace="http://wsServer.jmc.eai.infoservice.com/SAP_DMS_08/">
<wsdl:types>
<xsd:schema targetNamespace="http://wsServer.jmc.eai.infoservice.com/SAP_DMS_08/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="SD08">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SD08Response">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SD08_Request" type="tns:SD08_Request"></xsd:element> <xsd:complexType name="SD08_Request">
<xsd:sequence>
<xsd:element name="vin" type="xsd:string"></xsd:element>
<xsd:element name="engineNo" type="xsd:string"></xsd:element>
<xsd:element name="modelCode" type="xsd:string"></xsd:element>
<xsd:element name="productDate" type="xsd:string"></xsd:element>
<xsd:element name="factoryDate" type="xsd:string"></xsd:element>
<xsd:element name="saleDate" type="xsd:string"></xsd:element>
<xsd:element name="maintainHandbookNo"
type="xsd:string">
</xsd:element>
<xsd:element name="gearBoxManufactor" type="xsd:string"></xsd:element>
<xsd:element name="gearBoxModel" type="xsd:string"></xsd:element>
<xsd:element name="gearBoxNo" type="xsd:string"></xsd:element>
<xsd:element name="frontAxleManufactor"
type="xsd:string">
</xsd:element>
<xsd:element name="frontAxleModel" type="xsd:string"></xsd:element>
<xsd:element name="frontAxleNo" type="xsd:string"></xsd:element>
<xsd:element name="middleAxleManufactor"
type="xsd:string">
</xsd:element>
<xsd:element name="middleAxleModel" type="xsd:string">
</xsd:element>
<xsd:element name="middleAxleNo" type="xsd:string"></xsd:element>
<xsd:element name="rearAxleManufactor"
type="xsd:string">
</xsd:element>
<xsd:element name="rearAxleModel" type="xsd:string"></xsd:element>
<xsd:element name="rearAxleNo" type="xsd:string"></xsd:element>
<xsd:element name="tbox" type="xsd:string"></xsd:element>
<xsd:element name="engineTypeInfo" type="xsd:string"></xsd:element> </xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="SD08Request">
<wsdl:part element="tns:SD08_Request" name="SD08_Request"/>
</wsdl:message>
<wsdl:message name="SD08Response">
<wsdl:part element="tns:SD08Response" name="SD08_Response"/>
</wsdl:message>
<wsdl:portType name="SAP_DMS_08Type">
<wsdl:operation name="SD08">
<wsdl:input message="tns:SD08Request"/>
<wsdl:output message="tns:SD08Response"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SAP_DMS_08Binding" type="tns:SAP_DMS_08Type">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SD08">
<soap:operation soapAction="http://wsServer.jmc.eai.infoservice.com/SAP_DMS_08/SD08"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SAP_DMS_08">
<wsdl:port binding="tns:SAP_DMS_08Binding" name="SAP_DMS_08Port">
<soap:address location="http://wsServer.jmc.eai.infoservice.com/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
【WSDL】WebService描述语言的实践的更多相关文章
- WSDL(WebService描述语言)文件介绍
		一.WSDL 1.WSDL 文档的组成部分 <portType>:web service 执行的操作 <message>:web service 使用的消息 <types ... 
- WSDL(Web服务描述语言)详细解析(全文转载学习用)
		WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务 ... 
- WSDL/WebService/SOAP/REST/AXIS/CXF 开放式服务
		WebService是一种数据交换标准.通过WebService标准,你可以把项目中的方法作为接口提供给其他项目使用. 有时候我们习惯性地将具体提供服务的某个方法称为WebService.比如图书系统 ... 
- 硬件描述语言Verilog设计经验总结
		一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ... 
- 第二章  C语言编程实践
		上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ... 
- 上一步是硬件描述语言,下一步是FPGA
		上一步是硬件描述语言,下一步是FPGA. 学习了硬件描述语言(Verilog或者VHDL)之后,FPGA该如何继续. 世上没有捷径,每一步都得踏踏实实的走.学习FPGA也是这样,在有了硬件描述语言的基 ... 
- API的描述语言--Swagger
		Swagger是一种Rest API的表示方式. 有时也可以作为Rest API的交互式文档,描述形式化的接口描述,生成客户端和服务端的代码. 一,描述语言:Spec Swagger API Spec ... 
- 高德渲染网关Go语言重构实践
		1.导读 高德启动Go业务建设已经有段时间了,主要包含Go应用落地,Go中间件建设,云原生三个部分.经过持续的发力,在这些方面取得了不错的进展.高德Go业务落地过程是如何实现的,遇到过哪些问题,如何 ... 
- Blazor 002 : 一种开历史倒车的UI描述语言 -- Razor
		Razor是一门相当怪异丑陋的标记语言,但在实际使用中却十分高效灵活.本文主要介绍了Razor是什么,以及Razor引擎的一些浅薄的背后机理. 写文章前我本想一口气把Razor的基本语法,以及Blaz ... 
- Go语言设计模式实践:组合(Composite)
		关于本系列 这个系列首先是关于Go语言实践的.在项目中实际使用Go语言也有段时间了,一个体会就是不论是官方文档.图书还是网络资料,关于Go语言惯用法(idiom)的介绍都比较少,基本只能靠看标准库源代 ... 
随机推荐
- LeetCode 451. Sort Characters By Frequency	 根据字符出现频率排序 (C++/Java)
			题目: Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Inp ... 
- kettle从入门到精通 第三十六课 kettle carte 集群
			1.carte服务可以单体运行也可以集群方式运行,今天我们一起来学习下carte的集群模式部署和使用.本次示例用一个master和两个slave从节点演示. carte-config-master-8 ... 
- kettle从入门到精通 第二十四课 kettle 部署生产常用命令
			一.设置KETTLE_HOME环境变量 假设kettle软件目录为/xxx/data-integration vi ~/.bash_profile export KETTLE_HOME=/xxx/da ... 
- SpringBoot系列(三)元注解
			元注解,注解的注解,SpringBoot有四个元注解,分别是@Target.@Retention.@Documented.@Inherited.下面就是对元注解的详细讲解和源码展示. @Taget 该 ... 
- windows 批处理 检查并启动 windows 服务
			windows 批处理 检查并启动 windows 服务 set srvname="YSWindowsService" sc query|find %srvname% && ... 
- flutter 创建第一个项目(二)
			新建flutter project 项目 这样就创建出了第一个项目 
- 【前端求助帖】关于使用element-plus  select 模板嵌套popover中使用select选择后,上一个select自动关闭的问题
			主页代码如下 项目使用的是Vue3+vite, 下载后,直接pnpm i安装依赖, pnpm dev 就是可以跑起来 <el-button type="warning" ... 
- windows server 安装.net framework 3.5失败
			windows server如果高版本的.net framework 那么在安装.net framework3.5时会提示已安装高版本的不能安装低版本的了 ---------------------- ... 
- python 注册nacos 进行接口规范定义
			背景: 一般场景 python服务经常作为java下游的 算法服务或者 数据处理服务 但是使用http 去调用比较不灵活,通过注册到nacos上进行微服务调用才是比较爽的 1.定义feginapi的接 ... 
- 使用python解析nginx日志
			性能测试时,需使用生产环境各接口请求比例分配接口请求比,nginx统计脚本如下: import re import pandas as pd import xlwt obj = re.compile( ... 
