Module: WSDL

Defined in:
lib/wsdl.rb,
lib/wsdl/ns.rb,
lib/wsdl/log.rb,
lib/wsdl/http.rb,
lib/wsdl/qname.rb,
lib/wsdl/client.rb,
lib/wsdl/config.rb,
lib/wsdl/errors.rb,
lib/wsdl/limits.rb,
lib/wsdl/parser.rb,
lib/wsdl/schema.rb,
lib/wsdl/request.rb,
lib/wsdl/version.rb,
lib/wsdl/contract.rb,
lib/wsdl/resolver.rb,
lib/wsdl/response.rb,
lib/wsdl/security.rb,
lib/wsdl/operation.rb,
lib/wsdl/definition.rb,
lib/wsdl/formatting.rb,
lib/wsdl/strictness.rb,
lib/wsdl/xml/parser.rb,
lib/wsdl/http/client.rb,
lib/wsdl/http/config.rb,
lib/wsdl/parser/port.rb,
lib/wsdl/schema/node.rb,
lib/wsdl/xml/element.rb,
lib/wsdl/http/response.rb,
lib/wsdl/parse_options.rb,
lib/wsdl/request/names.rb,
lib/wsdl/xml/attribute.rb,
lib/wsdl/parser/binding.rb,
lib/wsdl/parser/service.rb,
lib/wsdl/response/fault.rb,
lib/wsdl/parser/document.rb,
lib/wsdl/resolver/loader.rb,
lib/wsdl/resolver/source.rb,
lib/wsdl/response/parser.rb,
lib/wsdl/security/config.rb,
lib/wsdl/security/policy.rb,
lib/wsdl/parser/port_type.rb,
lib/wsdl/request/envelope.rb,
lib/wsdl/response/builder.rb,
lib/wsdl/contract/template.rb,
lib/wsdl/request/validator.rb,
lib/wsdl/resolver/importer.rb,
lib/wsdl/schema/collection.rb,
lib/wsdl/schema/definition.rb,
lib/wsdl/security/digester.rb,
lib/wsdl/security/verifier.rb,
lib/wsdl/definition/builder.rb,
lib/wsdl/request/serializer.rb,
lib/wsdl/security/constants.rb,
lib/wsdl/security/reference.rb,
lib/wsdl/security/signature.rb,
lib/wsdl/security/timestamp.rb,
lib/wsdl/xml/threat_scanner.rb,
lib/wsdl/http/redirect_guard.rb,
lib/wsdl/parser/input_output.rb,
lib/wsdl/parser/message_info.rb,
lib/wsdl/request/dsl_context.rb,
lib/wsdl/request/rpc_wrapper.rb,
lib/wsdl/xml/element_builder.rb,
lib/wsdl/parser/import_result.rb,
lib/wsdl/parser/operation_map.rb,
lib/wsdl/parser/operation_info.rb,
lib/wsdl/response/fault_parser.rb,
lib/wsdl/response/type_coercer.rb,
lib/wsdl/security/id_generator.rb,
lib/wsdl/contract/part_contract.rb,
lib/wsdl/security/canonicalizer.rb,
lib/wsdl/security/verifier/base.rb,
lib/wsdl/definition/element_hash.rb,
lib/wsdl/parser/header_reference.rb,
lib/wsdl/security/request_policy.rb,
lib/wsdl/security/secure_compare.rb,
lib/wsdl/security/username_token.rb,
lib/wsdl/parser/binding_operation.rb,
lib/wsdl/parser/message_reference.rb,
lib/wsdl/security/request_context.rb,
lib/wsdl/security/response_policy.rb,
lib/wsdl/security/security_header.rb,
lib/wsdl/contract/message_contract.rb,
lib/wsdl/response/security_context.rb,
lib/wsdl/security/algorithm_mapper.rb,
lib/wsdl/parser/document_collection.rb,
lib/wsdl/parser/port_type_operation.rb,
lib/wsdl/security/signature_options.rb,
lib/wsdl/contract/operation_contract.rb,
lib/wsdl/security/xml_builder_helper.rb,
lib/wsdl/security/request_materializer.rb,
lib/wsdl/security/credential_normalizer.rb,
lib/wsdl/security/response_verification.rb,
lib/wsdl/request/security_conflict_detector.rb,
lib/wsdl/security/verifier/reference_validator.rb,
lib/wsdl/security/verifier/signature_validator.rb,
lib/wsdl/security/verifier/structure_validator.rb,
lib/wsdl/security/verifier/timestamp_validator.rb,
lib/wsdl/security/verifier/certificate_resolver.rb,
lib/wsdl/security/verifier/certificate_validator.rb,
lib/wsdl/security/verifier/element_position_validator.rb

