2

I am working with a 3rd party on SOAP integration, and they send a detailed async fault response to any POST done by us. The data they send is rigid and they say they cannot (or won't) change it.

I am receiving an error on a "mustUnderstand":

soapenv:Fault>
     <faultcode>soapenv:MustUnderstand</faultcode>
     <faultstring>Did not understand header {http://schemas.xmlsoap.org/soap/security/2000-12}Signature</faultstring>
  </soapenv:Fault>

As well as their namespace on the fault.

<B:Fault>
 <B:faultcode>xxxxxxx</B:faultcode>
 <B:faultstring>xxxxxxxx</B:faultstring>
 <B:detail>
    <faultdetails>xxxxxxxxxxxxxx</faultdetails>
 </B:detail>
</B:Fault>

Error:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <soapenv:Fault>
            <faultcode>soapenv:Client</faultcode>
            <faultstring>No operation available for request {http://schemas.xmlsoap.org/soap/envelope/}fault, please check the WSDL for the service.</faultstring>
       </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>

I already have to use a force.com site for unauthenticated posts, but is there anyway I can change the namespace that Salesforce allows as well as ignore the MustUnderstand?

Edit. Even this call is invalid:

<B:Envelope xmlns:B="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP:Header xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12">
   </SOAP:Header>
   <B:Body id="Body">
       <B:fault>
          <faultcode>Hello</faultcode>
          <faultstring>World!</faultstring>
          <detail>
              <faultdetails>A corresponding parent message could not be located. </faultdetails>
          </detail>
        </B:fault>
   </B:Body>
</B:Envelope>

I have to apply my namespace "http://soap.sforce.com/schemas/class/myApexClass" to the fault block. So I am not sure how it would work. Note: this isn't is synchronous response

  • 1
    Personally, it feels like their SOAP implementation is not SOAP-compliant, and they're trying to cover this up somehow. The namespace should not matter if it is declared properly (xmlns:B="some-namespace-url"). There's not much you can do if they're not actually SOAP compliant except to write your own HttpRequest-based implementation. – sfdcfox Dec 11 '18 at 19:43
  • The namespace for B is "schemas.xmlsoap.org/soap/envelope" If I add another namespace "xmlns:Q="soap.sforce.com/schemas/class/myApexClass" and use that in the Fault block instead of B, it works fine. – awh01 Dec 12 '18 at 18:16
  • @sfdcfox Even the call listed in the Edit is invalid. returns: <faultstring>No operation available for request {schemas.xmlsoap.org/soap/envelope}fault, please check the WSDL for the service.</faultstring> – awh01 Dec 13 '18 at 7:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.