Universal Linker - 1.7

Extension ID


What’s new?

See Release Notes - 1.7 .


The “Universal 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 Universal 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:

CAST Imaging Viewer

The information generated by the extension is also used in CAST Imaging Viewer for the “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 Universal Linker extension, all configuration is automatic.

The Universal 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 errors and warnings that may potentially be returned during an analysis are as follows:

Message ID Message Type Logged during Impact Remediation Action
WBSLINKER-001 Warning Post analyses An internal issue occurred when reading a web.xml file. Transactions could be truncated because of missing http links between clients and servers. - Contact CAST Technical Support


REST services

The connection is made via the following “root” objects:

Icon Description
HTTP GET Service
HTTP PUT Service

The Universal 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. 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 Universals 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.uri After 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.uri CAST_WebService_Operation.identification.name Match: 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:

is transformed as:

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/

public class UserController {
    @RequestMapping(method = RequestMethod.GET, produces = "application/json; charset=utf-8")
    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:

Icon Description
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


Client side: BPEL: Invocation of EmployeeTravelStatusPT.EmployeeTravelStatus:

<invoke partnerLink="employeeTravelStatus" 
    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" 
    createInstance="yes" />

REST/SOAP Cross-Technology

Front-End/Service Exit Point Back-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
    • SOAP Operation (WebServiceAttribute)
  • Python
    • aiohttp, Flask


The connection is made via two “root” objects:

Icon Description
Queue call
Queue receive
  • For the following technologies see the documentation for com.castsoftware.mqe :
    • RabbitMQ
    • ActiveMQ
    • IBM MQ
  • For AWS SNS technology see the documentation for AWS SNS
  • For AWS SQS technology see the documentation for AWS SQS
  • For gRPC technology see the documentation for gRPC-java

Direct Web Remoting - Function Call

The connection is made via two “root” objects:

Icon Description
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:

Icon Description
Program Call
Program Call to Java

For the following technologies see Program Calls for Java :

  • Shell script
  • Cobol Program
  • Java Application

Commands running SQL script

The connection is made via two “root” objects:

Icon Description
? Call to a SQL file query
Alt text SQL Script

See also the documentation for com.castsoftware.rpg .