Overview

WSDL toolkit for Ruby.

This library provides tools for working with WSDL 1.1 documents, including parsing WSDL definitions, inspecting services and operations, and executing SOAP requests. WSDL 2.0 documents are detected and rejected with an UnsupportedWSDLVersionError.

The main entry point is Client, which loads a WSDL document and provides access to its services and operations.

Examples:

Basic usage

definition = WSDL.parse('http://example.com/service?wsdl')
client = WSDL::Client.new(definition)
client.services
# => {"ExampleService" => {ports: {"ExamplePort" => {type: "...", location: "..."}}}}

Calling an operation

definition = WSDL.parse('http://example.com/service?wsdl')
client = WSDL::Client.new(definition)
operation = client.operation('ExampleService', 'ExamplePort', 'GetData')
operation.prepare do
  tag('GetData') { tag('id', 123) }
end
response = operation.invoke

Defined Under Namespace

Modules: Contract, Formatting, HTTP, Log, NS, Parser, Request, Resolver, Schema, Security, XML Classes: CertificateValidationError, Client, Config, Definition, DefinitionError, DuplicateDefinitionError, Error, FatalError, Limits, Operation, OperationOverloadError, ParseOptions, PathRestrictionError, QName, RequestDefinitionError, RequestDslError, RequestSecurityConflictError, RequestValidationError, ResourceLimitError, Response, ResponseBuildError, SchemaImportError, SchemaImportParseError, SealedCollectionError, SecurityError, SignatureVerificationError, Strictness, TimestampValidationError, TooManyRedirectsError, UnresolvableImportError, UnresolvedReferenceError, UnsafeRedirectError, UnsupportedAlgorithmError, UnsupportedStyleError, UnsupportedWSDLVersionError, XMLSecurityError

Constant Summary collapse

VERSION =

The current version of the WSDL gem.

Returns:

  • (String)

    the semantic version string

'1.1.0'

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.http_clientClass

Returns the HTTP client class (defaults to WSDL::HTTP::Client).

Returns:



33
34
35
# File 'lib/wsdl.rb', line 33

def http_client
  @http_client
end

.loggerLogger, Log::NullLogger

Returns the logger for the WSDL library.

Defaults to a silent WSDL::Log::NullLogger that discards all output. Assign a custom logger via logger=.

Examples:

Enable warn-level output to stdout

require 'logger'
WSDL.logger = Logger.new($stdout, level: :warn)

Returns:



45
46
47
# File 'lib/wsdl.rb', line 45

def logger
  @logger
end

Instance Attribute Details

#limitsLimits (readonly)

Returns resource limits for DoS protection (always resolved, never nil).

Returns:

  • (Limits)

    resource limits for DoS protection (always resolved, never nil)



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/wsdl/parse_options.rb', line 14

ParseOptions = Data.define(:sandbox_paths, :limits, :strictness) {
  # Constructs a {ParseOptions} with sensible defaults.
  #
  # @param sandbox_paths [Array<String>, nil] sandbox paths (default: `nil`, auto-resolved by Source)
  # @param limits [Limits, nil] resource limits (default: {Limits} defaults)
  # @param strictness [Strictness, nil] strictness settings (default: all strict)
  # @return [ParseOptions]
  #
  def self.default(sandbox_paths: nil, limits: nil, strictness: nil)
    new(
      sandbox_paths:,
      limits: limits || Limits.new,
      strictness: strictness || Strictness.new
    )
  end
}

#sandbox_pathsArray<String>? (readonly)

Returns directories where file access is allowed.

Returns:

  • (Array<String>, nil)

    directories where file access is allowed



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/wsdl/parse_options.rb', line 14

