18

I have never used any SOAP libraries in java, so I apologize for the newby-ness of this question.

I am trying to take advantage of Tivoli Endpoint Manager's SOAP API. I have generated the necessary classes from the WSDL file provided, using wsimport.exe (provided in the jdk).

Now I am provided with a ton of classes that I assume are packaging the information into xml format, but I am unsure what to do with them. I have read the documentation provided, but it is fuzzy at best.

The classes generated by wsimport are the following:

classes generated by wsimport

According to the documentation, the following Perl Code works for querying the Tivoli's API

use SOAP::Lite;
#arguments: [hostname] [username] [password] [relevance expression]
#hostname only, e.g. ’example.com’ rather than ’http://example.com/webreports’
my $host = $ARGV[0];
my $username = SOAP::Data->name(’username’ => $ARGV[1] );
my $password = SOAP::Data->name(’password’ => $ARGV[2] );
my $expr = SOAP::Data->name(’relevanceExpr’ => $ARGV[3] );
my $service = SOAP::Lite -> uri( ’http://’ . $host . ’/webreports?wsdl’ )
-> proxy( $host );
my $result = $service -> GetRelevanceResult( $expr, $username, $password );
if( $result->fault ) {
     print "faultcode: " . $result->faultcode . "\n";
     print "faultstring: " . $result->faultstring . "\n";
}
else {
     foreach my $answer ( $result->valueof( "//GetRelevanceResultResponse/a" ) ) {
           print $answer . "\n";
     }
}

Question: What are the equivalent SOAP client libraries in java? (The ones that I googled are so heavy 15mb+)

How would I write the the equivalent java stub code for the Perl above?

EDIT 1

Here is the Stub code I think found the the WebReportsService.java class

package connect.tivoli;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.4-b01
 * Generated source version: 2.2
 * 
 */
@WebServiceClient(name = "WebReportsService", targetNamespace = "http://schemas.bigfix.com/Relevance", wsdlLocation = "http://temwebreports/webreports?wsdl")
public class WebReportsService
    extends Service
{

    private final static URL WEBREPORTSSERVICE_WSDL_LOCATION;
    private final static WebServiceException WEBREPORTSSERVICE_EXCEPTION;
    private final static QName WEBREPORTSSERVICE_QNAME = new QName("http://schemas.bigfix.com/Relevance", "WebReportsService");

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://temwebreports/webreports?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        WEBREPORTSSERVICE_WSDL_LOCATION = url;
        WEBREPORTSSERVICE_EXCEPTION = e;
    }

    public WebReportsService() {
        super(__getWsdlLocation(), WEBREPORTSSERVICE_QNAME);
    }

    public WebReportsService(WebServiceFeature... features) {
        super(__getWsdlLocation(), WEBREPORTSSERVICE_QNAME, features);
    }

    public WebReportsService(URL wsdlLocation) {
        super(wsdlLocation, WEBREPORTSSERVICE_QNAME);
    }

    public WebReportsService(URL wsdlLocation, WebServiceFeature... features) {
        super(wsdlLocation, WEBREPORTSSERVICE_QNAME, features);
    }

    public WebReportsService(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public WebReportsService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
        super(wsdlLocation, serviceName, features);
    }

    /**
     * 
     * @return
     *     returns RelevancePortType
     */
    @WebEndpoint(name = "RelevancePort")
    public RelevancePortType getRelevancePort() {
        return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "RelevancePort"), RelevancePortType.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns RelevancePortType
     */
    @WebEndpoint(name = "RelevancePort")
    public RelevancePortType getRelevancePort(WebServiceFeature... features) {
        return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "RelevancePort"), RelevancePortType.class, features);
    }

    /**
     * 
     * @return
     *     returns UserManagementPortType
     */
    @WebEndpoint(name = "UserManagementPort")
    public UserManagementPortType getUserManagementPort() {
        return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "UserManagementPort"), UserManagementPortType.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns UserManagementPortType
     */
    @WebEndpoint(name = "UserManagementPort")
    public UserManagementPortType getUserManagementPort(WebServiceFeature... features) {
        return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "UserManagementPort"), UserManagementPortType.class, features);
    }

    /**
     * 
     * @return
     *     returns DashboardVariablePortType
     */
    @WebEndpoint(name = "DashboardVariablePort")
    public DashboardVariablePortType getDashboardVariablePort() {
        return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "DashboardVariablePort"), DashboardVariablePortType.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns DashboardVariablePortType
     */
    @WebEndpoint(name = "DashboardVariablePort")
    public DashboardVariablePortType getDashboardVariablePort(WebServiceFeature... features) {
        return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "DashboardVariablePort"), DashboardVariablePortType.class, features);
    }

    private static URL __getWsdlLocation() {
        if (WEBREPORTSSERVICE_EXCEPTION!= null) {
            throw WEBREPORTSSERVICE_EXCEPTION;
        }
        return WEBREPORTSSERVICE_WSDL_LOCATION;
    }

}

