Git Product home page Git Product logo

module-ballerina-soap's Introduction

Ballerina SOAP Library

Build codecov Trivy GraalVM Check GitHub Last Commit Github issues codecov

This module offers a set of APIs that facilitate the transmission of XML requests to a SOAP backend. It excels in managing security policies within SOAP requests, ensuring the transmission of secured SOAP envelopes. Moreover, it possesses the capability to efficiently extract data from security-applied SOAP responses.

SOAP module abstracts out the details of the creation of a SOAP envelope, headers, and the body in a SOAP message.

Client

The Client is used to connect to and interact with SOAP endpoints.

SOAP 1.1 Client

import ballerina/soap.soap11;

soap11:Client soapClient = check new ("http://www.dneonline.com/calculator.asmx?WSDL");

SOAP 1.2 Client

import ballerina/soap.soap12;

soap12:Client soapClient = check new ("http://www.dneonline.com/calculator.asmx?WSDL");

APIs associated with SOAP

  • Send & Receive: Sends SOAP request and receives a response.
  • Send Only: Fires and forgets requests. Sends the request without the possibility of any response from the service.

The SOAP 1.1 specification requires the inclusion of the action parameter as a mandatory component within its APIs. In contrast, SOAP 1.2 relaxes this requirement, making the action parameter optional.

Example: Send & Receive

import ballerina/soap.soap11;

public function main() returns error? {
    soap11:Client soapClient = check new ("http://www.dneonline.com/calculator.asmx?WSDL");

    xml envelope = xml `<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                            <soap:Body>
                            <quer:Add xmlns:quer="http://tempuri.org/">
                                <quer:intA>2</quer:intA>
                                <quer:intB>3</quer:intB>
                            </quer:Add>
                            </soap:Body>
                        </soap:Envelope>`;
    xml response = check soapClient->sendReceive(envelope, "http://tempuri.org/Add");
}

Example: Send Only

import ballerina/soap.soap11;

public function main() returns error? {
    soap11:Client soapClient = check new ("http://www.dneonline.com/calculator.asmx?WSDL");

    xml envelope = xml `<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                            <soap:Body>
                            <quer:Add xmlns:quer="http://tempuri.org/">
                                <quer:intA>2</quer:intA>
                                <quer:intB>3</quer:intB>
                            </quer:Add>
                            </soap:Body>
                        </soap:Envelope>`;
    check soapClient->sendOnly(envelope, "http://tempuri.org/Add");
}

Security

The SOAP client module introduces a robust framework for configuring security measures in SOAP communication. Security is a critical concern when exchanging data via web services, and this module offers comprehensive options to fortify SOAP requests and responses.

There are two primary security configurations available for SOAP clients:

  • inboundSecurity: This configuration is applied to the SOAP envelope when a request is made. It includes various ws security policies such as Username Token, Timestamp Token, X509 Token, Symmetric Binding, Asymmetric Binding, and Transport Binding, either individually or in combination with each other.

  • outboundSecurity: This configuration is applied to the SOAP envelope when a response is received. Its purpose is to decrypt the data within the envelope and verify the digital signature for security validation.

Policies

This library currently supports the following WS Security policies:

  • Username Token: Provides authentication through username and password credentials.
  • Timestamp Token: Enhances message integrity by incorporating timestamp information.
  • X509 Token: Allows the use of X.509 certificates for secure communication.
  • Symmetric Binding: Enables symmetric key-based security mechanisms.
  • Asymmetric Binding: Facilitates the use of asymmetric cryptography for enhanced security.

These policies empower SOAP clients to enhance the security of their web service communications by selecting and implementing the appropriate security mechanisms to safeguard their SOAP envelopes.

Security Policy Configuration Types

Inbound Security Configurations

  • TimestampTokenConfig: Represents the record for Timestamp Token policy.

    • Fields:
      • int timeToLive : The time to get expired
  • UsernameTokenConfig: Represents the record for Username Token policy.

    • Fields:
      • string username : The name of the user
      • string password : The password of the user
      • PasswordType passwordType : The password type of the username token
  • SymmetricBindingConfig: Represents the record for Symmetric Binding policy.

    • Fields:
      • crypto:PrivateKey symmetricKey : The key to sign and encrypt the SOAP envelope
      • crypto:PublicKey servicePublicKey : The key to encrypt the symmetric key
      • SignatureAlgorithm signatureAlgorithm : The algorithm to sign the SOAP envelope
      • EncryptionAlgorithm encryptionAlgorithm : The algorithm to encrypt the SOAP envelope
      • string x509Token : The path or token of the X509 certificate
  • AsymmetricBindingConfig: Represents the record for Username Token with Asymmetric Binding policy.

    • Fields:
      • crypto:PrivateKey signatureKey : The private key to sign the SOAP envelope
      • crypto:PublicKey encryptionKey : The public key to encrypt the SOAP body
      • SignatureAlgorithm signatureAlgorithm : The algorithm to sign the SOAP envelope
      • EncryptionAlgorithm encryptionAlgorithm : The algorithm to encrypt the SOAP body
      • string x509Token : field description

