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?
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 |
---|---|
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 |
---|---|
|
|
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.