开发者

Soap request with ruby net-http gives error 400 bad request

I try to consume a soap webservice. with ruby net/https gem. No matter what i try, i keep getting 400 Bad Request readbody=true errors I suspect it has something to do with the headers but i don't know how i can get further debugging this. any help is welcome!

Regards,

Remco

require 'net/https'
require 'uri'
# Create the http object
pem = File.read("cert.pem")
url = "https://tstedpwebservice.vecozo.nl/Router.V1.svc/IndienenDeclaratieV1Soap11"
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new(pem)
http.key = OpenSSL::PKey::RSA.new(pem)
http.verify_mode = OpenSSL::SSL::VERIFY_PEER


# Create the SOAP Envelope
xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
xml<<"<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:urn=\"urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1\"" 
xml<<"xmlns:urn1=\"urn:www-vecozo-nl:messages:vsp:edp:declareren:indienen:v1\"" 
xml<<"xmlns:urn2=\"urn:www-vecozo-nl:types:vsp:edp:declareren:indienen:v1\">"
xml<<"   <soap:Header/>"
xml<<"   <soap:Body>"
xml<<"      <urn:Indienen>"
xml<<"         <urn:IndienenRequest>"
xml<<"            <urn1:Declaratie>"
xml<<"               <urn2:IndienerEmailadres>noreply@vecozo.nl</urn2:IndienerEmailadres>"
xml<<"               <urn2:ReferentieZorgaanbieder>REF001</urn2:ReferentieZorgaanbieder>"
xml<<"               <urn2:EmailNotificaties>"
xml<<"                 <urn2:IndicatieControleResultaat>false</urn2:IndicatieControleResultaat>"
xml<<"                 <urn2:IndicatieAfkeuringResultaat>true</urn2:IndicatieAfkeuringResultaat>"
xml<<"               </urn2:EmailNotificaties>"
xml<<"               <urn2:DeclaratieBestand>"
xml<<"                  <urn2:Bestandsnaam>bestandsnaam.txt</urn2:Bestandsnaam>"
xml<<"                  <urn2:Bestandsgrootte>1254</urn2:Bestandsgrootte>"
xml<<"                  <urn2:Data>aZFQ=</urn2:Data>"
xml<<"               </urn2:DeclaratieBestand>"
xml<<"            </urn1:Declaratie>"
xml<<"         </urn:IndienenRequest>"
xml<<"      </urn:Indienen>"
xml<<"   </soap:Body>"
xml<<"</soap:Envelope>"
xml<<"</xml>"
# Set Headers

headers={
"Accept-Encoding"=>"gzip, deflate",
"Content-Type" => 'text/xml; charset=UTF-8',
"SOAPAction" => "urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen",
"User-Agent"=>"Jakarta Commons-HttpClient/3.1",
"Host"=>"edpwebservice.vecozo.nl",
"Content-Length"=> xml.length.to_s
}


result= http.post(uri.path, xml, headers)
puts result.inspect

this is de wsdl, I hope this helps:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
  xmlns:tns="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1"
  xmlns:types="urn:www-vecozo-nl:types:vsp:edp:declareren:indienen:v1"
  xmlns:msg="urn:www-vecozo-nl:messages:vsp:edp:declareren:indienen:v1"
  xmlns:ia="urn:www-vecozo-nl:isalive:v1"
  xmlns:iam="urn:www-vecozo-nl:messages:isalive:v1"
  targetNamespace="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:fault="urn:www-vecozo-nl:types:vsp:edp:faultcontract"
  name="VspEdpIncomingZvlIndienen">

    <wsdl:types>
    <xs:schema targetNamespace="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1" elementFormDefault="qualified">
            <!-- Types -->
        <xs:import schemaLocation="./Schemas/V1/Vecozo.Vsp.ISEIBestand.Edp.Indienen.Types.xsd" namespace="urn:www-vecozo-nl:types:vsp:edp:declareren:indienen:v1" />

        <!-- Messages -->
        <xs:import schemaLocation="./Schemas/V1/Vecozo.Vsp.ISEIBestand.Edp.Indienen.Messages.xsd" namespace="urn:www-vecozo-nl:messages:vsp:edp:declareren:indienen:v1" />

        <!-- Fault -->
        <xs:import schemaLocation="./Schemas/V1/Vecozo.Vsp.Edp.FaultContract.xsd" namespace="urn:www-vecozo-nl:types:vsp:edp:faultcontract" />

        <!-- Requests & Responses -->
        <xs:element name="Indienen">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="IndienenRequest" type="msg:IndienenRequest" nillable="true" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="IndienenResponse">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="IndienenResult" type="msg:IndienenResponse" nillable="true" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="VspEdpFaultContract" type="fault:VspEdpFaultContract" />
    </xs:schema>