Solution:

This was much simpler than I thought WSDL generation did all the work. Here is how you use those generated classes.

package connect.tivoli;

public class testMain {

    public static void main(String[] args) {
        String relevanceQuery ="names of bes computers ";
        WebReportsService wr = new WebReportsService();
        RelevancePortType client;
        client = wr.getPort(RelevancePortType.class);
        System.out.println(client.getRelevanceResult(relevanceQuery, "ad\\username", "password"));
    }
JaminB
  • 778
  • 3
  • 9
  • 20
  • 1
    You should get port prom your service' class (WebReportsService I think) using getPort() method, then when you get port (e.g. endpoint) implementation object you will able to call any Web Service endpoint methods. Use ObjectFactory to create needed objects. Popular client libraries are JAX-WS (included in JRE6+) or CXF (from Apache). – Stanislav Mamontov Oct 21 '13 at 18:44
  • I'd love to hear about a lightweight SOAP client in Java. Apache CXF is what we use, and it's total bloatware. – dnault Oct 21 '13 at 18:45
  • 1
    Have you seen ? – deepakborania Oct 21 '13 at 18:49
  • yes it was posted in 2010, I just wanted to see if anything since then offered a better solution. – JaminB Oct 21 '13 at 18:52
  • I reposted the perl code. The old examples were from the wrong section of documentation. I need to do the exact same thing in Java as they are doing in perl. – JaminB Oct 21 '13 at 18:53
  • 1
    I haven't used the Tivoli tool, but when I did soap (it was apache axis 1.2, so long ago), I used those generated classes as args and return types for what may be your WebReportsService class (I'm guessing that's the client's stub). You maybe need to dig around in those generated classes, and see how to instantiate and configure the stub (set the endpoint, etc). This may also be useful: http://www.soapui.org/, I used it quite a bit for dev/testing. – Alper Akture Oct 21 '13 at 19:02

1 Answers1

27

There is a maven plugin, the cxf-codegen-plugin, that will auto generate java classes from a WSDL. It will also create a stub client for you if you want to see how to use the generated code.


Edit 2019-11-15

For this example I downloaded the wsdl located here* and saved it as stockquote.wsdl.

* The wsdl is no longer available from where I initially downloaded it. Find the wsdl included in this answer further below.


$ tree

.
|-- cxf-wsdl2java-example.iml
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |   `-- com
    |   |       `-- stackoverflow
    |   |           `-- App.java
    |   `-- resources
    |       `-- stockquote.wsdl
    `-- test
        `-- java
            `-- com
                `-- stackoverflow
                    `-- AppTest.java

10 directories, 5 files

$ cat pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.stackoverflow</groupId>
  <artifactId>cxf-wsdl2java-example</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>cxf-wsdl2java-example</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.7.7</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
              <wsdlOptions>
                <wsdlOption>
                  <wsdl>${basedir}/src/main/resources/stockquote.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-impl</extraarg>
                    <extraarg>-verbose</extraarg>
                  </extraargs>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

$ mvn generate-sources

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building cxf-wsdl2java-example 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- cxf-codegen-plugin:2.7.7:wsdl2java (generate-sources) @ cxf-wsdl2java-example ---
Loading FrontEnd jaxws ...
Loading DataBinding jaxb ...
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.462s
[INFO] Finished at: Mon Oct 21 14:44:54 MDT 2013
[INFO] Final Memory: 11M/211M
[INFO] ------------------------------------------------------------------------

$ tree .

.
|-- cxf-wsdl2java-example.iml
|-- pom.xml
|-- src
|   |-- main
|   |   |-- java
|   |   |   `-- com
|   |   |       `-- stackoverflow
|   |   |           `-- App.java
|   |   `-- resources
|   |       `-- stockquote.wsdl
|   `-- test
|       `-- java
|           `-- com
|               `-- stackoverflow
|                   `-- AppTest.java
`-- target
    |-- classes
    |-- cxf-codegen-plugin-markers
    `-- generated
        `-- cxf
            `-- net
                `-- webservicex
                    |-- GetQuote.java
                    |-- GetQuoteResponse.java
                    |-- ObjectFactory.java
                    |-- package-info.java
                    |-- StockQuoteHttpGetImpl.java
                    |-- StockQuoteHttpGet.java
                    |-- StockQuoteHttpPostImpl.java
                    |-- StockQuoteHttpPost.java
                    |-- StockQuote.java
                    |-- StockQuoteSoapImpl1.java
                    |-- StockQuoteSoapImpl.java
                    `-- StockQuoteSoap.java

