Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

On this page:

Target audience:

CAST Administrators

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


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

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

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

  • REST services
  • WSDL/SOAP services

The connection is made via four "root" objects:

HTTP GET Service



HTTP PUT Service

Note that you can view a list of errors and warnings that may potentially be returned during an analysis in Web Services Linker.

REST services

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

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{}/phone/{}/{}/phone/{}/phone/{}/phone{}/phone/

 The result is then compared to / 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

Examples of matches

A client side url like:

  • ""
is transformed as:
  • "{}/".
It will match a server side operation whose name is "place/{}/"


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'}}

WSDL/SOAP services

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


Invocation of EmployeeTravelStatusPT.EmployeeTravelStatus:

<invoke partnerLink="employeeTravelStatus" 
	outputVariable="EmployeeTravelStatusResponse" />

Server side


Reception of operation EmployeeTravelStatusPT.EmployeeTravelStatus:

import javax.jws.WebService;

@WebService(targetNamespace = "")
public class EmployeeTravelStatusPT {

    public int EmployeeTravelStatus(int add1, int add2)


Reception of operation TravelApprovalPT.TravelApproval:

<receive partnerLink="client" 
	createInstance="yes" />

Cross-Technology Transaction

Front-End/Service Exit PointBack-end/Service Entry Point
  • HTML5/Javascript
    • Web Socket Service (WebSocket)
    • XMLHttpRequest Service (XMLHttpRequest)
    • Http Request Service (HttpRequest)
  • AngularJS
    • AngularJS Service ($resource)
    • Restangular Service (Restangular)
    • Http Service ($http)
  • jQuery
    • jQuery Service ($.ajax, $.get, $.getJSON)
  • iOS
    • NSURLConnection, NSURLSession
    • SOAP Resource (SoapDocumentAttr, WebMethodAttr)
  • Python
    • Urllib, Urllib2, Httplib, Httplib2, aiohttp, Flask
  • Node.js
    • Express Service (Express)
    • Http Service (Http)
  • JEE
    • JAX-RS (@GET, @POST)
    • SpringMVC (@RequestMapping, )
  • .NET
    • WCF Operation (OperationMethod)
    • SOAP Operation (WebServiceAttribute)
  • Python
    • aiohttp, Flask
  • No labels