Skip to content

Commit f683ef5

Browse files
smokhovkpetrovicaussieboiMarko Boskovicw666
authored
Enable async methods for postProcess (#1338)
- Add tests - Update readme Co-authored-by: kpetrovic <[email protected]> Co-authored-by: aussieboi <[email protected]> Co-authored-by: Marko Boskovic <[email protected]> Co-authored-by: Vasily Martynov <[email protected]>
1 parent 691f55f commit f683ef5

File tree

3 files changed

+115
-2
lines changed

3 files changed

+115
-2
lines changed

Readme.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,32 @@ You must specify all of the namespaces and namespace prefixes yourself. The ele
695695
}})
696696
```
697697

698+
- Making `postProcess` either synchronous or asynchronous with a `Promise`:
699+
- Synchronous (classic):
700+
```javascript
701+
// ...
702+
client.registerUser(requestBody, {
703+
postProcess: (xml) => {
704+
const testString = "Jane"
705+
xml = xml.replace("John", testString)
706+
return xml;
707+
}
708+
}
709+
// ...
710+
```
711+
- Asynchronous (resolves promise on async invoke of `postProcess`):
712+
```javascript
713+
// ...
714+
client.registerUser(requestBody, {
715+
postProcess: async (xml) => {
716+
const testString = await new Promise(resolve => setTimeout(() => resolve("Jane"), 50));
717+
xml = xml.replace("John", testString)
718+
return xml;
719+
}
720+
}
721+
// ...
722+
```
723+
698724
#### Extra Headers (optional)
699725
700726
Object properties define extra HTTP headers to be sent on the request.

src/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ export class Client extends EventEmitter {
298298
}
299299
}
300300

301-
private _invoke(method: OperationElement, args, location: string, callback, options, extraHeaders) {
301+
private async _invoke(method: OperationElement, args, location: string, callback, options, extraHeaders) {
302302
const name = method.$name;
303303
const input = method.input;
304304
const output = method.output;
@@ -459,7 +459,7 @@ export class Client extends EventEmitter {
459459
}
460460

461461
if (options && options.postProcess) {
462-
xml = options.postProcess(xml);
462+
xml = await options.postProcess(xml);
463463
}
464464

465465
this.lastMessage = message;

test/client-test.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,6 +1834,93 @@ describe('Client posting complex body', () => {
18341834
});
18351835
}, baseUrl);
18361836
});
1837+
1838+
1839+
it('should resolve promise on async invoke postProcess', function (done) {
1840+
soap.createClient(__dirname + '/wsdl/complex/registration-common.wsdl', function (err, client) {
1841+
if (err) {
1842+
return void done(err);
1843+
}
1844+
assert.ok(client);
1845+
1846+
var requestBody = {
1847+
id: 'ID00000000000000000000000000000000',
1848+
lastName: 'Doe',
1849+
firstName: 'John',
1850+
dateOfBirth: '1970-01-01',
1851+
correspondenceLanguage: 'ENG',
1852+
emailAddress: '[email protected]',
1853+
lookupPermission: 'ALLOWED',
1854+
companyAddress: {
1855+
address: {
1856+
streetName: 'Street',
1857+
postalCode: 'Code',
1858+
city: 'City',
1859+
countryCode: 'US'
1860+
},
1861+
companyName: 'ACME'
1862+
}
1863+
}
1864+
1865+
client.registerUser(requestBody, {
1866+
postProcess: async (xml) => {
1867+
const testString = await new Promise(resolve => setTimeout(() => resolve("Jane"), 50));
1868+
1869+
xml = xml.replace("John", testString)
1870+
return xml;
1871+
}
1872+
}, function (err, result) {
1873+
assert.ok(client.lastRequest);
1874+
const expectedBody = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://test-soap.com/api/registration" xmlns:registrationMessages="http://test-soap.com/api/registration/messages" xmlns:commonMessages="http://test-soap.com/api/common/messages"><soap:Body><registrationMessages:registerUserRequest xmlns:registrationMessages="http://test-soap.com/api/registration/messages" xmlns="http://test-soap.com/api/registration/messages"><registrationMessages:id>ID00000000000000000000000000000000</registrationMessages:id><registrationMessages:lastName>Doe</registrationMessages:lastName><registrationMessages:firstName>Jane</registrationMessages:firstName><registrationMessages:dateOfBirth>1970-01-01</registrationMessages:dateOfBirth><registrationMessages:correspondenceLanguage>ENG</registrationMessages:correspondenceLanguage><registrationMessages:emailAddress>[email protected]</registrationMessages:emailAddress><registrationMessages:lookupPermission>ALLOWED</registrationMessages:lookupPermission><registrationMessages:companyAddress><ct:address xmlns:ct="http://test-soap.com/api/common/types"><ct:streetName>Street</ct:streetName><ct:postalCode>Code</ct:postalCode><ct:city>City</ct:city><ct:countryCode>US</ct:countryCode></ct:address><ct:companyName xmlns:ct="http://test-soap.com/api/common/types">ACME</ct:companyName></registrationMessages:companyAddress></registrationMessages:registerUserRequest></soap:Body></soap:Envelope>'
1875+
assert.strictEqual(client.lastRequest, expectedBody);
1876+
1877+
done();
1878+
});
1879+
}, baseUrl);
1880+
})
1881+
1882+
it('should resolve sync invoke postProcess', function (done) {
1883+
soap.createClient(__dirname + '/wsdl/complex/registration-common.wsdl', function (err, client) {
1884+
if (err) {
1885+
return void done(err);
1886+
}
1887+
assert.ok(client);
1888+
1889+
var requestBody = {
1890+
id: 'ID00000000000000000000000000000000',
1891+
lastName: 'Doe',
1892+
firstName: 'John',
1893+
dateOfBirth: '1970-01-01',
1894+
correspondenceLanguage: 'ENG',
1895+
emailAddress: '[email protected]',
1896+
lookupPermission: 'ALLOWED',
1897+
companyAddress: {
1898+
address: {
1899+
streetName: 'Street',
1900+
postalCode: 'Code',
1901+
city: 'City',
1902+
countryCode: 'US'
1903+
},
1904+
companyName: 'ACME'
1905+
}
1906+
}
1907+
1908+
client.registerUser(requestBody, {
1909+
postProcess: (xml) => {
1910+
const testString = "Jane"
1911+
1912+
xml = xml.replace("John", testString)
1913+
return xml;
1914+
}
1915+
}, function (err, result) {
1916+
assert.ok(client.lastRequest);
1917+
const expectedBody = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://test-soap.com/api/registration" xmlns:registrationMessages="http://test-soap.com/api/registration/messages" xmlns:commonMessages="http://test-soap.com/api/common/messages"><soap:Body><registrationMessages:registerUserRequest xmlns:registrationMessages="http://test-soap.com/api/registration/messages" xmlns="http://test-soap.com/api/registration/messages"><registrationMessages:id>ID00000000000000000000000000000000</registrationMessages:id><registrationMessages:lastName>Doe</registrationMessages:lastName><registrationMessages:firstName>Jane</registrationMessages:firstName><registrationMessages:dateOfBirth>1970-01-01</registrationMessages:dateOfBirth><registrationMessages:correspondenceLanguage>ENG</registrationMessages:correspondenceLanguage><registrationMessages:emailAddress>[email protected]</registrationMessages:emailAddress><registrationMessages:lookupPermission>ALLOWED</registrationMessages:lookupPermission><registrationMessages:companyAddress><ct:address xmlns:ct="http://test-soap.com/api/common/types"><ct:streetName>Street</ct:streetName><ct:postalCode>Code</ct:postalCode><ct:city>City</ct:city><ct:countryCode>US</ct:countryCode></ct:address><ct:companyName xmlns:ct="http://test-soap.com/api/common/types">ACME</ct:companyName></registrationMessages:companyAddress></registrationMessages:registerUserRequest></soap:Body></soap:Envelope>'
1918+
assert.strictEqual(client.lastRequest, expectedBody);
1919+
1920+
done();
1921+
});
1922+
}, baseUrl);
1923+
})
18371924
});
18381925

18391926
describe('Connection header', () => {

0 commit comments

Comments
 (0)