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

Extension ID

com.castsoftware.wbslinker

What's new?

See Universal Linker - 1.7 - Release Notes.

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-001WarningPost analysesAn 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

 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:


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

Icon

Description

Queue Call

Queue Receive

For the following technologies see the documentation for com.castsoftware.mqe:

  • RabbitMQ
  • ActiveMQ
  • IBM MQ

For the following technology see the documentation for AWS SNS support:

  • AWS SNS

For the following technology see the documentation for AWS SQS support:

  • AWS SQS

For the following technology see the documentation for gRPC-java:

  • gRPC

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 the documentation for com.castsoftware.dwr.

Program Call

The connection is made via two "root" objects:

Icon

Description

Program Call

Program Call to Java

For the following technologies see the documentation for com.castsoftware.java2program:

  • 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

SQL Script

See also the documentation for com.castsoftware.rpg.