Giter Club home page Giter Club logo

node-soap-server's Introduction


soap-server

Soap server, using pure javascript for node.js.

Simple example

var soap = require('soap-server');

function MyTestService(){
}
MyTestService.prototype.test1 = function(myArg1, myArg2){
	return myArg1 + myArg2;
};

var soapServer = new soap.SoapServer();
var soapService = soapServer.addService('testService', new MyTestService());
	
soapServer.listen(1337, '127.0.0.1');

The WSDL at http://127.0.0.1:1337/testService?wsdl would be:

<?xml version="1.0"?>
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:tns="http://server.soap.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.soap.com/" name="testServiceService">
	<types>
		<xsd:schema version="1.0" targetNamespace="http://server.soap.com/">
			<xsd:element name="MyObject" type="tns:MyObject"/>
			<xsd:complexType name="MyObject">
				<xsd:sequence>
					<xsd:element name="concated" type="xsd:string" minOccurs="0"/>
					<xsd:element name="incremented" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:element name="MyTestObject" type="tns:MyTestObject"/>
			<xsd:complexType name="MyTestObject">
				<xsd:sequence>
					<xsd:element name="strArg" type="xsd:string" minOccurs="0"/>
					<xsd:element name="intArg" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</types>
	<message name="test1">
		<part name="myArg1" element="xsd:string"/>
		<part name="myArg2" element="xsd:string"/>
	</message>
	<message name="test1Response">
		<part name="return" element="xsd:string"/>
	</message>
	<portType name="testService">
		<operation name="test1">
			<input wsam:Action="test1" message="tns:test1"/>
			<output wsam:Action="http://server.soap.com/testService/test1Response" message="tns:test1Response"/>
		</operation>
	</portType>
	<binding name="testServicePortBinding" type="tns:testService">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
		<operation name="test1">
			<soap:operation soapAction="test1"/>
			<input name="test1">
				<soap:body use="literal"/>
			</input>
			<output name="test1Response">
				<soap:body use="literal"/>
			</output>
		</operation>
	</binding>
	<service name="testServiceService">
		<port name="testServicePort" binding="tns:testServicePortBinding">
			<soap:address location="http://127.0.0.1:1337/testService"/>
		</port>
	</service>
</definitions>

Forcing arguments and returned types

function MyTestService(){
}
MyTestService.prototype.test2 = function(myArg1, myArg2){
	return myArg1 + myArg2;
};

var soapServer = new soap.SoapServer();
var soapService = soapServer.addService('testService', new MyTestService());

var test2operation = soapService.getOperation('test2');
test2operation.setOutputType('number');
test2operation.setInputType('myArg1', {type: 'number'});
test2operation.setInputType('myArg2', {type: 'number'});

soapServer.listen(1337, '127.0.0.1');

The WSDL at http://127.0.0.1:1337/testService?wsdl would be:

<?xml version="1.0"?>
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:tns="http://server.soap.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.soap.com/" name="testServiceService">
	<types>
		<xsd:schema version="1.0" targetNamespace="http://server.soap.com/">
			<xsd:element name="MyObject" type="tns:MyObject"/>
			<xsd:complexType name="MyObject">
				<xsd:sequence>
					<xsd:element name="concated" type="xsd:string" minOccurs="0"/>
					<xsd:element name="incremented" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:element name="MyTestObject" type="tns:MyTestObject"/>
			<xsd:complexType name="MyTestObject">
				<xsd:sequence>
					<xsd:element name="strArg" type="xsd:string" minOccurs="0"/>
					<xsd:element name="intArg" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</types>
	<message name="test2">
		<part name="myArg1" element="xsd:int"/>
		<part name="myArg2" element="xsd:int"/>
	</message>
	<message name="test2Response">
		<part name="return" element="xsd:int"/>
	</message>
	<portType name="testService">
		<operation name="test2">
			<input wsam:Action="test2" message="tns:test2"/>
			<output wsam:Action="http://server.soap.com/testService/test2Response" message="tns:test2Response"/>
		</operation>
	</portType>
	<binding name="testServicePortBinding" type="tns:testService">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
		<operation name="test2">
			<soap:operation soapAction="test2"/>
			<input name="test2">
				<soap:body use="literal"/>
			</input>
			<output name="test2Response">
				<soap:body use="literal"/>
			</output>
		</operation>
	</binding>
	<service name="testServiceService">
		<port name="testServicePort" binding="tns:testServicePortBinding">
			<soap:address location="http://127.0.0.1:1337/testService"/>
		</port>
	</service>
</definitions>

Object type response

function MyObject(){
}
MyObject.prototype.concated = '';
MyObject.prototype.incremented = 0;

