use of org.ballerinalang.connector.api.Value in project ballerina by ballerina-lang.
the class InitEndpoint method execute.
@Override
public void execute(Context context) {
Struct clientEndpoint = BLangConnectorSPIUtil.getConnectorEndpointStruct(context);
Struct clientEndpointConfig = clientEndpoint.getStructField(HttpConstants.CLIENT_ENDPOINT_CONFIG);
String remoteUrl = clientEndpointConfig.getStringField(WebSocketConstants.CLIENT_URL_CONFIG);
Value clientServiceType = clientEndpointConfig.getTypeField(WebSocketConstants.CLIENT_SERVICE_CONFIG);
Service service = BLangConnectorSPIUtil.getServiceFromType(context.getProgramFile(), clientServiceType);
if (service == null) {
throw new BallerinaConnectorException("Cannot find client service: " + clientServiceType);
}
if (WebSocketConstants.WEBSOCKET_CLIENT_ENDPOINT_NAME.equals(service.getEndpointName())) {
WebSocketService wsService = new WebSocketService(service);
// TODO: Fix this validation
// WebSocketServiceValidator.validateServiceEndpoint(wsService);
WsClientConnectorConfig clientConnectorConfig = new WsClientConnectorConfig(remoteUrl);
Value[] subProtocolValues = clientEndpointConfig.getArrayField(WebSocketConstants.CLIENT_SUBPROTOCOLS_CONFIG);
if (subProtocolValues != null) {
clientConnectorConfig.setSubProtocols(Arrays.stream(subProtocolValues).map(Value::getStringValue).toArray(String[]::new));
}
Map<String, Value> headerValues = clientEndpointConfig.getMapField(WebSocketConstants.CLIENT_CUSTOMHEADERS_CONFIG);
if (headerValues != null) {
clientConnectorConfig.addHeaders(getCustomHeaders(headerValues));
}
long idleTimeoutInSeconds = clientEndpointConfig.getIntField(WebSocketConstants.CLIENT_IDLETIMOUT_CONFIG);
if (idleTimeoutInSeconds > 0) {
clientConnectorConfig.setIdleTimeoutInMillis((int) (idleTimeoutInSeconds * 1000));
}
clientEndpointConfig.addNativeData(WebSocketConstants.CLIENT_SERVICE_CONFIG, wsService);
clientEndpointConfig.addNativeData(WebSocketConstants.CLIENT_CONNECTOR_CONFIGS, clientConnectorConfig);
} else {
throw new BallerinaConnectorException("Incorrect endpoint: " + service.getEndpointName());
}
context.setReturnValues();
}
use of org.ballerinalang.connector.api.Value in project ballerina by ballerina-lang.
the class InitEndpoint method setFilters.
/**
* Extract and attach the ordered set of filters to the service endpoint.
* @param endpointConfig endpoint configuration
* @param serviceEndpoint service endpoint object
*/
private void setFilters(Struct endpointConfig, Struct serviceEndpoint) {
Value[] filterValues = endpointConfig.getArrayField(HttpConstants.ENDPOINT_CONFIG_FILTERS);
if (filterValues == null) {
// no filters
return;
}
HashSet<FilterHolder> filterFunctionSet = new LinkedHashSet<>();
for (Value filterValue : filterValues) {
filterFunctionSet.add(new FilterHolder(extractFilterFunction(filterValue.getVMValue(), 0), extractFilterFunction(filterValue.getVMValue(), 1)));
}
serviceEndpoint.addNativeData(HttpConstants.FILTERS, filterFunctionSet);
}
Aggregations