Comments (31)
I try to make call this SOAP by the soapUI tool.
Request:
http://pastebin.com/vzR23bZm
Response:
http://pastebin.com/r1TBHCWp
And it seems to working good. I will be able to try check this error about few hours, but I don't have many experience with VS.
from wsdl-creator.
I debugged with soapUI and with fiddler to see what was happening. soapUI is doing fine.
Fiddler can track the request and response from visual studio....I can see the values in the returned XML. But for some reason, the values do not deserialize correctly in visual studio. Output of fiddler is below.
from wsdl-creator.
Another idea. How does this service work in a java based environment or a client in another language? I am not currently setup to try other languages besides C# and PHP.
I am trying to achieve a cross platform view of how it works? If it works in other environments, could it be something specific to .net?
from wsdl-creator.
I also tried to use the wsdl created through wsdl-creator in the SoapServer hoping it might help. But after I do that, the Server will receive the call but doesn't send any values back (both to PHP client and to visual studio). Is that expected?
from wsdl-creator.
Wsdl-creator was using between PHP <> PHP, PHP <> Java and PHP <> Ruby on rails, and all of above working without any problems.
You must show sample code the SoapServer.
from wsdl-creator.
Here it is, it also includes some of my experiments in comments.
<?php
/**
* Created by PhpStorm.
* User: Devang
* Date: 12/03/14
* Time: 16:02
*/
function myException($exception)
{
echo "<b>Exception:</b> " . $exception->getMessage();
}
set_exception_handler('myException');
require_once '../vendor/autoload.php';
require 'ConsumptionCalculator.php';
if (isset($_GET['rest'])) {
$cc = new ConsumptionCalculator();
$result = $cc->CalculateConsumption(
$_POST['ElexUser'],
$_POST['ElexPass'],
$_POST['PostCode'],
$_POST['PROP_TYPE'],
$_POST['PROP_AGE'],
$_POST['BEDROOMS'],
$_POST['ROOM_HEATING'],
$_POST['WATER_HEATING'],
$_POST['BOILER_TYPE'],
$_POST['BOILER_AGE'],
$_POST['ELEC_USAGE'],
$_POST['PEOPLE']
);
header( "content-type: application/xml; charset=ISO-8859-15" );
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
$resultElement = $xml->createElement('Result');
$errorMessageElement = $xml->createElement('ErrorMessage', $result->ErrorMessage);
$gasElement = $xml->createElement('GasKwhsPerAnnum', $result->GasKwhsPerAnnum);
$elecElement = $xml->createElement('ElecKwhsPerAnnum', $result->ElecKwhsPerAnnum);
$resultElement->appendChild($errorMessageElement);
$resultElement->appendChild($gasElement);
$resultElement->appendChild($elecElement);
$xml->appendChild($resultElement);
echo $xml->saveXML();
}
else {
if ($_SERVER['SERVER_NAME'] == 'localhost') {
$localServer = true;
}
else {
$localServer = false;
}
if ($localServer) {
$uri = "http://localhost:{$_SERVER['SERVER_PORT']}/ConsCalc/Server.php?XDEBUG_SESSION_START=PHPSTORM";
$nameSpace = "http://localhost:{$_SERVER['SERVER_PORT']}";
}
else {
$uri = 'http://conscalc.elxws7.com/ConsCalc/Server.php';
$nameSpace = "http://conscalc.elxws7.com";
}
$nameSpace = "http://ElConsCalc";
$wsdl = new WSDL\WSDLCreator('ConsumptionCalculator', $uri);
$wsdl->setNamespace($nameSpace);
if (isset($_GET['wsdl'])) {
$wsdl->renderWSDL();
}
elseif (isset($_GET['desc'])) {
$wsdl->renderWSDLService();
}
else {
$server = new SoapServer(null, ['uri' => $nameSpace]);
/* $server = new SoapServer(null, ['uri' => $nameSpace . '/consumptioncalculator']);
if ($localServer) {
$server = new SoapServer("Local.wsdl");
}
else {
$server = new SoapServer("Remote.wsdl");
}
$server = new SoapServer($uri . '?wsdl'); */
$server->setClass('ConsumptionCalculator');
$server->handle();
}
}
from wsdl-creator.
Also, the important code for the ConsumptionCalculator class:
<?php
/**
* Created by PhpStorm.
* User: Devang
* Date: 12/03/14
* Time: 14:59
*/
require 'phppostcode.php';
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Enum\Type;
class Result {
/**
* @type string
*/
public $ErrorMessage;
/**
* @type double
*/
public $GasKwhsPerAnnum;
/**
* @type double
*/
public $ElecKwhsPerAnnum;
}
class ConsumptionCalculator {
private $propTypeResponses = ["SEM_H","SEM_B","MID_H","MAIS","FLAT","END_H","DET_H","DET_B"];
private $propAgeResponses = ["PRE_1919","1919_1995","1995_PLUS","DONT_KNOW"];
private $bedroomsResponses = ["1","2","3","4","5","6_PLUS"];
private $roomHeatingResponses =
["ELC_PLUG_HEAT","ELC_STRG_HEAT","ELC_UNDR_HEAT","GAS_CENTRAL","GAS_ROOM_HEAT","OIL_OTHER","DONT_KNOW"];
private $waterHeatingResponses = ["GAS","ELEC","OIL_OTHER","DONT_KNOW"];
private $boilerTypeResponses = ["BACK","COMBI","CON","REG","ELEC","OIL_OTHER","DONT_KNOW"];
private $boilerAgeResponses = ["OLD","AVG","NEW","DONT_KNOW","NA"];
private $elecUsageResponses = ["LOW","MED","HIGH","DONT_KNOW"];
private $peopleResponses = ["1","2","3","4","5","6","7","8_PLUS"];
// maybe not needed....
private $regionalWeightings =
["AREA_LO","AREA_MS","AREA_NO","AREA_NS","AREA_SE","AREA_SO","AREA_SS","AREA_SW","AREA_YO"];
/**
* @param string $ElexUser,
* @param string $ElexPass,
* @param string $PostCode
* @param string $PROP_TYPE
* @param string $PROP_AGE
* @param string $BEDROOMS
* @param string $ROOM_HEATING
* @param string $WATER_HEATING
* @param string $BOILER_TYPE
* @param string $BOILER_AGE
* @param string $ELEC_USAGE
* @param string $PEOPLE
* @return wrapper $result @className=Result
*/
public function CalculateConsumption(
$ElexUser,
$ElexPass,
$PostCode,
$PROP_TYPE,
$PROP_AGE,
$BEDROOMS,
$ROOM_HEATING,
$WATER_HEATING,
$BOILER_TYPE,
$BOILER_AGE,
$ELEC_USAGE,
$PEOPLE ) {
from wsdl-creator.
I found bug while generating WSDL for the wrapper annotation, currently fixed in dev-master, maybe it was the case of your problems.
from wsdl-creator.
I can try it.
I am quite new to PHP. I used the composer integration to get 1.0.1 of wsdl-creator.
Is it possible to get dev-master in the same way? I see some other projects where you dev versions are available through composer.
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 22 March 2014 08:43
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
I found bug while generating WSDL for the wrapper annotation, currently fixed in dev-master, maybe it was the case of your problems.
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-38346271.
from wsdl-creator.
In the composer.json file in entry require
just set "piotrooo/wsdl-creator": "dev-master"
.
from wsdl-creator.
I did that and ran an update with composer. It looks like it has done the right thing to my projects composer.json and composer.lock.
But the generated wsdl’s are identical to the previous ones.
I want to make sure if my vendor directory is updated. How do I know by looking inside it if I am running the dev-master version?
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 22 March 2014 09:43
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
In the composer.json file in entry require just set "piotrooo/wsdl-creator": "dev-master".
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-38347213.
from wsdl-creator.
This is how your wsdl should look like: http://pastebin.com/Vn0nZr0f (I generated moments ago with the code provided by you).
To check you version of wsdl creator use command: php composer.phar show
and you should compare current version with github version. I would recommend you the composer docs: https://getcomposer.org/doc/
from wsdl-creator.
I tried the wsdl from pastebin. It looks the same as I had and there is no change in the behaviour.
I did the “show” command and it shows the text below….I looked in github and the id 6708ee5 looks like your latest release.
piotrooo/wsdl-creator dev-master 6708ee5 PHP WSDL creator using PHPdoc (annotations, reflections).
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 23 March 2014 00:20
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
This is how your wsdl should look like: http://pastebin.com/Vn0nZr0f (I generated moments ago with the code provided by you).
To check you version of wsdl creator use command: php composer.phar show and you should compare current version with github version. I would recommend you the composer docs: https://getcomposer.org/doc/
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-38369081.
from wsdl-creator.
So I think it is some specific thing connected with .net and don't know anything about it.
You have version 6708ee5 of the wsdl-creator but recent is 311eb3c version.
from wsdl-creator.
Ok, thanks for your help.
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 23 March 2014 15:47
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
So I think it is some specific thing in .net and and don't know anything about it.
You have version 6708ee56708ee5 of the wsdl-creator but recent is 311eb3chttps://github.com/piotrooo/wsdl-creator/commit/311eb3c version.
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-38386249.
from wsdl-creator.
If you tell me exactly where the error is I will try to fix it. Pull requests are always welcome :).
from wsdl-creator.
That is the hard part.
The XML response coming from the SOAP server looks good to me.. My PHP client deserializes correctly. But there is something about it that .Net doesn’t like and it fails to deserialize. But even at the time of client compilation (i.e. the client proxy generation), .Net warns of a problem with the WSDL.
I am doing guesswork, but my feeling is that if you can fix the problem at the time of proxy generation, it will most likely fix the problem.
I am very new at SOAP and XML and I can’t do much in the way of actual coding. But I have spent quite a few days reading online posts. I read in many places that .Net doesn’t like the RPC/literal style and although it is a more complicated WSDL, document/literal/wrapped is the style which will give maximum interoperability.
So, one idea for you is to have an option in your generator to generate document/literal/wrapped WSDL. But I can’t help with coding….all of this is too much out of scope for me.
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 23 March 2014 15:57
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
If you tell me exactly where the error is I will try to fix it. Pull requests are always welcome :).
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-38386521.
from wsdl-creator.
I read about the wsdl styles here http://www.ibm.com/developerworks/library/ws-whichwsdl/ and if I'll have some time I try to implement different binding styles of the wsdl, but this is not too easy, because e.g. style document/literal wrapped needs from me creating new schema
in types
section. This type is originates from Microsoft so I think that part of generated wsdl is not good for .net.
from wsdl-creator.
I currently add document literal wrapped binding style. Can you check this feature with C#?
To set this style just set:
$wsdl = new WSDLCreator('WrapperSoapServer', 'http://localhost/wsdl-creator/examples/WrapperExampleSoapServer.php');
$wsdl->setNamespace("http://foo.bar/")->setBindingStyle(new DocumentLiteralWrapped());
and try to consume this with visual studio.
This feature is currently in dev-master.
Thanks!
from wsdl-creator.
I got the latest dev-master version from composer and this is the output of “php composer.phar show –i”:
C:\Users\Devang\PhpstormProjects\WsdlTest> php .\composer.phar show -i
piotrooo/wsdl-creator dev-master 1e84c9c PHP WSDL creator using PHPdoc (annotations, reflections).
But the class DocumentLiteralWrapped doesn’t seem to be in the source and my script dies when I try to initialize the object.
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 31 March 2014 08:44
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
I currently add document literal wrapped binding style. Can you check this feature with C#?
To set this style just set:
$wsdl = new WSDLCreator('WrapperSoapServer', 'http://localhost/wsdl-creator/examples/WrapperExampleSoapServer.php');
$wsdl->setNamespace("http://foo.bar/")->setBindingStyle(new DocumentLiteralWrapped());
and try to consume this with visual studio.
Thanks!
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-39061088.
from wsdl-creator.
Ummm, this is very wired. This class should be in the location src/WSDL/XML/Styles/DocumentLiteralWrapped.php
.
Have you any trace of this error?
from wsdl-creator.
Are you import the class? Full class name is new \WSDL\XML\Styles\DocumentLiteralWrapped()
.
from wsdl-creator.
I see. The file is present in the location.
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 01 April 2014 12:30
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
Ummm, this is very wired. This class should be in the location src/WSDL/XML/Styles/DocumentLiteralWrapped.php.
Have you any trace of this error?
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-39194994.
from wsdl-creator.
This works. I can see the WSDL now. Let me create visual studio client.
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 01 April 2014 12:37
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
Are you import the class? Full class name is new \WSDL\XML\Styles\DocumentLiteralWrapped().
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-39195445.
from wsdl-creator.
Visual studio still doesn’t like the generated wsdl. See below.
[cid:[email protected]]
From: Piotr Olaszewski [mailto:[email protected]]
Sent: 01 April 2014 12:37
To: piotrooo/wsdl-creator
Cc: Devang Mehta
Subject: Re: [wsdl-creator] Problems trying to consume in visual studio 2013 (#6)
Are you import the class? Full class name is new \WSDL\XML\Styles\DocumentLiteralWrapped().
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/6#issuecomment-39195445.
from wsdl-creator.
I don't have any img.
from wsdl-creator.
Please attach the generated WSDL too.
from wsdl-creator.
from wsdl-creator.
<definitions xmlns:tns="http://foo.bar/wrappersoapserver" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://foo.bar/wrappersoapserver/types" name="WrapperSoapServer" targetNamespace="http://foo.bar/wrappersoapserver">
<types>
<xsd:schema xmlns="http://foo.bar/wrappersoapserver/types" targetNamespace="http://foo.bar/wrappersoapserver/types">
<xsd:element name="User">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="xsd:int"/>
<xsd:element name="payment" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getUserStringRequestParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="user" element="ns:User"/>
<xsd:element name="id" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getUserStringResponseParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nameWithAge" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getUserRequestParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="xsd:string"/>
<xsd:element name="payment" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getUserResponseParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="userReturn" element="ns:User"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getEmployeesRequestParameters">
<xsd:complexType>
<xsd:sequence/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="ArrayOfEmployees">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" arrayType="ns:Employee[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Employee">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:int"/>
<xsd:element name="department" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getEmployeesResponseParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="employees" type="ns:ArrayOfEmployees"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="ArrayOfEmployeesList">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" arrayType="ns:Employee[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="getEmployeesDepartmentsRequestParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="employeesList" type="ns:ArrayOfEmployeesList"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getEmployeesDepartmentsResponseParameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="str" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="getUserStringRequest">
<part name="parameters" element="ns:getUserStringRequestParameters"/>
</message>
<message name="getUserStringResponse">
<part name="parameters" element="ns:getUserStringResponseParameters"/>
</message>
<message name="getUserRequest">
<part name="parameters" element="ns:getUserRequestParameters"/>
</message>
<message name="getUserResponse">
<part name="parameters" element="ns:getUserResponseParameters"/>
</message>
<message name="getEmployeesRequest">
<part name="parameters" element="ns:getEmployeesRequestParameters"/>
</message>
<message name="getEmployeesResponse">
<part name="parameters" element="ns:getEmployeesResponseParameters"/>
</message>
<message name="getEmployeesDepartmentsRequest">
<part name="parameters" element="ns:getEmployeesDepartmentsRequestParameters"/>
</message>
<message name="getEmployeesDepartmentsResponse">
<part name="parameters" element="ns:getEmployeesDepartmentsResponseParameters"/>
</message>
<portType name="WrapperSoapServerPortType">
<operation name="getUserString">
<input message="tns:getUserStringRequest"/>
<output message="tns:getUserStringResponse"/>
</operation>
<operation name="getUser">
<input message="tns:getUserRequest"/>
<output message="tns:getUserResponse"/>
</operation>
<operation name="getEmployees">
<input message="tns:getEmployeesRequest"/>
<output message="tns:getEmployeesResponse"/>
</operation>
<operation name="getEmployeesDepartments">
<input message="tns:getEmployeesDepartmentsRequest"/>
<output message="tns:getEmployeesDepartmentsResponse"/>
</operation>
</portType>
<binding name="WrapperSoapServerBinding" type="tns:WrapperSoapServerPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getUserString">
<soap:operation soapAction="http://foo.bar/wrappersoapserver/#getUserString"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getUser">
<soap:operation soapAction="http://foo.bar/wrappersoapserver/#getUser"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getEmployees">
<soap:operation soapAction="http://foo.bar/wrappersoapserver/#getEmployees"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getEmployeesDepartments">
<soap:operation soapAction="http://foo.bar/wrappersoapserver/#getEmployeesDepartments"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="WrapperSoapServerService">
<port name="WrapperSoapServerPort" binding="tns:WrapperSoapServerBinding">
<soap:address location="http://localhost/index.php?XDEBUG_SESSION_START=PHPSTORM"/>
</port>
</service>
</definitions>
from wsdl-creator.
OK, thanks I'll investigate it, and I'll try to fix.
from wsdl-creator.
I google about yours error, and I found some articles. I read something about it and found several possible causes.
Look at this links:
http://blog.vbmagic.net/2013/01/09/cannot-import-wsdlporttype-error-when-adding-a-service-reference/
http://social.msdn.microsoft.com/Forums/en-US/453568d5-24fb-4c57-b97a-451c8baad3c0/cannot-import-wsdlporttype#2b2fe0f5-1646-4b4f-97f9-cd5aa6e61704 - Syl user response
Please feedback.
from wsdl-creator.
Related Issues (20)
- object + object HOT 2
- Doctrine entity HOT 1
- Complex type defenitions problems HOT 1
- Object Type dont work whith various class
- Problem wraper
- Complex type HOT 1
- return std object HOT 1
- Set nillable to false ?
- remove XSD:type HOT 1
- Next planned release HOT 1
- Quick start ? HOT 1
- Support for minOccurs and maxOccurs
- Cache annotations
- duplicate element definitions HOT 4
- How to return array of objects with defined class
- Please don't use dev dependancies HOT 1
- @WebParam header doesn't work
- Add GitHub Actions support
- Run code for 8.0 and 8.1
- GitHub features
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wsdl-creator.