Skip to content

wsdlgen: fix port filter #149

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions wsdlgen/testdata/output/TestElementWisePart.xml.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
// Code generated by wsdlgen.test. DO NOT EDIT.

// Package ws
package ws

import (
"bytes"
"context"
"encoding/xml"
"fmt"
"io"
"net/http"
)

type Client struct {
HTTPClient *http.Client
ResponseHook func(*http.Response) *http.Response
RequestHook func(*http.Request) *http.Request
}
type soapEnvelope struct {
XMLName struct{} `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
Header []byte `xml:"http://schemas.xmlsoap.org/soap/envelope/ Header"`
Body struct {
Message interface{}
Fault *struct {
String string `xml:"faultstring,omitempty"`
Code string `xml:"faultcode,omitempty"`
Detail string `xml:"detail,omitempty"`
} `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
} `xml:"http://schemas.xmlsoap.org/soap/envelope/ Body"`
}

func (c *Client) do(ctx context.Context, method, uri, action string, in, out interface{}) error {
var body io.Reader
var envelope soapEnvelope
if method == "POST" || method == "PUT" {
var buf bytes.Buffer
envelope.Body.Message = in
enc := xml.NewEncoder(&buf)
if err := enc.Encode(envelope); err != nil {
return err
}
if err := enc.Flush(); err != nil {
return err
}
body = &buf
}
req, err := http.NewRequest(method, uri, body)
if err != nil {
return err
}
req.Header.Set("SOAPAction", action)
req = req.WithContext(ctx)
if c.RequestHook != nil {
req = c.RequestHook(req)
}
httpClient := c.HTTPClient
if httpClient == nil {
httpClient = http.DefaultClient
}
rsp, err := httpClient.Do(req)
if err != nil {
return err
}
defer rsp.Body.Close()
if c.ResponseHook != nil {
rsp = c.ResponseHook(rsp)
}
dec := xml.NewDecoder(rsp.Body)
envelope.Body.Message = out
if err := dec.Decode(&envelope); err != nil {
return err
}
if envelope.Body.Fault != nil {
return fmt.Errorf("%s: %s", envelope.Body.Fault.Code, envelope.Body.Fault.String)
}
return nil
}
func (c *Client) MyServiceRequest(ctx context.Context, path string) (string, error) {
var input struct {
XMLName struct{} `xml:"tns MyServiceRequest"`
Args struct {
Path string `xml:"tns path"`
} `xml:"tns MyRequest"`
}
input.Args.Path = string(path)
var output struct {
XMLName struct{} `xml:"tns MyServiceRequest"`
Args struct {
Result string `xml:"tns result"`
} `xml:"tns MyResponse"`
}
err := c.do(ctx, "POST", "http://example.net/MyService", "MyServiceRequest", &input, &output)
return string(output.Args.Result), err
}
250 changes: 250 additions & 0 deletions wsdlgen/testdata/output/TestGlobalWeather.xml.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
// Code generated by wsdlgen.test. DO NOT EDIT.

// Package ws
package ws

import (
"bytes"
"context"
"encoding/xml"
"fmt"
"io"
"net/http"
)

type GetCitiesByCountry struct {
CountryName string `xml:"http://www.webserviceX.NET CountryName,omitempty"`
}

type GetCitiesByCountryResponse struct {
GetCitiesByCountryResult string `xml:"http://www.webserviceX.NET GetCitiesByCountryResult,omitempty"`
}

type GetWeather struct {
CityName string `xml:"http://www.webserviceX.NET CityName,omitempty"`
CountryName string `xml:"http://www.webserviceX.NET CountryName,omitempty"`
}

type GetWeatherResponse struct {
GetWeatherResult string `xml:"http://www.webserviceX.NET GetWeatherResult,omitempty"`
}
type Client struct {
HTTPClient *http.Client
ResponseHook func(*http.Response) *http.Response
RequestHook func(*http.Request) *http.Request
}
type soapEnvelope struct {
XMLName struct{} `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
Header []byte `xml:"http://schemas.xmlsoap.org/soap/envelope/ Header"`
Body struct {
Message interface{}
Fault *struct {
String string `xml:"faultstring,omitempty"`
Code string `xml:"faultcode,omitempty"`
Detail string `xml:"detail,omitempty"`
} `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
} `xml:"http://schemas.xmlsoap.org/soap/envelope/ Body"`
}

func (c *Client) do(ctx context.Context, method, uri, action string, in, out interface{}) error {
var body io.Reader
var envelope soapEnvelope
if method == "POST" || method == "PUT" {
var buf bytes.Buffer
envelope.Body.Message = in
enc := xml.NewEncoder(&buf)
if err := enc.Encode(envelope); err != nil {
return err
}
if err := enc.Flush(); err != nil {
return err
}
body = &buf
}
req, err := http.NewRequest(method, uri, body)
if err != nil {
return err
}
req.Header.Set("SOAPAction", action)
req = req.WithContext(ctx)
if c.RequestHook != nil {
req = c.RequestHook(req)
}
httpClient := c.HTTPClient
if httpClient == nil {
httpClient = http.DefaultClient
}
rsp, err := httpClient.Do(req)
if err != nil {
return err
}
defer rsp.Body.Close()
if c.ResponseHook != nil {
rsp = c.ResponseHook(rsp)
}
dec := xml.NewDecoder(rsp.Body)
envelope.Body.Message = out
if err := dec.Decode(&envelope); err != nil {
return err
}
if envelope.Body.Fault != nil {
return fmt.Errorf("%s: %s", envelope.Body.Fault.Code, envelope.Body.Fault.String)
}
return nil
}