</wsdl:types>

<wsdl:message name="IndienenSoapIn">
    <wsdl:part name="parameters" element="tns:Indienen" />
</wsdl:message>

<wsdl:message name="IndienenSoapOut">
    <wsdl:part name="parameters" element="tns:IndienenResponse" />
</wsdl:message>

<wsdl:message name="VspEdpIncomingZvlIndienenFaultContract_FaultMessage">
    <wsdl:part name="detail" element="tns:VspEdpFaultContract" />
</wsdl:message>

<wsdl:portType name="VspEdpIncomingZvlIndienen">
    <wsdl:operation name="Indienen">
        <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Via deze methode kan men declaraties indienen bij VECOZO.</wsdl:documentation>
        <wsdl:input开发者_运维技巧 wsaw:Action="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen" message="tns:IndienenSoapIn" />
        <wsdl:output wsaw:Action="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:IndienenResponse" message="tns:IndienenSoapOut" />
        <wsdl:fault wsaw:Action="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:IndienenFault"
                    name="VspEdpFaultContract"
                    message="tns:VspEdpIncomingZvlIndienenFaultContract_FaultMessage" />
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="VspEdpIncomingZvlIndienenBinding12" type="tns:VspEdpIncomingZvlIndienen">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="Indienen">
        <soap12:operation soapAction="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen" style="document" />
        <wsdl:input>
            <soap12:body use="literal" />
        </wsdl:input>
        <wsdl:output>
            <soap12:body use="literal" />
        </wsdl:output>
        <wsdl:fault name="VspEdpFaultContract">
            <soap12:fault name="VspEdpFaultContract" use="literal" />
        </wsdl:fault>
    </wsdl:operation>
</wsdl:binding>

<wsdl:binding name="VspEdpIncomingZvlIndienenBinding" type="tns:VspEdpIncomingZvlIndienen">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="Indienen">
        <soap:operation soapAction="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen" style="document" />
        <wsdl:input>
            <soap:body use="literal" />
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal" />
        </wsdl:output>
        <wsdl:fault name="VspEdpFaultContract">
            <soap:fault name="VspEdpFaultContract" use="literal" />
        </wsdl:fault>
    </wsdl:operation>
</wsdl:binding>


<wsdl:service name="VspEdpIncomingZvlIndienen">
    <wsdl:port name="VspEdpIncomingZvlIndienen12" binding="tns:VspEdpIncomingZvlIndienenBinding12">
        <soap12:address location="https://edpwebservice.vecozo.nl/Router.V1.svc/IndienenDeclaratieV1" />
    </wsdl:port>
    <wsdl:port name="VspEdpIncomingZvlIndienen" binding="tns:VspEdpIncomingZvlIndienenBinding">
        <soap:address location="https://edpwebservice.vecozo.nl/Router.V1.svc/IndienenDeclaratieV1Soap11" />
    </wsdl:port>
</wsdl:service>


I struggled with the same issue for way too long. It turned out that xmlns:soap url in the documentation of vecozo is wrong. It should be http://schemas.xmlsoap.org/soap/envelope/ instead of http://www.w3.org/2003/05/soap-envelope.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