17 directories, 17 files

$ cat target/generated/cxf/net/webservicex/StockQuote.java

package net.webservicex;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.Service;

/**
 * This class was generated by Apache CXF 2.7.7
 * 2013-10-21T14:44:54.749-06:00
 * Generated source version: 2.7.7
 * 
 */
@WebServiceClient(name = "StockQuote", 
                  wsdlLocation = "file:/home/axiopisty/projects/cxf-wsdl2java-example/src/main/resources/stockquote.wsdl",
                  targetNamespace = "http://www.webserviceX.NET/") 
public class StockQuote extends Service {

    public final static URL WSDL_LOCATION;

    public final static QName SERVICE = new QName("http://www.webserviceX.NET/", "StockQuote");
    public final static QName StockQuoteHttpPost = new QName("http://www.webserviceX.NET/", "StockQuoteHttpPost");
    public final static QName StockQuoteSoap = new QName("http://www.webserviceX.NET/", "StockQuoteSoap");
    public final static QName StockQuoteSoap12 = new QName("http://www.webserviceX.NET/", "StockQuoteSoap12");
    public final static QName StockQuoteHttpGet = new QName("http://www.webserviceX.NET/", "StockQuoteHttpGet");
    static {
        URL url = null;
        try {
            url = new URL("file:/home/axiopisty/projects/cxf-wsdl2java-example/src/main/resources/stockquote.wsdl");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(StockQuote.class.getName())
                .log(java.util.logging.Level.INFO, 
                     "Can not initialize the default wsdl from {0}", "file:/home/axiopisty/projects/cxf-wsdl2java-example/src/main/resources/stockquote.wsdl");
        }
        WSDL_LOCATION = url;
    }

    public StockQuote(URL wsdlLocation) {
        super(wsdlLocation, SERVICE);
    }