Outbound Security Configurations

  • OutboundSecurityConfig: Represents the record for outbound security configurations to verify and decrypt SOAP envelopes.
    • Fields:
      • crypto:PublicKey verificationKey : The public key to verify the signature of the SOAP envelope
      • crypto:PrivateKey|crypto:PublicKey decryptionKey : The private key to decrypt the SOAP envelope
      • SignatureAlgorithm signatureAlgorithm : The algorithm to verify the SOAP envelope
      • EncryptionAlgorithm decryptionAlgorithm : The algorithm to decrypt the SOAP body

Apply Security Policies

SOAP 1.1 Client: UsernameToken and TranportBinding Policy

import ballerina/crypto;
import ballerina/mime;
import ballerina/soap;
import ballerina/soap.soap11;

public function main() returns error? {
    soap11:Client soapClient = check new ("https://www.secured-soap-endpoint.com", 
        {
            inboundSecurity: [
            {
                username: "username",
                password: "password",
                passwordType: soap:TEXT
            },
            TRANSPORT_BINDING
            ]
        });

    xml envelope = xml `<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                            <soap:Body>
                            <quer:Add xmlns:quer="http://tempuri.org/">
                                <quer:intA>2</quer:intA>
                                <quer:intB>3</quer:intB>
                            </quer:Add>
                            </soap:Body>
                        </soap:Envelope>`;
    xml response = check soapClient->sendReceive(envelope, "http://tempuri.org/Add");
}

SOAP 1.2 Client with Asymmetric Binding and Outbound Security Configuration

import ballerina/crypto;
import ballerina/mime;
import ballerina/soap;
import ballerina/soap.soap12;

public function main() returns error? {
    configurable crypto:PrivateKey clientPrivateKey = ?;
    configurable crypto:PublicKey clientPublicKey = ?;
    configurablecrypto:PublicKey serverPublicKey = ?;

    soap12:Client soapClient = check new ("https://www.secured-soap-endpoint.com",
    {
        inboundSecurity: {
                signatureAlgorithm: soap:RSA_SHA256,
                encryptionAlgorithm: soap:RSA_ECB,
                signatureKey: clientPrivateKey,
                encryptionKey: serverPublicKey,
        },
        outboundSecurity: {
                verificationKey: serverPublicKey,
                signatureAlgorithm: soap:RSA_SHA256,
                decryptionKey: clientPrivateKey,
                decryptionAlgorithm: soap:RSA_ECB
        }
    });

   xml envelope = xml `<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                           <soap:Body>
                           <quer:Add xmlns:quer="http://tempuri.org/">
                              <quer:intA>2</quer:intA>
                              <quer:intB>3</quer:intB>
                           </quer:Add>
                           </soap:Body>
                     </soap:Envelope>`;
    xml response = check soapClient->sendReceive(envelope, "http://tempuri.org/Add");
}

Issues and projects

The Issues and Projects tabs are disabled for this repository as this is part of the Ballerina Standard Library. To report bugs, request new features, start new discussions, view project boards, etc., go to the Ballerina Standard Library parent repository.

This repository contains only the source code of the package.

Build from the source

Set up the prerequisites

  1. Download and install Java SE Development Kit (JDK) version 17 (from one of the following locations).

    • Oracle

    • OpenJDK

      Note: Set the JAVA_HOME environment variable to the path name of the directory into which you installed JDK.

  2. Export your Github Personal access token with the read package permissions as follows.

        export packageUser=<Username>
        export packagePAT=<Personal access token>

Build the source

Execute the commands below to build from source.

  1. To build the library:

    ./gradlew clean build
  2. To run the integration tests:

    ./gradlew clean test
  3. To build the module without the tests:

    ./gradlew clean build -x test
  4. To debug module implementation:

    ./gradlew clean build -Pdebug=<port>
    ./gradlew clean test -Pdebug=<port>
  5. To debug the module with Ballerina language:

    ./gradlew clean build -PbalJavaDebug=<port>
    ./gradlew clean test -PbalJavaDebug=<port>
  6. Publish ZIP artifact to the local .m2 repository:

    ./gradlew clean build publishToMavenLocal
  7. Publish the generated artifacts to the local Ballerina central repository:

    ./gradlew clean build -PpublishToLocalCentral=true
  8. Publish the generated artifacts to the Ballerina central repository:

    ./gradlew clean build -PpublishToCentral=true

Contribute to Ballerina

As an open source project, Ballerina welcomes contributions from the community.

For more information, go to the contribution guidelines.

Code of conduct

All contributors are encouraged to read the Ballerina Code of Conduct.

Useful links

module-ballerina-soap's People

Contributors

nuvindu avatar madhukaharith92 avatar ldclakmal avatar bhashinee avatar thisaruguruge avatar chamil321 avatar dilansachi avatar tharmigank avatar maninda avatar gabilang avatar biruntha avatar sachithkay avatar bsenduran avatar wso2-jenkins-bot avatar mohamedsabthar avatar riyafa avatar maheshika avatar chanikag avatar ballerina-bot avatar thishanilucas avatar asitha avatar indikasampath2000 avatar vil02 avatar anupama-pathirage avatar aashikam avatar ayeshlk avatar dulanjalidilmi avatar wggihan avatar maryamzi avatar pubudu91 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.