Java运用apache的axis通过soap协议调用C#或C++发布的WebService
话不多说直接上代码:
C++的WebService说明书格式样例:
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetnamespace="http://tempuri.org/">
<wsdl:types>
<s:schema elementformdefault="qualified" targetnamespace="http://tempuri.org/">
<s:element name="GetList">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="zt" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element name="GetListResponse">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="GetListResult" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element name="MySoapHeader" type="tns:MySoapHeader" />
<s:complextype name="MySoapHeader">
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="UserName" type="s:string" />
<s:element minoccurs="0" maxoccurs="1" name="PassWord" type="s:string" />
</s:sequence>
<s:anyattribute />
</s:complextype>
<s:element name="GetDataWzjh">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="jhbh" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element name="GetDataWzjhResponse">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="GetDataWzjhResult" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element name="GetDataZbgg">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="zbggbh" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element name="GetDataZbggResponse">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="GetDataZbggResult" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element name="SaveZbjg">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="jhbh" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
<s:element minoccurs="0" maxoccurs="1" name="data" type="s:string" />
<s:element name="SaveZbjgResponse">
<s:complextype>
<s:sequence>
<s:element minoccurs="0" maxoccurs="1" name="SaveZbjgResult" type="s:string" />
</s:sequence>
</s:complextype>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="GetListSoapIn">
<wsdl:part name="parameters" element="tns:GetList" />
</wsdl:message>
<wsdl:message name="GetListSoapOut">
<wsdl:part name="parameters" element="tns:GetListResponse" />
</wsdl:message>
<wsdl:message name="GetListMySoapHeader">
<wsdl:part name="MySoapHeader" element="tns:MySoapHeader" />
</wsdl:message>
<wsdl:message name="GetDataWzjhSoapIn">
<wsdl:part name="parameters" element="tns:GetDataWzjh" />
</wsdl:message>
<wsdl:message name="GetDataWzjhSoapOut">
<wsdl:part name="parameters" element="tns:GetDataWzjhResponse" />
</wsdl:message>
<wsdl:message name="GetDataWzjhMySoapHeader">
<wsdl:part name="MySoapHeader" element="tns:MySoapHeader" />
</wsdl:message>
<wsdl:message name="GetDataZbggSoapIn">
<wsdl:part name="parameters" element="tns:GetDataZbgg" />
</wsdl:message>
<wsdl:message name="GetDataZbggSoapOut">
<wsdl:part name="parameters" element="tns:GetDataZbggResponse" />
</wsdl:message>
<wsdl:message name="GetDataZbggMySoapHeader">
<wsdl:part name="MySoapHeader" element="tns:MySoapHeader" />
</wsdl:message>
<wsdl:message name="SaveZbjgSoapIn">
<wsdl:part name="parameters" element="tns:SaveZbjg" />
</wsdl:message>
<wsdl:message name="SaveZbjgSoapOut">
<wsdl:part name="parameters" element="tns:SaveZbjgResponse" />
</wsdl:message>
<wsdl:message name="SaveZbjgMySoapHeader">
<wsdl:part name="MySoapHeader" element="tns:MySoapHeader" />
</wsdl:message>
<wsdl:porttype name="WebService_ShareSoap">
<wsdl:operation name="GetList">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
取共享计划数据列表
</wsdl:documentation>
<wsdl:input message="tns:GetListSoapIn" />
<wsdl:output message="tns:GetListSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetDataWzjh">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
根据计划编号取计划数据
</wsdl:documentation>
<wsdl:input message="tns:GetDataWzjhSoapIn" />
<wsdl:output message="tns:GetDataWzjhSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetDataZbgg">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
根据招标公告编号取公告及供应商报名数据
</wsdl:documentation>
<wsdl:input message="tns:GetDataZbggSoapIn" />
<wsdl:output message="tns:GetDataZbggSoapOut" />
</wsdl:operation>
<wsdl:operation name="SaveZbjg">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
回写招标结果
</wsdl:documentation>
<wsdl:input message="tns:SaveZbjgSoapIn" />
<wsdl:output message="tns:SaveZbjgSoapOut" />
</wsdl:operation>
</wsdl:porttype>
<wsdl:binding name="WebService_ShareSoap" type="tns:WebService_ShareSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="GetList">
<soap:operation soapaction="http://tempuri.org/GetList" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:GetListMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetDataWzjh">
<soap:operation soapaction="http://tempuri.org/GetDataWzjh" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:GetDataWzjhMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetDataZbgg">
<soap:operation soapaction="http://tempuri.org/GetDataZbgg" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:GetDataZbggMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SaveZbjg">
<soap:operation soapaction="http://tempuri.org/SaveZbjg" style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:SaveZbjgMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WebService_ShareSoap12" type="tns:WebService_ShareSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="GetList">
<soap12:operation soapaction="http://tempuri.org/GetList" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:GetListMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetDataWzjh">
<soap12:operation soapaction="http://tempuri.org/GetDataWzjh" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:GetDataWzjhMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetDataZbgg">
<soap12:operation soapaction="http://tempuri.org/GetDataZbgg" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:GetDataZbggMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SaveZbjg">
<soap12:operation soapaction="http://tempuri.org/SaveZbjg" style="document" />
<wsdl:input>
<soap12:body use="literal" />
<soap12:header message="tns:SaveZbjgMySoapHeader" part="MySoapHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WebService_Share">
<wsdl:port name="WebService_ShareSoap" binding="tns:WebService_ShareSoap">
<soap:address location="http://10.194.7.214/WZCG/INTERFACE/WebService_Share.asmx" />
</wsdl:port>
<wsdl:port name="WebService_ShareSoap12" binding="tns:WebService_ShareSoap12">
<soap12:address location="http://10.194.7.214/WZCG/INTERFACE/WebService_Share.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
GsopUtil:
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.soap.SOAPException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.commons.collections.MapUtils;
import com.sckj.base.exception.ServiceException;
public class GsopUtil {
/**
* Java运用apache的axis通过soap协议调用C#发布的WebService
* @author 47Gamer
* @date 2019年10月28日
* @param endpointURL
* WebService说明书地址
* @param method
* 说明书里发布的方法
* @param serviceName
* 说明书service服务名称
* @param targetNamespace
* 说明书的targetNamespace
* @param
* 说明书里的part名称
* @param soapHeaderMap
* 协议头的键值对参数
* @param objs
* 传入的参数值
* @param params
* 传入的说明书params参数
*/
public static String getDataFromGsop(String endpointURL,String method,String serviceName,String targetNamespace,String part,Map<String
,Object> soapHeaderMap,Object[] objs,String[] params) {
String result = "";
try {
// 服务端的url,需要根据情况更改
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpointURL));
call.setUseSOAPAction(true);
call.setEncodingStyle("UTF-8");
call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型
// 由于需要认证,故需要设置调用的用户名和密码
SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(new QName(targetNamespace, part));
soapHeaderElement.setNamespaceURI(targetNamespace);
try {
if(MapUtils.isNotEmpty(soapHeaderMap)){
for (Entry<String, Object> entry : soapHeaderMap.entrySet()) {
soapHeaderElement.addChildElement((String)entry.getKey()).setValue((String) entry.getValue());
}
}
} catch (SOAPException e) {
e.printStackTrace();
}
// 参数的类型
for(int i=0;i<params.length;i++){
call.addParameter(new QName(targetNamespace,params[i]), XMLType.XSD_STRING, ParameterMode.IN);
}
call.addHeader(soapHeaderElement);
call.setSOAPActionURI(targetNamespace + method);
call.setOperationName(new QName(targetNamespace, method));// 设置操作的名称。
result = (String) call.invoke(objs);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (javax.xml.rpc.ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("调用webservice错误!");
}
return result;
}
public static void main(String[] args) {
String endpointURL = "http://10.192.179.119/WZCG/INTERFACE/WebService_Share.asmx?wsdl";
String method = "GetDataZbgg";
String serviceName = "WebService_Share";
String targetNamespace = "http://tempuri.org/";
String part = "MySoapHeader";
Map<String, Object> soapHeaderMap = new HashMap<String, Object>(16);
soapHeaderMap.put("UserName", "root");
soapHeaderMap.put("PassWord", "123456");
String[] params = new String[]{ "zbggbh" };
Object[] objs = new Object[]{ "CTWC[2016]0772" };
String zbggData = GsopUtil.getDataFromGsop(endpointURL, method, serviceName, targetNamespace, part, soapHeaderMap, objs, params);
System.out.println(zbggData);
}
}
学到了吗?

浙公网安备 33010602011771号