    public StockQuote(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public StockQuote() {
        super(WSDL_LOCATION, SERVICE);
    }

    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
    //compliant code instead.
    public StockQuote(WebServiceFeature ... features) {
        super(WSDL_LOCATION, SERVICE, features);
    }

    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
    //compliant code instead.
    public StockQuote(URL wsdlLocation, WebServiceFeature ... features) {
        super(wsdlLocation, SERVICE, features);
    }

    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
    //compliant code instead.
    public StockQuote(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {
        super(wsdlLocation, serviceName, features);
    }

    /**
     *
     * @return
     *     returns StockQuoteHttpPost
     */
    @WebEndpoint(name = "StockQuoteHttpPost")
    public StockQuoteHttpPost getStockQuoteHttpPost() {
        return super.getPort(StockQuoteHttpPost, StockQuoteHttpPost.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns StockQuoteHttpPost
     */
    @WebEndpoint(name = "StockQuoteHttpPost")
    public StockQuoteHttpPost getStockQuoteHttpPost(WebServiceFeature... features) {
        return super.getPort(StockQuoteHttpPost, StockQuoteHttpPost.class, features);
    }
    /**
     *
     * @return
     *     returns StockQuoteSoap
     */
    @WebEndpoint(name = "StockQuoteSoap")
    public StockQuoteSoap getStockQuoteSoap() {
        return super.getPort(StockQuoteSoap, StockQuoteSoap.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns StockQuoteSoap
     */
    @WebEndpoint(name = "StockQuoteSoap")
    public StockQuoteSoap getStockQuoteSoap(WebServiceFeature... features) {
        return super.getPort(StockQuoteSoap, StockQuoteSoap.class, features);
    }
    /**
     *
     * @return
     *     returns StockQuoteSoap
     */
    @WebEndpoint(name = "StockQuoteSoap12")
    public StockQuoteSoap getStockQuoteSoap12() {
        return super.getPort(StockQuoteSoap12, StockQuoteSoap.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns StockQuoteSoap
     */
    @WebEndpoint(name = "StockQuoteSoap12")
    public StockQuoteSoap getStockQuoteSoap12(WebServiceFeature... features) {
        return super.getPort(StockQuoteSoap12, StockQuoteSoap.class, features);
    }
    /**
     *
     * @return
     *     returns StockQuoteHttpGet
     */
    @WebEndpoint(name = "StockQuoteHttpGet")
    public StockQuoteHttpGet getStockQuoteHttpGet() {
        return super.getPort(StockQuoteHttpGet, StockQuoteHttpGet.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns StockQuoteHttpGet
     */
    @WebEndpoint(name = "StockQuoteHttpGet")
    public StockQuoteHttpGet getStockQuoteHttpGet(WebServiceFeature... features) {
        return super.getPort(StockQuoteHttpGet, StockQuoteHttpGet.class, features);
    }
}

EDIT 9/11/2017

Here is the content of the wsdl file just in case the website serving it ever goes away.

stockquote.wsdl:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.webserviceX.NET/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://www.webserviceX.NET/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/">
      <s:element name="GetQuote">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="symbol" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetQuoteResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="string" nillable="true" type="s:string" />
    </s:schema>
  </wsdl:types>
  <wsdl:message name="GetQuoteSoapIn">
    <wsdl:part name="parameters" element="tns:GetQuote" />
  </wsdl:message>
  <wsdl:message name="GetQuoteSoapOut">
    <wsdl:part name="parameters" element="tns:GetQuoteResponse" />
  </wsdl:message>
  <wsdl:message name="GetQuoteHttpGetIn">
    <wsdl:part name="symbol" type="s:string" />
  </wsdl:message>
  <wsdl:message name="GetQuoteHttpGetOut">
    <wsdl:part name="Body" element="tns:string" />
  </wsdl:message>
  <wsdl:message name="GetQuoteHttpPostIn">
    <wsdl:part name="symbol" type="s:string" />
  </wsdl:message>
  <wsdl:message name="GetQuoteHttpPostOut">
    <wsdl:part name="Body" element="tns:string" />
  </wsdl:message>
  <wsdl:portType name="StockQuoteSoap">
    <wsdl:operation name="GetQuote">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</wsdl:documentation>
      <wsdl:input message="tns:GetQuoteSoapIn" />
      <wsdl:output message="tns:GetQuoteSoapOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:portType name="StockQuoteHttpGet">
    <wsdl:operation name="GetQuote">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</wsdl:documentation>
      <wsdl:input message="tns:GetQuoteHttpGetIn" />
      <wsdl:output message="tns:GetQuoteHttpGetOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:portType name="StockQuoteHttpPost">
    <wsdl:operation name="GetQuote">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</wsdl:documentation>
      <wsdl:input message="tns:GetQuoteHttpPostIn" />
      <wsdl:output message="tns:GetQuoteHttpPostOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="GetQuote">
      <soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="StockQuoteSoap12" type="tns:StockQuoteSoap">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="GetQuote">
      <soap12:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="StockQuoteHttpGet" type="tns:StockQuoteHttpGet">
    <http:binding verb="GET" />
    <wsdl:operation name="GetQuote">
      <http:operation location="/GetQuote" />
      <wsdl:input>
        <http:urlEncoded />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml part="Body" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="StockQuoteHttpPost" type="tns:StockQuoteHttpPost">
    <http:binding verb="POST" />
    <wsdl:operation name="GetQuote">
      <http:operation location="/GetQuote" />
      <wsdl:input>
        <mime:content type="application/x-www-form-urlencoded" />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml part="Body" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="StockQuote">
    <wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
      <soap:address location="http://www.webservicex.net/stockquote.asmx" />
    </wsdl:port>
    <wsdl:port name="StockQuoteSoap12" binding="tns:StockQuoteSoap12">
      <soap12:address location="http://www.webservicex.net/stockquote.asmx" />
    </wsdl:port>
    <wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
      <http:address location="http://www.webservicex.net/stockquote.asmx" />
    </wsdl:port>
    <wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost">
      <http:address location="http://www.webservicex.net/stockquote.asmx" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

axiopisty
  • 4,972
  • 8
  • 44
  • 73
  • Are you saying it will create a main class with everything instantiated the way it needs to be? – JaminB Oct 21 '13 at 20:13
  • 1
    Yes, sort of. It is just a stub client. So you'll have to populate the objects with real data, but the generated stub client gives a good example how to use the code that is generated. – axiopisty Oct 21 '13 at 20:17
  • 1
    Thanks you saved my day - very useful :) – Jangid Sep 26 '17 at 11:44
  • Is there a way to this without downloading the WSDL? – Piyush Jan 22 '18 at 06:14
  • No. Well, I guess you could type the WSDL by hand rather than downloading it if you wanted to. But you can not create something from a definition without having the definition. In order to create a web service from a WSDL definition, you must have the WSDL defined. – axiopisty Jan 23 '18 at 16:38