This documentation is not maintained. Please refer to doc.castsoftware.com/technologies to find the latest updates.

Summary: This document provides technical information about the extension called "Universal Linker" (com.castsoftware.wbslinker).

Extension ID

com.castsoftware.wbslinker

What's new?

Please see Web Services Linker - 1.7 - Release Notes for more information.

Description

The "Web Services Linker" (com.castsoftware.wbslinker) extension is a "dependent" extension that automatically creates links for "web services" between client and server components by following a particular protocol based on objects and names. The extension can be downloaded on its own as a standalone extension, however, it is usually automatically downloaded as a dependency with other extensions.

For example for the AngularJS extension:


What does it do?

The Web Service Linker automatically creates cross-technology call links between client (front end) and server (back end) objects. For example, AngularJS front end connected to JEE/Spring MVC back end (click to enlarge):


CAST Imaging

The information generated by the extension is also used in CAST Imaging for the User Guide - Application to Application dependencies scope - see the section Where do the links come from?

How does it do it?

End-users do not need to interact or configure the Web Services Linker extension, all configuration is automatic.

The Web Services Linker supports several communication modes:

  • HTTP Call
    • REST services
    • WSDL/SOAP services
    • Cloud Functions
      • AWS Lambda
    • Intra-layers
      • Bean
      • Servlet
  • Messaging Call
    • RabbitMQ
    • ActiveMQ
    • IBM MQ
    • gRPC
    • AWS SQS
  • Program Call
    • Shell script
    • Cobol Program
    • Java Application 
Note that you can view a list of errors and warnings that may potentially be returned during an analysis in Web Services Linker - errors and warnings.

HTTP Call

REST services

The connection is made via the following "root" objects:

HTTP GET Service

HTTP PUT Service

HTTP DELETE Service

HTTP POST Service

HTTP PATCH Service

The Web Service Linker searches for objects stored in the CAST Analysis Service schema whose type inherits from CAST_ResourceService or CAST_WebServiceLinker_Resource. These objects represent queries to web services on the client side. Then it searches for the web services on the server side: these are objects whose type inherits from CAST_WebService_Operation or CAST_WebServiceLinker_Operation.

When a match is found using the properties CAST_ResourceService.uri / CAST_WebServiceLinker_Resource.uri and CAST_WebService_Operation.identification.name / CAST_WebServiceLinker_Operation.identification.name and type of both objects, then a link is created.

Matching algorithm

The matching is done between using the properties CAST_ResourceService.uri / CAST_WebServiceLinker_Resource.uri and CAST_WebService_Operation.identification.name / CAST_WebServiceLinker_Operation.identification.name.

Before matching, the Web Services Linker transforms the CAST_ResourceService.uri using following rules, in this order:

  • It replace all "//" with "/{}/" except "//" after ":" (to avoid replacing "http://"), supposing that a parameter was intended between both "/" (REST format).
  • It removes everything after "?" in the uri (to suppress uri parameters part which are not part of REST format parameters).
  • It adds a "/" at the end of uri when not present
CAST_ResourceService.uriAfter transformation

https://www.castsoftware.com/offices//phone//

https://www.castsoftware.com/offices/{}/phone/{}/

https://www.castsoftware.com/offices//phone/

https://www.castsoftware.com/offices/{}/phone/

https://www.castsoftware.com/offices//phone

https://www.castsoftware.com/offices/{}/phone/

https://www.castsoftware.com/offices/{}/phone

https://www.castsoftware.com/offices/{}/phone/

https://www.castsoftware.com/offices?office=1

https://www.castsoftware.com/offices/

 The result is then compared to CAST_WebService_Operation.identification.name / CAST_WebServiceLinker_Operation.identification.name using the endswith function, ignoring the uri part corresponding to the operation name part whose value is {}.

CAST_ResourceService.uriCAST_WebService_Operation.identification.nameMatch: Yes/No
.../path1/path2/path3/path4/path3/No
.../path1/path2/path3/{}/path3/{}/Yes
.../path1/path2/path3/path2/path3/Yes
.../param1/value1/param2/value2/.../param1/{}/param2/{}/Yes

Examples of matches:

A client side url like:

  • "https://maps.yahoo.com/place//?addr=Meudon%2C%20Ile-de-France%2C%20France"
is transformed as:
  • "https://maps.yahoo.com/place/{}/".
It will match a server side operation whose name is "place/{}/"

Code examples

Server side: the Analysis Service schema contains an object CAST_WebService_GetOperation named /users/

@RequestMapping("/users")
public class UserController {
    
