spiderplant0
spiderplant0

Reputation: 3952

Invalid SOAP message or SOAP version mismatch

I'm using the SOA Client Firefox addon to sent out a a SOAP request to some ONVIF cameras. Below you will see the request for the 'GetServices' request. It works fine for one camera, but for another (AXIS camera) I get the error: 'Invalid SOAP message or SOAP version mismatch'.

There are other questions about this. But none of the answers were clear to me. One mentioned changing to soap version 1.2 (how do I do this?). And this one seems to be solved by a brief comment: Onvif - Invalid SOAP message or SOAP version mismatch If anyone thinks it is relevant to my case, could you expand on it please.

URL = http://10.253.253.2/onvif/device_service
Method = POST

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:ns0="http://www.onvif.org/ver10/device/wsdl" 
xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
    <wsse:Security mustUnderstand="true">
        <wsse:UsernameToken>
            <wsse:Username>admin</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">sLOOZG8o+369zaBclGwn4+tjOac=</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWQyMzVjNGNhYmIxMTQ1ZjEzZWVlYzcyZDkzZjcwODI=</wsse:Nonce>
            <wsu:Created>2015-07-27T15:47:31.178534Z</wsu:Created>
        </wsse:UsernameToken>
    </wsse:Security>
</SOAP-ENV:Header>
<ns1:Body>
    <ns0:GetServices>
        <ns0:IncludeCapability>false</ns0:IncludeCapability>
    </ns0:GetServices>
</ns1:Body>
</SOAP-ENV:Envelope>

And the error response...

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsa5="http://www.w3.org/2005/08/addressing" xmlns:xmime="http://tempuri.org/xmime.xsd" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:wsrfbf="http://docs.oasis-open.org/wsrf/bf-2" xmlns:wstop="http://docs.oasis-open.org/wsn/t-1" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:wsrfr="http://docs.oasis-open.org/wsrf/r-2" xmlns:aa="http://www.axis.com/vapix/ws/action1" xmlns:aev="http://www.axis.com/vapix/ws/event1" xmlns:ali1="http://www.axis.com/vapix/ws/light/CommonBinding" xmlns:ali2="http://www.axis.com/vapix/ws/light/IntensityBinding" xmlns:ali3="http://www.axis.com/vapix/ws/light/AngleOfIlluminationBinding" xmlns:ali4="http://www.axis.com/vapix/ws/light/DayNightSynchronizeBinding" xmlns:ali="http://www.axis.com/vapix/ws/light" xmlns:tan1="http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding" xmlns:tan2="http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding" xmlns:tan="http://www.onvif.org/ver20/analytics/wsdl" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tev1="http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding" xmlns:tev2="http://www.onvif.org/ver10/events/wsdl/EventBinding" xmlns:tev3="http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:tev4="http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding" xmlns:tev="http://www.onvif.org/ver10/events/wsdl" xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl" xmlns:tptz="http://www.onvif.org/ver20/ptz/wsdl" xmlns:trt="http://www.onvif.org/ver10/media/wsdl" xmlns:ter="http://www.onvif.org/ver10/error" xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics">
<SOAP-ENV:Body>
    <SOAP-ENV:Fault SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Code>
        <SOAP-ENV:Value>env:VersionMismatch</SOAP-ENV:Value>
    </SOAP-ENV:Code>
    <SOAP-ENV:Reason>
        <SOAP-ENV:Text xml:lang="en">SOAP version mismatch</SOAP-ENV:Text>
    </SOAP-ENV:Reason>
    <SOAP-ENV:Detail>
        <SOAP-ENV:Text>Invalid SOAP message or SOAP version mismatch</SOAP-ENV:Text>
    </SOAP-ENV:Detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

UPDATE

I've since discovered that to change to SOAP v1.2 you need to use http://www.w3.org/2003/05/soap-envelope instead of http://schemas.xmlsoap.org/soap/envelop. I tried that (two replacements in above code) but then it did not work in either camera. I cant see what I'm doing wrong.

Upvotes: 2

Views: 48452

Answers (2)

rekotc
rekotc

Reputation: 555

@spiderplant0 gave the corrent answer. In my case i had a SoapUI project and i was trying to call a Soap 1.2 endpoint. I configured the WS-Security into this project, and i used the wrong namespace "http://schemas.xmlsoap.org/soap/envelope/" in the Signature step, specifically in the Body part. Because of this misconfiguration, the endpoint kept telling me that it "could not validate request: security processing failed (actions mismatch)", which didn't make sense to me, as the WS-Security steps were given in the correct order.

I replaced the wrong namespace with the correct one "http://www.w3.org/2003/05/soap-envelope", and it worked!

Thanks to @spiderplant0 for pointing this out!

Upvotes: 1

spiderplant0
spiderplant0

Reputation: 3952

Ok figured it out. The axis camera needs SOAP v1.2. And the differences between the versions are: the namespace url for xmlns:SOAP-ENV; the content-type and action in the http header.

ONVIF using SOAP v1.1 ...

    url = http://10.253.253.159/onvif/device_service

    Method = POST

    http header = Content-Type: text/xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";

    <SOAP-ENV:Envelope 
                xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
                xmlns:wsdl="http://www.onvif.org/ver10/device/wsdl"
                xmlns:sch="http://www.onvif.org/ver10/schema"
         >
        <SOAP-ENV:Header>
            <wsse:Security mustUnderstand="true">
                <wsse:UsernameToken>
                    <wsse:Username>admin</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0">admin</wsse:Password>
                    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWQyMzVjNGNhYmIxMTQ1ZjEzZWVlYzcyZDkzZjcwODI=</wsse:Nonce>
                    <wsu:Created>2015-07-27T15:47:31.178534Z</wsu:Created>
                </wsse:UsernameToken>
            </wsse:Security>
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>              
            <wsdl:GetSystemDateAndTime/> 
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

ONVIF using SOAP v1.2 ...

    url = http://10.253.253.159/onvif/device_service

    Method = POST

    http header = Content-Type: application/soap+xml; charset=utf-8;  

    <SOAP-ENV:Envelope 
                xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
                xmlns:wsdl="http://www.onvif.org/ver10/device/wsdl"
                xmlns:sch="http://www.onvif.org/ver10/schema"
         >
        <SOAP-ENV:Header>
            <wsse:Security mustUnderstand="true">
                <wsse:UsernameToken>
                    <wsse:Username>admin</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0">admin</wsse:Password>
                    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWQyMzVjNGNhYmIxMTQ1ZjEzZWVlYzcyZDkzZjcwODI=</wsse:Nonce>
                    <wsu:Created>2015-07-27T15:47:31.178534Z</wsu:Created>
                </wsse:UsernameToken>
            </wsse:Security>                
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>              
            <wsdl:GetSystemDateAndTime/>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

Upvotes: 6

Related Questions