Skip to content

SOAPService Examples

Dmytro Katashev edited this page Aug 13, 2024 · 3 revisions

SOAP Service Examples

Basic SOAP Request

This example demonstrates how to create and send a basic SOAP request using the SOAPService class.

var SOAPService = require('*/cartridge/scripts/webservice/SOAPService');

// Define a custom SOAP service
var OrderSOAPService = SOAPService.extend({
    SERVICE_CONFIGURATIONS: {
        default: 'order.soap.service',
    },

    /**
     * Fetch order details using SOAP request.
     *
     * @param {dw.order.Order} order - The order.
     * @returns {dw.svc.Result} - The SOAP service result.
     */
    fetchOrderDetails: function(order) {
        return this.fetch({
            // Use WSDL file name here
            webReference: 'OrderService',
            // Without service object it will use the defaultService port
            service: {
                name: 'OrderService',
                port: 'OrderPort'
            },
            // Operation is a method name which should be executed: svc.serviceClient[method]
            operation: 'getOrder',
            // Create a webReference request object
            createRequestPayload: function(svc, webReference) {
                var requestPayload = new webReference.GetOrder();
                requestPayload.orderNo = order.orderNo;
                return requestPayload;
            }
        });
    }
});

// Perform the SOAP call
var result = OrderSOAPService.fetchOrderDetails(order);

SOAP Request with Full Control

This example demonstrates how to take full control over the SOAP request and response handling by implementing custom execution and parsing logic.

var SOAPService = require('*/cartridge/scripts/webservice/SOAPService');

// Define a custom SOAP service
var OrderSOAPService = SOAPService.extend({
    SERVICE_CONFIGURATIONS: {
        default: 'order.soap.service',
    },

    /**
     * Fetch order details using SOAP request.
     *
     * @param {dw.order.Order} order - The order.
     * @returns {dw.svc.Result} - The SOAP service result.
     */
    fetchOrderDetails: function(order) {
        return this.fetch({
            // Use WSDL file name here
            webReference: 'OrderService',
            // Without service object it will use the defaultService port
            service: {
                name: 'OrderService',
                port: 'OrderPort'
            },
            // Create a webReference request object
            createRequestPayload: function(svc, webReference) {
                var requestPayload = new webReference.GetOrder();
                requestPayload.orderNo = order.orderNo;
                return requestPayload;
            },
            // Execution callback to control arguments
            executeRequest: function(svc, requestPayload) {
                return svc.serviceClient.getOrder(requestPayload.orderNo);
            },
            // Parsing response payload object
            parseResponsePayload: function(svc, responsePayload) {
                var objectWrapper = {
                    orderNo: responsePayload.orderNo
                };

                return objectWrapper;
            }
        });
    }
});

// Perform the SOAP call
var result = OrderSOAPService.fetchOrderDetails(order);

SOAP Request with Security Configuration

This example shows how to set up and use WS-Security for SOAP requests.

var SOAPService = require('*/cartridge/scripts/webservice/SOAPService');

// Define a custom SOAP service with WS-Security
var SecureSOAPService = SOAPService.extend({
    SERVICE_CONFIGURATIONS: {
        default: 'secure.soap.service',
    },

    /**
     * Fetch secure order details using SOAP request.
     *
     * @param {dw.order.Order} order - The order.
     * @returns {dw.svc.Result} - The SOAP service result.
     */
    fetchSecureOrderDetails: function(order) {
        var WSUtil = require('dw/ws/WSUtil');
        var HashMap = require('dw/util/HashMap');

        var requestConfigMap = new HashMap();
        var responseConfigMap = new HashMap();

        requestConfigMap.put(WSUtil.WS_USER, 'username');
        responseCfg.put(WSUtil.WS_SIGNATURE_USER, 'myservicekey');

        return this.fetch({
            // Use WSDL file name here
            webReference: 'OrderService',
            // Without service object it will use the defaultService port
            service: {
                name: 'OrderService',
                port: 'OrderPort'
            },
            securityConfig: {
                requestConfigMap: requestConfigMap,
                responseConfigMap: responseConfigMap
            },
            // Create a webReference request object
            createRequestPayload: function(svc, webReference) {
                var requestPayload = new webReference.GetOrder();
                requestPayload.orderNo = order.orderNo;
                return requestPayload;
            }
        });
    }
});

// Perform the SOAP call
var result = SecureSOAPService.fetchSecureOrderDetails(order);

SOAP Request with Custom Properties

This example demonstrates how to pass custom properties, such as encoding or endpoint configurations, to the SOAP client.

var SOAPService = require('*/cartridge/scripts/webservice/SOAPService');

// Define a custom SOAP service with custom properties
var CustomPropertySOAPService = SOAPService.extend({
    SERVICE_CONFIGURATIONS: {
        default: 'property.soap.service',
    },

    /**
     * Fetch order details using SOAP request with custom properties.
     *
     * @param {dw.order.Order} order - The order.
     * @returns {dw.svc.Result} - The SOAP service result.
     */
    fetchOrderDetailsWithProperties: function(order) {
        return this.fetch({
            webReference: 'OrderService',
            service: {
                name: 'OrderService',
                port: 'OrderPort'
            },
            properties: {
                encoding: 'UTF-8',
                endpoint: 'https://custom.endpoint.com',
                session: true
            },
            createRequestPayload: function(svc, webReference) {
                var requestPayload = new webReference.GetOrder();
                requestPayload.orderNo = order.orderNo;
                return requestPayload;
            }
        });
    }
});

// Perform the SOAP call
var result = CustomPropertySOAPService.fetchOrderDetailsWithProperties(order);

Clone this wiki locally