strong-soap
Version:
A minimal node SOAP client
101 lines (97 loc) • 3.33 kB
JavaScript
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
// Node module: strong-soap
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
'use strict';
var WSDLElement = require('./wsdlElement');
var QName = require('../qname');
var debug = require('debug')('strong-soap:wsdl:parameter');
/**
* Base class for Input/Output
*/
class Parameter extends WSDLElement {
constructor(nsName, attrs, options) {
super(nsName, attrs, options);
}
addChild(child) {
// soap:body
if (child.name === 'body') {
this.body = child;
} else if (child.name === 'header') {
this.headers = this.headers || [];
// soap:header
this.headers.push(child);
} else if (child.name === 'fault') {
//Revisit. Never gets executed.
this.fault = child;
}
}
postProcess(definitions) {
// portType.operation.*
if (this.parent.parent.name === 'portType') {
// Resolve $message
var messageName = QName.parse(this.$message).name;
var message = definitions.messages[messageName];
if (!message) {
console.error('Unable to resolve message %s for', this.$message, this);
throw new Error('Unable to resolve message ' + this.$message);
}
message.postProcess(definitions);
this.message = message;
}
// binding.operation.*
if (this.parent.parent.name === 'binding') {
if (this.body) {
if (this.body.$parts) {
this.body.parts = {};
let parts = this.body.$parts.split(/\s+/);
for (let i = 0, n = parts.length; i < n; i++) {
this.body.parts[parts[i]] = this.message.parts[parts[i]];
}
} else {
if (this.message && this.message.parts) {
this.body.parts = this.message.parts;
}
}
}
if (this.headers) {
for (let i = 0, n = this.headers.length; i < n; i++) {
let header = this.headers[i];
let message;
if (header.$message) {
let messageName = QName.parse(header.$message).name;
message = definitions.messages[messageName];
if (message) {
message.postProcess(definitions);
} else {
debug('Message not found: ', header.$message);
}
} else {
message = this.message;
}
if (header.$part && message) {
header.part = message.parts[header.$part];
}
}
}
//Revisit.. this.name is always undefined because there is no code which calls addChild(..) with child.name = 'fault.
//code works inspite of not executing this block. Remove it?
if (this.name === 'fault') {
let message = this.fault.parent.message;
if (message) {
message.postProcess(definitions);
for (let p in message.parts) {
// The fault message MUST have only one part per WSDL 1.1 spec
this.fault.part = message.parts[p];
break;
}
} else {
debug('Message not found: ', this.fault.$message);
}
}
}
}
}
Parameter.allowedChildren = ['body', 'SecuritySpecRef', 'documentation', 'header'];
module.exports = Parameter;
//# sourceMappingURL=parameter.js.map