Я пытаюсь понять, как создать запрос SOAP, просто прочитав WSDL.
Все указывает на использование библиотеки или клиента, что понятно, но я хочу знать, как читать WSDL и самостоятельно создавать ответ, если я хочу сделать это в cURL или Postman. (Я понимаю, что написание XML-кода занимает очень много времени, и проще использовать что-то вроде SoapUI, но я бы хотел выяснить, как в целом создавать эти SOAP-запросы).
Я использую NOAA в качестве примера. http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl
<?xml version="1.0"?>
<!-- **********************************************************************
ndfdXML.wsdl
John L. Schattel MDL 4 July 2007
Aniesha L. Alford
Red Hat Linux Apache Server
SOURCE CODE CONTROL INFORMATION
Name:
%PM%
%PID%
Status:
%PS%
History:
%PL%
Change Document History:
%PIRC%
************************************************************************* -->
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:si="http://soapinterop.org/xsd"
xmlns:tns="https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl"
xmlns:typens="https://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl">
<types>
<xsd:schema targetNamespace="https://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
<xsd:simpleType name="sectorType">
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='conus'/>
<xsd:enumeration value='nhemi'/>
<xsd:enumeration value='alaska'/>
<xsd:enumeration value='guam'/>
<xsd:enumeration value='hawaii'/>
<xsd:enumeration value='puertori'/>
<xsd:enumeration value='npacocn'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="unitType">
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='e'/>
<xsd:enumeration value='m'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="formatType">
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='24 hourly'/>
<xsd:enumeration value='12 hourly'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="productType">
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='time-series'/>
<xsd:enumeration value='glance'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="latLonPairType">
<xsd:restriction base='xsd:string'>
<xsd:pattern value="[\-]?\d{1,2}\.\d+,[\-]?\d{1,3}\.\d+" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="listLatLonType">
<xsd:restriction base='xsd:string'>
<xsd:pattern value="[\-]?\d{1,2}\.\d+,[\-]?\d{1,3}\.\d+( [\-]?\d{1,2}\.\d+,[\-]?\d{1,3}\.\d+)*" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="zipCodeType">
<xsd:restriction base='xsd:string'>
<xsd:pattern value="\d{5}(\-\d{4})?" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="zipCodeListType">
<xsd:restriction base='xsd:string'>
<xsd:pattern value="\d{5}(\-\d{4})?( \d{5}(\-\d{4})?)*" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="featureTypeType">
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='Forecast_Gml2Point'/>
<xsd:enumeration value='Forecast_Gml2AllWx'/>
<xsd:enumeration value='Forecast_GmlsfPoint'/>
<xsd:enumeration value='Forecast_GmlObs'/>
<xsd:enumeration value='NdfdMultiPointCoverage'/>
<xsd:enumeration value='Ndfd_KmlPoint'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="compTypeType">
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='IsEqual'/>
<xsd:enumeration value='Between'/>
<xsd:enumeration value='GreaterThan'/>
<xsd:enumeration value='GreaterThanEqualTo'/>
<xsd:enumeration value='LessThan'/>
<xsd:enumeration value='LessThanEqualTo'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="listCityNamesType">
<xsd:restriction base='xsd:string'>
<xsd:pattern value="[a-zA-Z'\-]*( ?[a-zA-Z'\-]*)*,[A-Z][A-Z](\|[a-zA-Z'\-]*( ?[a-zA-Z'\-]*)*,[A-Z][A-Z])*" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="displayLevelType">
<xsd:restriction base='xsd:integer'>
<xsd:enumeration value='1'/>
<xsd:enumeration value='2'/>
<xsd:enumeration value='3'/>
<xsd:enumeration value='4'/>
<xsd:enumeration value='12'/>
<xsd:enumeration value='34'/>
<xsd:enumeration value='1234'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="weatherParametersType">
<xsd:all>
<xsd:element name="maxt" type="xsd:boolean"/>
<xsd:element name="mint" type="xsd:boolean"/>
<xsd:element name="temp" type="xsd:boolean"/>
<xsd:element name="dew" type="xsd:boolean"/>
<xsd:element name="pop12" type="xsd:boolean"/>
<xsd:element name="qpf"
type="xsd:boolean"/>
.
.
.
</definitions>
Это было очень долго, поэтому я сократил его.
Прежде всего я хочу знать:
- Как получить конечные точки для каждой операции
- Что я положу вbody?
- Какие QNames и пространство имен использовать в сообщении тела?
Каждый ресурс утверждает, что он просто использует SoapUI или генерирует с помощьюбиблиотека и пропустить научиться читать WSDL. Я ищу последнее. Пожалуйста.