    @RequestMapping(method = RequestMethod.GET, produces = "application/json; charset=utf-8")
    @ResponseBody
    public PagedResources<UserResource> collectionList(...){
	   ...
    }

Client side: the Analysis Service schema contains an object CAST_AngularJS_GetResourceService whose property CAST_ResourceService.uri equals 'resources/scenarios/{}/'

return $resource('resources/scenarios/:id', {'id':'@id'}, {
	'query': { method: 'GET', isArray: false },
	'save': {method:'POST', isArray: false },
	'update': {method:'PUT', isArray: false },
	'notify': {method:'PUT', params: {notify: true}, isArray: false },
	'remove': {method:'POST', isArray: false, headers:{'X-HTTP-Method-Override':'DELETE'}}

Cloud Functions

See AWS Lambda for more information.

WSDL/SOAP services

The connection is made via two "root" objects:

SOAP POST Service

SOAP Any Service

WSDL is generally used in the context of SOAP web services: calls are to an operation, and operations are identified by :

  • operation name
  • port type

Samples

Client side

BPEL: Invocation of EmployeeTravelStatusPT.EmployeeTravelStatus:

<invoke partnerLink="employeeTravelStatus" 
	portType="emp:EmployeeTravelStatusPT" 
	operation="EmployeeTravelStatus"
	inputVariable="EmployeeTravelStatusRequest" 
	outputVariable="EmployeeTravelStatusResponse" />

Server side

JAX-WS: Reception of operation EmployeeTravelStatusPT.EmployeeTravelStatus:

import javax.jws.WebService;

@WebService(targetNamespace = "http://superbiz.org/wsdl")
public class EmployeeTravelStatusPT {

    public int EmployeeTravelStatus(int add1, int add2)
    {
        
    }
}

BPEL: Reception of operation TravelApprovalPT.TravelApproval:

<receive partnerLink="client" 
	portType="trv:TravelApprovalPT" 
	operation="TravelApproval" 
	variable="TravelRequest"
	createInstance="yes" />

REST/SOAP Cross-Technology

Front-End/Service Exit PointBack-end/Service Entry Point
  • Web Technologies
    • HTML5/Javascript or TypeScript
      • Web Socket Service (WebSocket)
      • XMLHttpRequest Service (XMLHttpRequest)
      • Http Request Service (HttpRequest, Fetch, Axios, SuperAgent)
    • AngularJS
      • AngularJS Service ($resource)
      • Restangular Service (Restangular)
      • Http Service ($http)
    • Vue.js
      • Axios
      • Vue-resources
      • Fetch
    • jQuery
      • jQuery Service ($.ajax, $.get, $.getJSON)
      • SAPUI5 Service.
  • Mobile
    • iOS (Objective-C, Swift)
      • NSURLConnection, NSURLSession
      • AFNetworking
    • Android
      • HttpClient
      • HttpURLConnection
      • AsyncTask
  • .NET
    •  ASP.NET
      • SOAP Resource (SoapDocumentAttr, WebMethodAttr)
      • Razor HttpRequest
  • JEE
    • Java
      • URLConnection, HttpURLConnection 
    • Spring
      • Rest Template
      • Web Util
      • Social Support
      • Web Reactive
    • Apache
      • WebClient
      • HttpClient
      • Utils URIBuilder
      • Wink Resource
      • Wink RestClient
    • Other
      • Retrofit2
      • RestHub Client
      • Feign
  • Kotlin
    • Retrofit
  • Other
    • Python
      • Urllib, Urllib2, Urllib3
      • Httplib, Httplib2,
      • aiohttp, Flask
  • Node.js (with JavaScript or TypeScript)
    • Express Service (Express)
    • Http Service (Http)
    • Loopback
    • Hapi.js
    • Sails.js
    • Restify
    • AWS Lambda
  • JEE
    • JAX-RS
      • Client Builder
      • WebTarget
      • Invocation
      • Reasteasy
      • WebResource
    • SpringMVC (@Request/Put/Post/Get/Mapping)
  • .NET
    • WCF Operation (OperationMethod)
    • Web API
  • ASP.NET
    • SOAP Operation (WebServiceAttribute)
  • Python
    • aiohttp, Flask

Messaging

The connection is made via two "root" objects:

Queue Call

Queue Receive

For the following technologies see Message Queues 1.2:

  • RabbitMQ
  • ActiveMQ
  • IBM MQ

For the following technology see AWS SNS support:

  • AWS SNS

For the following technology see AWS SQS support:

  • AWS SQS

For the following technology see gRPC-java - 1.0:

  • gRPC

Direct Web Remoting - Function Call

The connection is made via two "root" objects:

Call to a DWR service method

A DWR service method

For more details about DWR technology see Direct Web Remoting.

Program Call

The connection is made via two "root" objects:

Program Call

Program Call to Java

For the following technologies see Program Calls for Java:

  • Shell script
  • Cobol Program
  • Java Application