WebService的wsdl详解
webservice服务的wsdl内容详解,以及如何根据其内容编写调用代码
wsdl示例
展示一个webservice的wsdl,及调用这个接口的Axis客户端
wsdl
This XML file does not appear to have any style information associated with it. The document tree is shown below.<wsdl:definitionsxmlns:apachesoap="http://xml.apache.org/xml-soap"xmlns:impl="http://10.10.1.190:6889/ormrpc/services/EASLogin"xmlns:intf="http://10.10.1.190:6889/ormrpc/services/EASLogin"xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:tns1="urn:client"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://10.10.1.190:6889/ormrpc/services/EASLogin"><!-- WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT) --><wsdl:types><schemaxmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:client"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="WSContext"><sequence><element name="dbType" type="xsd:int"/><element name="dcName" nillable="true" type="xsd:string"/><element name="password" nillable="true" type="xsd:string"/><element name="sessionId" nillable="true" type="xsd:string"/><element name="slnName" nillable="true" type="xsd:string"/><element name="userName" nillable="true" type="xsd:string"/></sequence></complexType></schema></wsdl:types><wsdl:message name="loginByLtpaTokenResponse"><wsdl:part name="loginByLtpaTokenReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="loginByLtpaTokenRequest"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="ltpaToken" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part></wsdl:message><wsdl:message name="loginResponse2"><wsdl:part name="loginReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="logoutResponse"><wsdl:part name="logoutReturn" type="xsd:boolean"></wsdl:part></wsdl:message><wsdl:message name="logoutRequest"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part></wsdl:message><wsdl:message name="loginResponse1"><wsdl:part name="loginReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="loginRequest2"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part><wsdl:part name="authPattern" type="xsd:string"></wsdl:part><wsdl:part name="isEncodePwd" type="xsd:int"></wsdl:part></wsdl:message><wsdl:message name="loginRequest1"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part><wsdl:part name="authPattern" type="xsd:string"></wsdl:part></wsdl:message><wsdl:message name="loginResponse"><wsdl:part name="loginReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="loginRequest"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part></wsdl:message><wsdl:portType name="EASLoginProxy"><wsdl:operation name="login" parameterOrder="userName password slnName dcName language dbType"><wsdl:input message="impl:loginRequest" name="loginRequest"></wsdl:input><wsdl:output message="impl:loginResponse" name="loginResponse"></wsdl:output></wsdl:operation><wsdl:operation name="login" parameterOrder="userName password slnName dcName language dbType authPattern"><wsdl:input message="impl:loginRequest1" name="loginRequest1"></wsdl:input><wsdl:output message="impl:loginResponse1" name="loginResponse1"></wsdl:output></wsdl:operation><wsdl:operation name="login" parameterOrder="userName password slnName dcName language dbType authPattern isEncodePwd"><wsdl:input message="impl:loginRequest2" name="loginRequest2"></wsdl:input><wsdl:output message="impl:loginResponse2" name="loginResponse2"></wsdl:output></wsdl:operation><wsdl:operation name="logout" parameterOrder="userName slnName dcName language"><wsdl:input message="impl:logoutRequest" name="logoutRequest"></wsdl:input><wsdl:output message="impl:logoutResponse" name="logoutResponse"></wsdl:output></wsdl:operation><wsdl:operation name="loginByLtpaToken" parameterOrder="userName ltpaToken slnName dcName language dbType"><wsdl:input message="impl:loginByLtpaTokenRequest" name="loginByLtpaTokenRequest"></wsdl:input><wsdl:output message="impl:loginByLtpaTokenResponse" name="loginByLtpaTokenResponse"></wsdl:output></wsdl:operation></wsdl:portType><wsdl:binding name="EASLoginSoapBinding" type="impl:EASLoginProxy"><wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="login"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginRequest"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://login.webservice.bos.kingdee.com" use="encoded"/></wsdl:input><wsdl:output name="loginResponse"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.10.1.190:6889/ormrpc/services/EASLogin" use="encoded"/></wsdl:output></wsdl:operation><wsdl:operation name="login"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginRequest1"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://login.webservice.bos.kingdee.com" use="encoded"/></wsdl:input><wsdl:output name="loginResponse1"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.10.1.190:6889/ormrpc/services/EASLogin" use="encoded"/></wsdl:output></wsdl:operation><wsdl:operation name="login"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginRequest2"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://login.webservice.bos.kingdee.com" use="encoded"/></wsdl:input><wsdl:output name="loginResponse2"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.10.1.190:6889/ormrpc/services/EASLogin" use="encoded"/></wsdl:output></wsdl:operation><wsdl:operation name="logout"><wsdlsoap:operation soapAction=""/><wsdl:input name="logoutRequest"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://login.webservice.bos.kingdee.com" use="encoded"/></wsdl:input><wsdl:output name="logoutResponse"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.10.1.190:6889/ormrpc/services/EASLogin" use="encoded"/></wsdl:output></wsdl:operation><wsdl:operation name="loginByLtpaToken"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginByLtpaTokenRequest"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://login.webservice.bos.kingdee.com" use="encoded"/></wsdl:input><wsdl:output name="loginByLtpaTokenResponse"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.10.1.190:6889/ormrpc/services/EASLogin" use="encoded"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="EASLoginProxyService"><wsdl:port binding="impl:EASLoginSoapBinding" name="EASLogin"><wsdlsoap:address location="http://10.10.1.190:6889/ormrpc/services/EASLogin"/></wsdl:port></wsdl:service></wsdl:definitions>
Axis客户端
用于调用上面的webservice服务
<dependency><groupId>org.apache.axis</groupId><artifactId>axis</artifactId><version>1.4</version>
</dependency>
import client.WSContext;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.w3c.dom.Document;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;public static void other(){QName returnType = new javax.xml.namespace.QName("urn:client", "WSContext");Object result = null;try {// 创建一个新的Service对象Service service = new Service();Call call = (Call) service.createCall();// 设置目标webservice地址,注意去掉 问号与wsdlcall.setTargetEndpointAddress(new URL("http://10.10.1.190:6889/ormrpc/services/EASLogin"));//设置方法名call.setOperationName(new QName( "login"));// 设置传入参数的xml及类型,可以不写//call.addParameter("userName", XMLType.XSD_STRING, ParameterMode.IN);//call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);//call.addParameter("slnName", XMLType.XSD_STRING, ParameterMode.IN);//call.addParameter("dcName", XMLType.XSD_STRING, ParameterMode.IN);//call.addParameter("language", XMLType.XSD_STRING, ParameterMode.IN);//call.addParameter("dbType", XMLType.XSD_INT, ParameterMode.IN);// 设置返回参数的xml及类型,设置请求参数时要写参数名,而返回值不用call.setReturnType(returnType);call.setReturnClass(WSContext.class);//设置返回值名字,可以不写//call.setReturnQName(new QName("", "loginReturn"));//设置axis的序列化,否则无法接受自定义类型WSContextClass sf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;Class df = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;call.registerTypeMapping(WSContext.class, returnType, sf, df, false);// 构造请求的参数String userName = "xdgt";String password = "123456";String slnName = "eas";String dcName = "gg01";String language = "L2";Integer dbType = 2;// 调用WebService方法WSContext ws = (WSContext) call.invoke(new Object[] {userName, password, slnName, dcName, language, dbType});// 处理返回的结果System.out.println("Response: " + ws.getSessionId());} catch (Exception e) {result = "{\"status\": \"error\",\"msg\":\"" + e.getMessage() + "\"}";}System.out.println(result);}
返回类型
WSContext
代码,这个建议用axis命令
生成,因为内部涉及wsdl的拼接,比较麻烦,而且实际开发中,有可能你并不了解对方的代码结构
axis命令
生成参考:
https://blog.csdn.net/onePlus5T/article/details/139122866
/*** WSContext.java** This file was auto-generated from WSDL* by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.*/package client;public class WSContext implements java.io.Serializable {private int dbType;private String dcName;private String password;private String sessionId;private String slnName;private String userName;public WSContext() {}public WSContext(int dbType,String dcName,String password,String sessionId,String slnName,String userName) {this.dbType = dbType;this.dcName = dcName;this.password = password;this.sessionId = sessionId;this.slnName = slnName;this.userName = userName;}/*** Gets the dbType value for this WSContext.** @return dbType*/public int getDbType() {return dbType;}/*** Sets the dbType value for this WSContext.** @param dbType*/public void setDbType(int dbType) {this.dbType = dbType;}/*** Gets the dcName value for this WSContext.** @return dcName*/public String getDcName() {return dcName;}/*** Sets the dcName value for this WSContext.** @param dcName*/public void setDcName(String dcName) {this.dcName = dcName;}/*** Gets the password value for this WSContext.** @return password*/public String getPassword() {return password;}/*** Sets the password value for this WSContext.** @param password*/public void setPassword(String password) {this.password = password;}/*** Gets the sessionId value for this WSContext.** @return sessionId*/public String getSessionId() {return sessionId;}/*** Sets the sessionId value for this WSContext.** @param sessionId*/public void setSessionId(String sessionId) {this.sessionId = sessionId;}/*** Gets the slnName value for this WSContext.** @return slnName*/public String getSlnName() {return slnName;}/*** Sets the slnName value for this WSContext.** @param slnName*/public void setSlnName(String slnName) {this.slnName = slnName;}/*** Gets the userName value for this WSContext.** @return userName*/public String getUserName() {return userName;}/*** Sets the userName value for this WSContext.** @param userName*/public void setUserName(String userName) {this.userName = userName;}private Object __equalsCalc = null;public synchronized boolean equals(Object obj) {if (!(obj instanceof WSContext)) return false;WSContext other = (WSContext) obj;if (obj == null) return false;if (this == obj) return true;if (__equalsCalc != null) {return (__equalsCalc == obj);}__equalsCalc = obj;boolean _equals;_equals = true &&this.dbType == other.getDbType() &&((this.dcName==null && other.getDcName()==null) ||(this.dcName!=null &&this.dcName.equals(other.getDcName()))) &&((this.password==null && other.getPassword()==null) ||(this.password!=null &&this.password.equals(other.getPassword()))) &&((this.sessionId==null && other.getSessionId()==null) ||(this.sessionId!=null &&this.sessionId.equals(other.getSessionId()))) &&((this.slnName==null && other.getSlnName()==null) ||(this.slnName!=null &&this.slnName.equals(other.getSlnName()))) &&((this.userName==null && other.getUserName()==null) ||(this.userName!=null &&this.userName.equals(other.getUserName())));__equalsCalc = null;return _equals;}private boolean __hashCodeCalc = false;public synchronized int hashCode() {if (__hashCodeCalc) {return 0;}__hashCodeCalc = true;int _hashCode = 1;_hashCode += getDbType();if (getDcName() != null) {_hashCode += getDcName().hashCode();}if (getPassword() != null) {_hashCode += getPassword().hashCode();}if (getSessionId() != null) {_hashCode += getSessionId().hashCode();}if (getSlnName() != null) {_hashCode += getSlnName().hashCode();}if (getUserName() != null) {_hashCode += getUserName().hashCode();}__hashCodeCalc = false;return _hashCode;}// Type metadataprivate static org.apache.axis.description.TypeDesc typeDesc =new org.apache.axis.description.TypeDesc(WSContext.class, true);static {typeDesc.setXmlType(new javax.xml.namespace.QName("urn:client", "WSContext"));org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();elemField.setFieldName("dbType");elemField.setXmlName(new javax.xml.namespace.QName("", "dbType"));elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "int"));elemField.setNillable(false);typeDesc.addFieldDesc(elemField);elemField = new org.apache.axis.description.ElementDesc();elemField.setFieldName("dcName");elemField.setXmlName(new javax.xml.namespace.QName("", "dcName"));elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));elemField.setNillable(true);typeDesc.addFieldDesc(elemField);elemField = new org.apache.axis.description.ElementDesc();elemField.setFieldName("password");elemField.setXmlName(new javax.xml.namespace.QName("", "password"));elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));elemField.setNillable(true);typeDesc.addFieldDesc(elemField);elemField = new org.apache.axis.description.ElementDesc();elemField.setFieldName("sessionId");elemField.setXmlName(new javax.xml.namespace.QName("", "sessionId"));elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));elemField.setNillable(true);typeDesc.addFieldDesc(elemField);elemField = new org.apache.axis.description.ElementDesc();elemField.setFieldName("slnName");elemField.setXmlName(new javax.xml.namespace.QName("", "slnName"));elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));elemField.setNillable(true);typeDesc.addFieldDesc(elemField);elemField = new org.apache.axis.description.ElementDesc();elemField.setFieldName("userName");elemField.setXmlName(new javax.xml.namespace.QName("", "userName"));elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));elemField.setNillable(true);typeDesc.addFieldDesc(elemField);}}
wsdl标签大意
♦ types
元素
使用XML模式语言,声明在WSDL文档中的其他位置使用的复杂数据类型与元素,可理解为就是**定义webservice方法请求与响应参数的
**
♦ import
元素
类似于XML模式文档中的import元素,用于从其他WSDL文档中导入WSDL定义;
♦ message
元素
使用在WSDL文档的type元素中定义或在import元素引用的外部WSDL文档中定义的XML模式的内置类型、复杂类型或元素描述了消息的有效负载;
♦ portType
元素 和 operation
元素
描述了Web服务的接口并定义了他的方法。portType元素和operation元素类似于java接口和接口中定义的方法声明。operation元素使用一个或者多个message类型来定义他的输入和输出的有效负载;
♦ Binding
元素
将portType元素和operation元素赋给一个特殊的协议和编码样式;
♦ service
元素
负责将Internet地址赋给一个具体的绑定;
具体解释
wsdl:definitions标签
xmlns:xxxx
做此wsdl的定义,里面有很多
xmlns:xxxx
,其中后半部分的xxxx
会在其他标签中被引用
比如,在上面wsdl文件中的 wsdl:message的Response标签 中,返回类型定义为:type=“tns1
:WSContext”,则对应Axis客户端代码就要这样写:
//因为tns1在 <wsdl:definitions>标签 中定义值为 urn:client,所以要向下面这样拼
call.setReturnType(new javax.xml.namespace.QName("urn:client", "WSContext"));//一般如果不是java中自带的类型,比如string、int等,大概率都是自定义类型,
//此处的WSContext肯定是自定义类型,所以必须在这里赋值class类型,因为Axis不知道WSContext是什么类型
call.setReturnClass(WSContext.class);
假如是 type=“xsd:string
”,则对应Axis客户端代码就是:
//xsd属于xml自带标签,进入org.apache.axis.Constants.XSD_STRING的源码可以看见其值就是xsd:string
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
targetNamespace
webserivce的名称空间,一般与方法名拼接一起使用,axis代码使用如下:
call.setOperationName(new QName("名称空间", "方法名"));
注意:
targetNamespace
不是必须与方法名拼接在一起进行axis客户端调用,要看wsdl:message
标签的方法中是否有前缀
比如下面:方法Response 与 Request 中都有前缀ns0
,而ns0
的值恰好与targetNamespace
一致,所以上面的:
new QName("名称空间", "方法名")
就没问题了
但是本wsdl示例文档的 wsdl:message
标签方法无前缀,比如下图的logout
方法:
则axis代码就可以直接写一个方法名:
call.setOperationName(new QName( "logout"));
wsdl:message标签
详解
方法标签,对应发布webservice的接口方法,其中
xxxResponse
代表接口方法的返回
xxxRequest
或者直接xxx方法名
代表接口方法的接收
比如本文的wsdl示例文档中的:
正对应其5个方法:
而
wsdl:message
标签的内容,正对应请求参数
与返回值参数
- 请求参数对应上图
request
中的5个 - 返回参数对应上图的
tns1:WSContext
,也就是下面wsdl:types
标签中的类型定义,是5个小类型的合体
axis调用
1.这里对应本文wsdl示例的
axis
代码调用如下,因为对应方法名的loginRequest、loginResponse没有前缀修饰:
call.setOperationName(new QName( "login"));
2.但如果是下面这种,就必须有前缀对应的QName拼接:
call.setOperationName(new QName("tns在<wsdl:definitions>内定义的值","方法名emeService"));
wsdl:definitions
中的tns
展示,大部分tns
与名称空间targetNamespace
相同
wsdl:types标签
详解1
声明在其他标签中要使用的
元素
和类型
,比如接口方法参数类型、返回值类型
比如本文档示例的wsdl中,wsdl:types
标签内容如下,其实就是定义了接口方法的参数类型:
<wsdl:types><schemaxmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:client"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="WSContext"><sequence><element name="dbType" type="xsd:int"/><element name="dcName" nillable="true" type="xsd:string"/><element name="password" nillable="true" type="xsd:string"/><element name="sessionId" nillable="true" type="xsd:string"/><element name="slnName" nillable="true" type="xsd:string"/><element name="userName" nillable="true" type="xsd:string"/></sequence></complexType></schema>
</wsdl:types>
其中,complexType
为一个复合类型,它包含的具体小类型在sequence
标签的element
中,当我们调用
<wsdl:message name="loginRequest">
的方法时,返回的结果格式如下,其实就是返回了WSContext
类,这个类包含了其他5个字符串和整数的属性
axis调用1
结合最上面
wsdl
示例的message
:
请求:
<wsdl:message name="loginRequest"><wsdl:part name="userName" type="xsd:string"> </wsdl:part><wsdl:part name="password" type="xsd:string"> </wsdl:part><wsdl:part name="slnName" type="xsd:string"> </wsdl:part><wsdl:part name="dcName" type="xsd:string"> </wsdl:part><wsdl:part name="language" type="xsd:string"> </wsdl:part><wsdl:part name="dbType" type="xsd:int"> </wsdl:part>
</wsdl:message>
响应:
<wsdl:message name="loginByLtpaTokenResponse"><wsdl:part name="loginByLtpaTokenReturn" type="tns1:WSContext"> </wsdl:part>
</wsdl:message>
此
wsdl:types
标签对应的调用代码如下注意:请求参数需要写参数名,设置返回值时不用写返回值名
请求:
call.addParameter("userName", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("slnName", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("dcName", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("language", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("dbType", XMLType.XSD_INT, ParameterMode.IN);
响应:
//设置wsdl中返回值类型及其修饰标签
call.setReturnType(new QName("urn:client", "WSContext"));
//因为返回值类型为WSContext,不是基本类型,所以必须设置其calss类,否则报错
call.setReturnClass(WSContext.class);
这个响应的返回值类型,推荐由
Axis
的命令直接生成,内部构成比较复杂
详解2
在举一个不同格式的例子
下面这种格式的wsdl:types
标签,与上面大同小异,意思就是:
在wsdl:types
中,定义了**emeService
方法 ** 的
- 请求参数类型是
String
,名称是arg0
- 返回值类型是
String
,名称是return
结果证明:
axis调用2
上面的返回值名字为
return
,类型为xs:string
注意:axis设置请求参数时需要写参数名,而设置返回值时不用写返回值名
xs:string
在axis
中可以用代码XMLType.XSD_STRING
标识,java基本类型都可以用XMLType
表示
call.setReturnType(XMLType.XSD_STRING);
wsdl:portType标签
表达了发布
webservice
接口的代码结构
以本文wsdl文档示例为例:
wsdl:portType
的name
的值:一般对应发布webservice
的接口名。wsdl:operation
的name
的值:对应webservice
接口的方法名,parameterOrder
为方法参数名。wsdl:input
与wsdl:output
:对应了输入输出,即接口方法请求与返回的message
定义,可以根据其name
名字去wsdl:message
标签找对应的方法定义。
wsdl:binding与wsdl:service标签
好像不涉及Axis代码调用需要编写的部分,暂时没有仔细分析
- Binding - 特定端口类型的具体协议和数据格式规范的绑定。
- Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
- Service- 相关服务访问点的集合。
相关文章:

WebService的wsdl详解
webservice服务的wsdl内容详解,以及如何根据其内容编写调用代码 wsdl示例 展示一个webservice的wsdl,及调用这个接口的Axis客户端 wsdl This XML file does not appear to have any style information associated with it. The document tree is shown…...

数据分析实战:从0到1完成数据获取分析到可视化
文章目录 1.数据分析基本流程1.1 数据采集1.2 数据提炼1.3 数据探索分析 2.数据获取的方法和工具2.1 数据解锁器2.2 爬虫浏览器2.3 数据洞察市场 3.完整案例分析:从数据采集到数据可视化3.1 直接按需定制数据集获取数据3.2 获取IP代理,利用python爬取数据…...
【Spring】深入理解 Spring 中的 ImportSelector、Aware 和 Processor 接口
前言 Spring 框架提供了一系列接口和机制,为开发者提供了灵活、可扩展的编程模型。其中,ImportSelector、Aware 接口以及 Processor 系列接口是非常重要的扩展点,本文将深入探讨它们的设计目的、使用方法以及示例应用。 一、ImportSelector…...

【C语言】strstr函数的使用和模拟
前言 今天给大家带来一个字符串函数,strstr()的使用介绍和模拟实现。 模拟实现这个函数,可以帮助我们更深刻地理解这个函数的功能和提高解决字符串相关问题的能力,有兴趣的话就请往下看吧。 strstr函数介绍 函数功能: strstr函…...

五分钟”手撕“异常
目录 一、什么是异常 二、异常的体系和分类 三、异常的处理 1.抛出异常 2.异常的捕获 异常声明throws: try-catch处理 四、finally finally一定会被执行吗? 五、throw和throws区别 六、异常处理的流程 七、自定义异常 一、什么是异常 顾名…...

【vue3+elementuiplus】el-select下拉框会自动触发校验规则
场景:编辑弹框省份字段下拉框必填,触发方式change,有值第一次打开不会触发校验提示,关闭弹框再次打开触发必填校验提示,但是该字段有值 问题的原因是:在关闭弹层事件中,我做了resetfileds&…...

【论文复现】LSTM长短记忆网络
LSTM 前言网络架构总线遗忘门记忆门记忆细胞输出门 模型定义单个LSTM神经元的定义LSTM层内结构的定义 模型训练模型评估代码细节LSTM层单元的首尾的处理配置Tensorflow的GPU版本 前言 LSTM作为经典模型,可以用来做语言模型,实现类似于语言模型的功能&am…...
目标检测YOLO实战应用案例100讲-【自动驾驶】激光雷达
目录 前言 算法原理 测距方法 发射单元 接收单元 扫描单元...
用C语言设计轨道电机的驱动库
一、设计目的 设计能驱动立体轨道电机的抽象驱动程序库。 二、设计要求 命名规范。设计简单,方便使用。体积小。满足电机的移动、停止、初始化、恢复等控制,甚至通过网络控制。 三、设计内容 (一)属性封装 1、定义配置结构体 // 用于配置参数 typed…...

HTML跳动的爱心
目录 写在前面 HTML简介 跳动的爱心 代码分析 运行结果 推荐文章 写在后面 写在前面 哎呀,这是谁的小心心?跳得好快吖! HTML简介 老生常谈啦,咱们还是从HTML开始吧! HTML是超文本标记语言(Hyper…...

汇编原理(二)
寄存器:所有寄存器都是16位(0-15),可以存放两个字节 AX,BX,CX,DX存放一般性数据,称为通用寄存器 AX的逻辑结构。最大存放的数据为2的16次方减1。可分为AH和AL,兼容8位寄存器。 字:1word 2Byte…...

Android Studio开发之路(十三)主题影响Button颜色问题解决及button自定义样式
一、问题描述 在开发过程中发现安卓的默认主题色是紫色,并且会导致button也是紫色,有时直接在xml布局文件中直接设置button的背景色或者设置背景图片不起效果 方案一、如果是app,可以直接设置主题颜色 比如,将主题设置为白色&a…...

eNSP学习——OSPF单区域配置
目录 相关命令 实验背景 实验目的 实验步骤 实验拓扑 实验编址 实验步骤 1、基础配置 2、部署单区域OSPF网络 3、检查OSPF单区域的配置结果 OSPF——开放式最短路径优先 基于链路状态的协议,具有收敛快、路由无环、扩展性好等优点; 相关命令 […...

深度学习中的优化算法二(Pytorch 19)
一 梯度下降 尽管梯度下降(gradient descent)很少直接用于深度学习,但了解它是理解下一节 随机梯度下降算法 的关键。例如,由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。同样地&…...
R实验 方差分析
实验目的: 掌握单因素方差分析的思想和方法; 掌握多重均值检验方法; 掌握多个总体的方差齐性检验; 掌握Kruskal-Wallis秩和检验的思想和方法; 掌握多重Wilcoxon秩和检验的思想和方法。 实验内容: &…...

AI智能体|手把手教你使用扣子Coze图像流的文生图功能
大家好,我是无界生长。 AI智能体|手把手教你使用扣子Coze图像流的文生图功能本文详细介绍了Coze平台的\x26quot;图像流\x26quot;功能中的\x26quot;文生图\x26quot;节点,包括创建图像流、编排文生图节点、节点参数配置,并通过案例…...

应用程序图标提取
文章目录 [toc]提取过程提取案例——提取7-zip应用程序的图标 提取过程 找到需要提取图标的应用程序的.exe文件 复制.exe文件到桌面,并将复制的.exe文件后缀改为.zip 使用解压工具7-zip解压.zip文件 在解压后的文件夹中,在.rsrc/ICON路径下的.ico文件…...
Excel表格在线解密:轻松解密密码,快速恢复数据
忘记了excel表格密码?教你简单两步走:具体步骤如下。首先,在百度搜索中键入“密码帝官网”。其次,点击“立即开始”,在用户中心上传表格文件即可找回密码。这种方法不用下载软件,操作简单易行,适…...

springboot小结1
什么是springboot Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。 简单来说,它提供了一堆依赖打包Starter,并已经按照使用习惯解决…...

【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号:Qt 学习…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...