ParseOptions = Data.define(:sandbox_paths, :limits, :strictness) {
  # Constructs a {ParseOptions} with sensible defaults.
  #
  # @param sandbox_paths [Array<String>, nil] sandbox paths (default: `nil`, auto-resolved by Source)
  # @param limits [Limits, nil] resource limits (default: {Limits} defaults)
  # @param strictness [Strictness, nil] strictness settings (default: all strict)
  # @return [ParseOptions]
  #
  def self.default(sandbox_paths: nil, limits: nil, strictness: nil)
    new(
      sandbox_paths:,
      limits: limits || Limits.new,
      strictness: strictness || Strictness.new
    )
  end
}

#strictnessStrictness (readonly)

Returns strictness settings for schema/request validation.

Returns:

  • (Strictness)

    strictness settings for schema/request validation



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/wsdl/parse_options.rb', line 14

ParseOptions = Data.define(:sandbox_paths, :limits, :strictness) {
  # Constructs a {ParseOptions} with sensible defaults.
  #
  # @param sandbox_paths [Array<String>, nil] sandbox paths (default: `nil`, auto-resolved by Source)
  # @param limits [Limits, nil] resource limits (default: {Limits} defaults)
  # @param strictness [Strictness, nil] strictness settings (default: all strict)
  # @return [ParseOptions]
  #
  def self.default(sandbox_paths: nil, limits: nil, strictness: nil)
    new(
      sandbox_paths:,
      limits: limits || Limits.new,
      strictness: strictness || Strictness.new
    )
  end
}

Class Method Details

.dump(definition) ⇒ Hash{String => Object}

Serializes a Definition to a plain Hash.

The returned hash is suitable for JSON serialization and can be restored via load. This is the inverse of load.

Examples:

Save to file

definition = WSDL.parse('http://example.com/service?wsdl')
File.write('service.json', JSON.generate(WSDL.dump(definition)))

Round-trip

hash = WSDL.dump(definition)
restored = WSDL.load(hash)

Parameters:

  • definition (Definition)

    the definition to serialize

Returns:

  • (Hash{String => Object})

    serializable hash with string keys



128
129
130
# File 'lib/wsdl.rb', line 128

def dump(definition)
  definition.to_h
end

.load(hash) ⇒ Definition

Restores a Definition from a serialized Hash.

The hash must have been produced by dump, WSDL::Definition#to_h, or parsed from WSDL::Definition#to_json. Raises if the schema version doesn't match the current library version.

Examples:

cached = JSON.parse(File.read('service.json'))
definition = WSDL.load(cached)

Parameters:

  • hash (Hash{String => Object})

    serialized definition hash

Returns:

Raises:

  • (ArgumentError)

    if the schema version doesn't match



146
147
148
# File 'lib/wsdl.rb', line 146

def load(hash)
  Definition.from_h(hash)
end

.parse(source, http: nil, strictness: nil, sandbox_paths: nil, limits: nil) ⇒ Definition

Parses a WSDL and returns a frozen Definition.

Accepts a URL or file path. Uses the parsing pipeline internally and returns a Definition that can be serialized and passed to Client.new.

Examples:

Parse from URL

definition = WSDL.parse('http://example.com/service?wsdl')

Parse from file

definition = WSDL.parse('/path/to/service.wsdl')

With options

definition = WSDL.parse(url, strictness: false, limits: { max_schemas: 200 })

Parameters:

  • source (String)

    WSDL URL or file path

  • http (Object, nil) (defaults to: nil)

    HTTP client for fetching (defaults to http_client)

  • strictness (Strictness, Hash, Boolean, nil) (defaults to: nil)

    strictness settings (defaults to all strict)

  • sandbox_paths (Array<String>, nil) (defaults to: nil)

    allowed directories for file access

  • limits (Limits, Hash, nil) (defaults to: nil)

    resource limits (defaults to Limits defaults)

Returns:



101
102
103
104
105
106
107
108
109
110
# File 'lib/wsdl.rb', line 101

def parse(source, http: nil, strictness: nil, sandbox_paths: nil, limits: nil)
  http ||= http_client.new

  Parser.parse(
    source, http,
    sandbox_paths:,
    limits: Limits.resolve(limits) || Limits.new,
    strictness: Strictness.resolve(strictness) || Strictness.new
  )
end