function MyTestService(){
}
MyTestService.prototype.test3 = function(strArg, intArg){
	var ret = new MyObject();
	ret.concated = strArg + '[' + intArg + ']';
	ret.incremented = intArg + 1;
	return ret;
};

var soapServer = new soap.SoapServer();
var soapService = soapServer.addService('testService', new MyTestService());

var test3operation = soapService.getOperation('test3');
test3operation.setOutputType(MyObject, 'MyObject');
test3operation.setInputType('intArg', {type: 'number'});

soapServer.listen(1337, '127.0.0.1');

The WSDL at http://127.0.0.1:1337/testService?wsdl would be:

<?xml version="1.0"?>
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:tns="http://server.soap.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.soap.com/" name="testServiceService">
	<types>
		<xsd:schema version="1.0" targetNamespace="http://server.soap.com/">
			<xsd:element name="MyObject" type="tns:MyObject"/>
			<xsd:complexType name="MyObject">
				<xsd:sequence>
					<xsd:element name="concated" type="xsd:string" minOccurs="0"/>
					<xsd:element name="incremented" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:element name="MyTestObject" type="tns:MyTestObject"/>
			<xsd:complexType name="MyTestObject">
				<xsd:sequence>
					<xsd:element name="strArg" type="xsd:string" minOccurs="0"/>
					<xsd:element name="intArg" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</types>
	<message name="test2Response">
		<part name="return" element="xsd:int"/>
	</message>
	<message name="test3">
		<part name="strArg" element="xsd:string"/>
		<part name="intArg" element="xsd:int"/>
	</message>
	<message name="test3Response">
		<part name="return" element="tns:MyObject"/>
	</messag
	<portType name="testService">
		<operation name="test3">
			<input wsam:Action="test3" message="tns:test3"/>
			<output wsam:Action="http://server.soap.com/testService/test3Response" message="tns:test3Response"/>
		</operation>
	</portType>
	<binding name="testServicePortBinding" type="tns:testService">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
		<operation name="test3">
			<soap:operation soapAction="test3"/>
			<input name="test3">
				<soap:body use="literal"/>
			</input>
			<output name="test3Response">
				<soap:body use="literal"/>
			</output>
		</operation>
	</binding>
	<service name="testServiceService">
		<port name="testServicePort" binding="tns:testServicePortBinding">
			<soap:address location="http://127.0.0.1:1337/testService"/>
		</port>
	</service>
</definitions>

Object type request

function MyTestObject(){
}
MyTestObject.prototype.strArg = '';
MyTestObject.prototype.intArg = 0;

function MyTestService(){
}
MyTestService.prototype.test4 = function(myTestObjectInstance){
	return myTestObjectInstance.strArg + '[' + myTestObjectInstance.intArg + ']';
};

var soapServer = new soap.SoapServer();
var soapService = soapServer.addService('testService', new MyTestService());

var test4operation = soapService.getOperation('test4');
test4operation.setInputType('myTestObjectInstance', MyTestObject);


soapServer.listen(1337, '127.0.0.1');

The WSDL at http://127.0.0.1:1337/testService?wsdl would be:

<?xml version="1.0"?>
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:tns="http://server.soap.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.soap.com/" name="testServiceService">
	<types>
		<xsd:schema version="1.0" targetNamespace="http://server.soap.com/">
			<xsd:element name="MyObject" type="tns:MyObject"/>
			<xsd:complexType name="MyObject">
				<xsd:sequence>
					<xsd:element name="concated" type="xsd:string" minOccurs="0"/>
					<xsd:element name="incremented" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:element name="MyTestObject" type="tns:MyTestObject"/>
			<xsd:complexType name="MyTestObject">
				<xsd:sequence>
					<xsd:element name="strArg" type="xsd:string" minOccurs="0"/>
					<xsd:element name="intArg" type="xsd:int" minOccurs="0"/>
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</types>
	<message name="test4">
		<part name="myTestObjectInstance" element="tns:MyTestObject"/>
	</message>
	<message name="test4Response">
		<part name="return" element="xsd:string"/>
	</message>
	<portType name="testService">
		<operation name="test4">
			<input wsam:Action="test4" message="tns:test4"/>
			<output wsam:Action="http://server.soap.com/testService/test4Response" message="tns:test4Response"/>
		</operation>
	</portType>
	<binding name="testServicePortBinding" type="tns:testService">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
		<operation name="test4">
			<soap:operation soapAction="test4"/>
			<input name="test4">
				<soap:body use="literal"/>
			</input>
			<output name="test4Response">
				<soap:body use="literal"/>
			</output>
		</operation>
	</binding>
	<service name="testServiceService">
		<port name="testServicePort" binding="tns:testServicePortBinding">
			<soap:address location="http://127.0.0.1:1337/testService"/>
		</port>
	</service>
</definitions>

node-soap-server's People

Watchers

lemonhall avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.