// Get weather report for all major cities around the world.
func (c *Client) GetWeather(ctx context.Context, parameters GetWeather) (GetWeatherResponse, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
Parameters GetWeather `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetWeatherSoapIn"`
}
input.Args.Parameters = GetWeather(parameters)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
Parameters GetWeatherResponse `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetWeatherSoapOut"`
}
err := c.do(ctx, "POST", "http://www.webservicex.net/globalweather.asmx", "http://www.webserviceX.NET/GetWeather", &input, &output)
return GetWeatherResponse(output.Args.Parameters), err
}

// Get all major cities by country name(full / part).
func (c *Client) GetCitiesByCountry(ctx context.Context, parameters GetCitiesByCountry) (GetCitiesByCountryResponse, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
Parameters GetCitiesByCountry `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountrySoapIn"`
}
input.Args.Parameters = GetCitiesByCountry(parameters)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
Parameters GetCitiesByCountryResponse `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountrySoapOut"`
}
err := c.do(ctx, "POST", "http://www.webservicex.net/globalweather.asmx", "http://www.webserviceX.NET/GetCitiesByCountry", &input, &output)
return GetCitiesByCountryResponse(output.Args.Parameters), err
}

// Get weather report for all major cities around the world.
func (c *Client) GetWeather(ctx context.Context, parameters GetWeather) (GetWeatherResponse, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
Parameters GetWeather `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetWeatherSoapIn"`
}
input.Args.Parameters = GetWeather(parameters)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
Parameters GetWeatherResponse `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetWeatherSoapOut"`
}
err := c.do(ctx, "POST", "http://www.webservicex.net/globalweather.asmx", "", &input, &output)
return GetWeatherResponse(output.Args.Parameters), err
}

// Get all major cities by country name(full / part).
func (c *Client) GetCitiesByCountry(ctx context.Context, parameters GetCitiesByCountry) (GetCitiesByCountryResponse, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
Parameters GetCitiesByCountry `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountrySoapIn"`
}
input.Args.Parameters = GetCitiesByCountry(parameters)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
Parameters GetCitiesByCountryResponse `xml:"http://www.webserviceX.NET parameters"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountrySoapOut"`
}
err := c.do(ctx, "POST", "http://www.webservicex.net/globalweather.asmx", "", &input, &output)
return GetCitiesByCountryResponse(output.Args.Parameters), err
}

// Get weather report for all major cities around the world.
func (c *Client) GetWeather(ctx context.Context, CityName string, CountryName string) (string, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
CityName string `xml:"http://www.webserviceX.NET CityName"`
CountryName string `xml:"http://www.webserviceX.NET CountryName"`
} `xml:"http://www.webserviceX.NET GetWeatherHttpGetIn"`
}
input.Args.CityName = string(CityName)
input.Args.CountryName = string(CountryName)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
Body string `xml:"http://www.webserviceX.NET Body"`
} `xml:"http://www.webserviceX.NET GetWeatherHttpGetOut"`
}
err := c.do(ctx, "GET", "", "", &input, &output)
return string(output.Args.Body), err
}

// Get all major cities by country name(full / part).
func (c *Client) GetCitiesByCountry(ctx context.Context, CountryName string) (string, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
CountryName string `xml:"http://www.webserviceX.NET CountryName"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountryHttpGetIn"`
}
input.Args.CountryName = string(CountryName)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
Body string `xml:"http://www.webserviceX.NET Body"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountryHttpGetOut"`
}
err := c.do(ctx, "GET", "", "", &input, &output)
return string(output.Args.Body), err
}

// Get weather report for all major cities around the world.
func (c *Client) GetWeather(ctx context.Context, CityName string, CountryName string) (string, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
CityName string `xml:"http://www.webserviceX.NET CityName"`
CountryName string `xml:"http://www.webserviceX.NET CountryName"`
} `xml:"http://www.webserviceX.NET GetWeatherHttpPostIn"`
}
input.Args.CityName = string(CityName)
input.Args.CountryName = string(CountryName)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetWeather"`
Args struct {
Body string `xml:"http://www.webserviceX.NET Body"`
} `xml:"http://www.webserviceX.NET GetWeatherHttpPostOut"`
}
err := c.do(ctx, "POST", "", "", &input, &output)
return string(output.Args.Body), err
}

// Get all major cities by country name(full / part).
func (c *Client) GetCitiesByCountry(ctx context.Context, CountryName string) (string, error) {
var input struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
CountryName string `xml:"http://www.webserviceX.NET CountryName"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountryHttpPostIn"`
}
input.Args.CountryName = string(CountryName)
var output struct {
XMLName struct{} `xml:"http://www.webserviceX.NET GetCitiesByCountry"`
Args struct {
Body string `xml:"http://www.webserviceX.NET Body"`
} `xml:"http://www.webserviceX.NET GetCitiesByCountryHttpPostOut"`
}
err := c.do(ctx, "POST", "", "", &input, &output)
return string(output.Args.Body), err
}
Loading