PageSourceSearch

https://beeceptor.com/docs/assets/js/8ee09db5.8c266ef8.js

js beeceptor.com collected 2026-10-02 10:50:28 UTC 24,513 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkbeeceptor_docs=self.webpackChunkbeeceptor_docs||[]).push([["746"],{93935(e,t,s){s.r(t),s.d(t,{metadata:()=>n,default:()=>l,frontMatter:()=>i,contentTitle:()=>a,toc:()=>d,assets:()=>c});var n=JSON.parse('{"id":"features/template-engine/features-soap","title":"Mocking SOAP Services","description":"Mock and debug SOAP/XML requests in Beeceptor with SOAPAction filters. Match specific SOAP operations, auto-detect actions, and return custom responses or faults with ease.","source":"@site/docs/features/template-engine/features-template-soap-support.md","sourceDirName":"features/template-engine","slug":"/soap-services-dynamic-operation-response","permalink":"/docs/soap-services-dynamic-operation-response","draft":false,"unlisted":false,"tags":[{"inline":true,"label":"Features","permalink":"/docs/tags/features"}],"version":"current","sidebarPosition":1,"frontMatter":{"id":"features-soap","slug":"/soap-services-dynamic-operation-response","title":"Mocking SOAP Services","description":"Mock and debug SOAP/XML requests in Beeceptor with SOAPAction filters. Match specific SOAP operations, auto-detect actions, and return custom responses or faults with ease.","keywords":["soap action","SOAPAction","dynamic-mocks","soap","wsdl","headers"],"sidebar_label":"Mocking SOAP Services","sidebar_position":1,"tags":["Features"]},"sidebar":"tutorialSidebar","previous":{"title":"Reuse Request Data","permalink":"/docs/parameterized-dynamic-response-payload-using-request-header"},"next":{"title":"Generate Fake Data","permalink":"/docs/dummy-random-data-generation-during-mock"}}'),o=s(74848),r=s(28453);let i={id:"features-soap",slug:"/soap-services-dynamic-operation-response",title:"Mocking SOAP Services",description:"Mock and debug SOAP/XML requests in Beeceptor with SOAPAction filters. Match specific SOAP operations, auto-detect actions, and return custom responses or faults with ease.",keywords:["soap action","SOAPAction","dynamic-mocks","soap","wsdl","headers"],sidebar_label:"Mocking SOAP Services",sidebar_position:1,tags:["Features"]},a,c={},d=[{value:"Matching SOAP Operations",id:"matching-soap-operations",level:2},{value:"SOAP Envelope",id:"soap-envelope",level:2},{value:"Intermittent JSON object in Beeceptor",id:"intermittent-json-object-in-beeceptor",level:4},{value:"Accessing Request Parameters in the Mocking Template",id:"accessing-request-parameters-in-the-mocking-template",level:4},{value:"Key Points on Handling SOAP Requests",id:"key-points-on-handling-soap-requests",level:4}];function A(e){let t={a:"a",code:"code",em:"em",h2:"h2",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Beeceptor\u2019s template engine provides native support for SOAP-based services, allowing you mocking and debugging of SOAP/XML requests. With the introduction of SOAPAction filters, you can precisely target specific SOAP operations and configure custom mock responses or SOAP faults as required."}),"\n",(0,o.jsx)(t.h2,{id:"matching-soap-operations",children:"Matching SOAP Operations"}),"\n",(0,o.jsxs)(t.p,{children:["Beeceptor's ",(0,o.jsx)(t.em,{children:"SOAPAction Matches"})," filter in mock rules, making it easier to handle and test SOAP/XML-based requests. Many SOAP clients send a SOAPAction header or embed the operation name in the ",(0,o.jsx)(t.code,{children:"Content-Type"})," header or SOAP body. This filter allows you to create mock rules that specifically target these SOAP requests, giving a better support for SOAP-based integrations."]}),"\n",(0,o.jsx)(t.p,{children:"Beeceptor automatically detects the SOAP action from various request components, ensuring smooth matching without the need to worry about version compatibility in your mock rules."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"soap-action filter in mock rules",src:s(94044).A+"",width:"960",height:"210"})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"How It Works"})}),"\n",(0,o.jsx)(t.p,{children:"The 'SOAPAction Matches' filter evaluates the incoming request and attempts to extract the SOAPAction value from multiple sources in a prioritized order:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Content-Type Header"})," \u2013 Looks for the action parameter in the ",(0,o.jsx)(t.code,{children:"Content-Type"})," header (commonly used in some SOAP clients)."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"SOAPAction Header"})," \u2013 Extracts the value from the ",(0,o.jsx)(t.code,{children:"SOAPAction"})," HTTP header, removing extra quotes if present."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"WS-Addressing in SOAP Body"})," \u2013 If WS-Addressing headers are present in the XML, the SOAP action is read from there."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Operation in SOAP Body"})," \u2013 Falls back to parsing the SOAP body to determine the invoked operation."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"URL Path"})," \u2013 As a last resort, the final segment of the request path is considered as the operation name."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"If a valid SOAP action is found, Beeceptor checks it against the value defined in your mock rule. If it matches, the request qualifies and corresponding mock response is sent to the client."}),"\n",(0,o.jsx)(t.h2,{id:"soap-envelope",children:"SOAP Envelope"}),"\n",(0,o.jsxs)(t.p,{children:["Beeceptor automatically parses incoming SOAP/XML request payloads and converts them into an ",(0,o.jsx)(t.a,{href:"/parameterized-dynamic-response-payload-using-request-header/#xml-request-payloads",children:"easy-to-use JSON object for response templates"}),". During this conversion, XML namespaces are removed to simplify access."]}),"\n",(0,o.jsxs)(t.p,{children:["SOAP requests generally follow a specific structure, which includes an ",(0,o.jsx)(t.code,{children:"Envelope"}),", ",(0,o.jsx)(t.code,{children:"Header"}),", and ",(0,o.jsx)(t.code,{children:"Body"}),". The ",(0,o.jsx)(t.code,{children:"Envelope"})," is the root element that wraps the entire message, while the ",(0,o.jsx)(t.code,{children:"Body"})," carries the actual request data. With this JSON representation of SOAP envelope, Beeceptor makes it straightforward to access elements such as the envelope, headers, and request parameters directly within your mock rules."]}),"\n",(0,o.jsx)(t.p,{children:"If you receive a SOAP request:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-xml",children:'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.example.com/webservice">\n   <soapenv:Header/>\n   <soapenv:Body>\n      <web:GetCityWeatherByZIP>\n         <web:ZIP>10001</web:ZIP>\n      </web:GetCityWeatherByZIP>\n   </soapenv:Body>\n</soapenv:Envelope>\n'})}),"\n",(0,o.jsxs)(t.p,{children:["Beeceptor parses the ",(0,o.jsx)(t.a,{href:"/concepts/soap-apis/#soap-message-structure",children:"SOAP envelope"})," and converts it to a simplified JSON object, which you can then use in your templates."]}),"\n",(0,o.jsx)(t.h4,{id:"intermittent-json-object-in-beeceptor",children:"Intermittent JSON object in Beeceptor"}),"\n",(0,o.jsx)(t.p,{children:"Beeceptor removes the XML namespace complexity and structures the SOAP request into a JSON format. This makes it straightforward to access the envelope, headers, and body parameters within your template."}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-json",children:'{\n  "Envelope": {\n    "Header": {},\n    "Body": {\n      "GetCityWeatherByZIP": {\n        "ZIP": "10001"\n      }\n    }\n  }\n}\n'})}),"\n",(0,o.jsx)(t.p,{children:"In the above JSON structure:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["The ",(0,o.jsx)(t.code,{children:"Envelope"})," is the root, encapsulating the ",(0,o.jsx)(t.code,{children:"Header"})," and ",(0,o.jsx)(t.code,{children:"Body"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["The ",(0,o.jsx)(t.code,{children:"Body"})," contains the actual request data, such as ",(0,o.jsx)(t.code,{children:"GetCityWeatherByZIP"})," and its parameter ",(0,o.jsx)(t.code,{children:"ZIP"}),"."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"You can access these parameters in your templates by referencing the path using dot notation on JSON object. For example, you would use the body helper to fetch the ZIP code from the parsed SOAP request."}),"\n",(0,o.jsx)(t.h4,{id:"accessing-request-parameters-in-the-mocking-template",children:"Accessing Request Parameters in the Mocking Template"}),"\n",(0,o.jsxs)(t.p,{children:["Here\u2019s an example template that uses the ",(0,o.jsx)(t.code,{children:"ZIP"})," code from the SOAP request to generate a mock response with dynamic data."]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-xml",children:"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.example.com/webservice\">\n   <soapenv:Body>\n      <web:GetCityWeatherByZIPResponse>\n         <web:CityWeather>\n            <web:City>New York</web:City>\n            <web:ZIP>{{body 'Envelope.Body.GetCityWeatherByZIP.ZIP'}}</web:ZIP>\n            <web:Weather>Cloudy</web:Weather>\n            <web:Temperature>18</web:Temperature>\n            <web:Humidity>{{faker 'number.int' '100'}}</web:Humidity>\n         </web:CityWeather>\n      </web:GetCityWeatherByZIPResponse>\n   </soapenv:Body>\n</soapenv:Envelope>\n"})}),"\n",(0,o.jsx)(t.h4,{id:"key-points-on-handling-soap-requests",children:"Key Points on Handling SOAP Requests"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Namespaces: Beeceptor automatically handles the XML namespaces in SOAP requests, str
1ipping them out so you don\u2019t have to worry about them when writing mock templates."}),"\n",(0,o.jsxs)(t.li,{children:["Accessing Nested Elements: You can easily access deeply nested elements within the SOAP body using the ",(0,o.jsx)(t.code,{children:"body"})," helper with dot notation. For example, to access ",(0,o.jsx)(t.code,{children:"ZIP"})," in the SOAP body, you can use ",(0,o.jsx)(t.code,{children:"{{body 'Envelope.Body.GetCityWeatherByZIP.ZIP'}}"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Handling Missing Data: If a parameter is missing from the SOAP request, you can provide a default value in the template using the ",(0,o.jsx)(t.code,{children:"body"})," helper's second parameter. For example: ",(0,o.jsx)(t.code,{children:"{{body 'Envelope.Body.GetCityWeatherByZIP.ZIP' 'Unknown'}}"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Dummy Values: You can combine the ",(0,o.jsx)(t.code,{children:"faker"})," helper to ",(0,o.jsx)(t.a,{href:"/dummy-data-generation-examples/",children:"generate random data"})," in the mocked response, allowing for more dynamic and realistic test scenarios."]}),"\n"]})]})}function l(e={}){let{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(A,{...e})}):A(e)}},94044(e,t,s){s.d(t,{A:()=>n});let n="data:image/png;base64,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"},28453(e,t,s){s.d(t,{R:()=>i,x:()=>a});var n=s(96540);let o={},r=n.createContext(o);function i(e){let t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.