Skip to content

Commit d10dac9

Browse files
authoredAug 22, 2016
Merge pull request #3 from strongloop/server-test-fixes
Fixed soapHeader addition for both server and client
2 parents 6e27b52 + 5b5e718 commit d10dac9

File tree

4 files changed

+25
-27
lines changed

4 files changed

+25
-27
lines changed
 

‎src/base.js

+19
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var EventEmitter = require('events').EventEmitter;
22
var NamespaceContext = require('./parser/nscontext');
33
var SOAPElement = require('./soapModel').SOAPElement;
44
var xmlBuilder = require('xmlbuilder');
5+
var XMLHandler = require('./parser/xmlHandler');
56

67
class Base extends EventEmitter {
78
constructor(wsdl, options) {
@@ -122,6 +123,24 @@ class Base extends EventEmitter {
122123
return nsContext;
123124
}
124125

126+
addSoapHeadersToEnvelope(soapHeaderElement, xmlHandler) {
127+
for (let i = 0, n = this.soapHeaders.length; i < n; i++) {
128+
let soapHeader = this.soapHeaders[i];
129+
let elementDescriptor;
130+
if (typeof soapHeader.value === 'object') {
131+
if (soapHeader.qname && soapHeader.qname.nsURI) {
132+
let element = this.findElement(soapHeader.qname.nsURI, soapHeader.qname.name);
133+
elementDescriptor =
134+
element && element.describe(this.wsdl.definitions);
135+
}
136+
xmlHandler.jsonToXml(soapHeaderElement, null, elementDescriptor,
137+
soapHeader.value);
138+
} else { //soapHeader has XML value
139+
XMLHandler.parseXml(soapHeaderElement, soapHeader.xml);
140+
}
141+
}
142+
}
143+
125144
}
126145

127146
module.exports = Base;

‎src/client.js

+3-13
Original file line numberDiff line numberDiff line change
@@ -158,18 +158,8 @@ class Client extends Base {
158158

159159
var soapHeaderElement = envelope.header;
160160
var soapBodyElement = envelope.body;
161-
162-
for (let i = 0, n = this.soapHeaders.length; i < n; i++) {
163-
let soapHeader = this.soapHeaders[i];
164-
if (soapHeader.qname.nsURI === null || soapHeader.qname.nsURI === undefined) {
165-
continue;
166-
}
167-
let element = this.findElement(soapHeader.qname.nsURI, soapHeader.qname.name);
168-
let elementDescriptor =
169-
element && element.describe(this.wsdl.definitions);
170-
xmlHandler.jsonToXml(soapHeaderElement, nsContext, elementDescriptor,
171-
soapHeader.value);
172-
}
161+
//add soapHeaders to envelope. Header can be xml, or JSON object which may or may not be described in WSDL/XSD.
162+
this.addSoapHeadersToEnvelope(soapHeaderElement, this.xmlHandler);
173163

174164
if (self.security && self.security.addSoapHeaders) {
175165
xml = self.security.addSoapHeaders(envelope.header);
@@ -229,7 +219,7 @@ class Client extends Base {
229219

230220
var outputEnvDescriptor = operationDescriptor.outputEnvelope;
231221
try {
232-
obj = xmlHandler.xmlToJson(nsContext, body, outputBodyDescriptor);
222+
obj = xmlHandler.xmlToJson(nsContext, body, outputEnvDescriptor);
233223
} catch (error) {
234224
// When the output element cannot be looked up in the wsdl and the body is JSON
235225
// instead of sending the error, we pass the body in the response.

‎src/server.js

+3-7
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,9 @@ class Server extends Base {
356356
this._addWSSecurityHeader(env.header);
357357
}
358358

359-
if (this.soapHeaders) {
360-
for (var i = 0, n = this.soapHeaders.length; i < n; i++) {
361-
var header = this.soapHeaders[i];
362-
env.header.element(header);
363-
}
364-
}
365-
359+
var soapHeaderElement = env.header;
360+
//add soapHeaders to envelope. Header can be xml, or JSON object which may or may not be described in WSDL/XSD.
361+
this.addSoapHeadersToEnvelope(soapHeaderElement, this.xmlHandler);
366362
return env;
367363
};
368364

‎src/soapModel.js

-7
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,6 @@ class SOAPElement {
1515
}
1616
}
1717

18-
addTo(parent, nsContext, xmlHandler) {
19-
if (this.xml) {
20-
xmlHandler.parseXml(parent, xml);
21-
} else {
22-
xmlHandler.jsonToXml(parent, nsContext, null, this.qname, this.value);
23-
}
24-
}
2518
}
2619

2720
/**

0 commit comments

Comments
 (0)
Please sign in to comment.