создать запрос SOAP из WSDL вручную - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь понять, как создать запрос 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. Я ищу последнее. Пожалуйста.

...