Universal Linker - 1.7

Extension ID

com.castsoftware.wbslinker

What’s new?

See Release Notes - 1.7 .

Description

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

HTTP Call

REST services

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

Icon Description
HTTP GET Service
HTTP PUT Service
HTTP DELETE Service
HTTP POST Service, HTTP PATCH 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/

@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:

Icon Description
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 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
  • ASP.NET
    • SOAP Operation (WebServiceAttribute)
  • Python
    • aiohttp, Flask

Messaging

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 .