CDAP Java Client library providing programmatic APIs for interacting with the CDAP platform
—
Configuration classes provide the foundation for connecting to CDAP instances. They handle connection settings, SSL configuration, authentication, timeouts, and custom HTTP headers.
Manages connection information to a CDAP instance including hostname, port, SSL settings, and API path configuration.
public class ConnectionConfig {
// Constructors
public ConnectionConfig(ConnectionConfig config);
public ConnectionConfig(String hostname, Integer port, boolean sslEnabled);
public ConnectionConfig(String hostname, Integer port, boolean sslEnabled, String apiPath);
// URI resolution methods
public URI getURI();
public String getFullHost();
public URI resolveURI(String path);
public URI resolveURI(String apiVersion, String path);
public URI resolveNamespacedURI(NamespaceId namespace, String apiVersion, String path);
// Property accessors
public String getHostname();
public Integer getPort();
public boolean isSSLEnabled();
public String getApiPath();
// Static factory methods
public static Builder builder();
public static Builder builder(ConnectionConfig connectionConfig);
// Constants
public static final ConnectionConfig DEFAULT;
}public static class Builder {
public Builder setHostname(String hostname);
public Builder setPort(Integer port);
public Builder setSSLEnabled(boolean sslEnabled);
public Builder setApiPath(String apiPath);
public ConnectionConfig build();
}// Basic connection to local CDAP instance
ConnectionConfig local = ConnectionConfig.builder()
.setHostname("localhost")
.setPort(11015)
.setSSLEnabled(false)
.build();
// Secure connection to remote CDAP instance
ConnectionConfig remote = ConnectionConfig.builder()
.setHostname("cdap.company.com")
.setPort(443)
.setSSLEnabled(true)
.setApiPath("/api")
.build();
// Copy constructor for modifications
ConnectionConfig modified = ConnectionConfig.builder(remote)
.setPort(8443)
.build();Comprehensive configuration for the Java client API including HTTP settings, authentication, retry policies, and request customization.
public class ClientConfig {
// URL resolution methods
public URL resolveURL(String path);
public URL resolveURL(String format, Object... args);
public URL resolveURLV3(String path);
public URL resolveURLNoVersion(String path);
public URL resolveNamespacedURLV3(NamespaceId namespace, String path);
// HTTP configuration accessors
public HttpRequestConfig getDefaultRequestConfig();
public HttpRequestConfig getUploadRequestConfig();
public int getDefaultReadTimeout();
public int getDefaultConnectTimeout();
public int getUploadReadTimeout();
public int getUploadConnectTimeout();
public int getAppListPageSize();
public Map<String, String> getAdditionalHeaders();
// Core configuration accessors
public ConnectionConfig getConnectionConfig();
public boolean isVerifySSLCert();
public String getApiVersion();
public int getUnavailableRetryLimit();
// Authentication accessors
public AccessToken getAccessToken();
public Supplier<AccessToken> getAccessTokenSupplier();
// Static factory methods
public static ClientConfig getDefault();
public static Builder builder();
}public static class Builder {
// Connection configuration
public Builder setConnectionConfig(ConnectionConfig connectionConfig);
// SSL configuration
public Builder setVerifySSLCert(boolean verifySSLCert);
// Timeout configuration
public Builder setUploadReadTimeout(int uploadReadTimeout);
public Builder setUploadConnectTimeout(int uploadConnectTimeout);
public Builder setDefaultReadTimeout(int defaultReadTimeout);
public Builder setDefaultConnectTimeout(int defaultConnectTimeout);
// Request configuration
public Builder setAppListPageSize(int appListPageSize);
public Builder addAdditionalHeader(String header, String value);
public Builder setUnavailableRetryLimit(int retry);
// Authentication configuration
public Builder setAccessToken(AccessToken accessToken);
public Builder setAccessToken(Supplier<AccessToken> accessToken);
// API configuration
public Builder setApiVersion(String apiVersion);
// Build method
public ClientConfig build();
}// Default timeout values
public static final int DEFAULT_READ_TIMEOUT = 15000; // milliseconds
public static final int DEFAULT_CONNECT_TIMEOUT = 15000; // milliseconds
public static final int DEFAULT_UPLOAD_READ_TIMEOUT = 0; // no timeout
public static final int DEFAULT_UPLOAD_CONNECT_TIMEOUT = 0; // no timeout
// Default retry and pagination settings
public static final int DEFAULT_SERVICE_UNAVAILABLE_RETRY_LIMIT = 50;
public static final int DEFAULT_APP_LIST_PAGE_SIZE = 25;
// SSL configuration
public static final boolean DEFAULT_VERIFY_SSL_CERTIFICATE = true;
// API version
public static final String DEFAULT_VERSION = "v3";// Basic client configuration
ClientConfig config = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.build();
// Advanced configuration with custom settings
ClientConfig advancedConfig = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.setVerifySSLCert(false) // Disable SSL verification for testing
.setDefaultReadTimeout(30000) // 30 seconds
.setDefaultConnectTimeout(10000) // 10 seconds
.setUploadReadTimeout(300000) // 5 minutes for large uploads
.setAppListPageSize(50) // Larger page size
.setUnavailableRetryLimit(10) // Fewer retries
.addAdditionalHeader("X-Custom-Header", "custom-value")
.build();
// Configuration with authentication token
AccessToken token = new AccessToken("auth-token-value", 3600L, "Bearer");
ClientConfig authConfig = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.setAccessToken(token)
.build();
// Configuration with dynamic token supplier
Supplier<AccessToken> tokenSupplier = () -> {
// Your token refresh logic here
return refreshAuthToken();
};
ClientConfig dynamicAuthConfig = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.setAccessToken(tokenSupplier)
.build();The client supports various authentication mechanisms through the AccessToken system.
public class AccessToken {
public AccessToken(String value, Long expiresIn, String tokenType);
public String getValue();
public Long getExpiresIn();
public String getTokenType();
}// Static token authentication
AccessToken staticToken = new AccessToken("your-token-here", 3600L, "Bearer");
ClientConfig config = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.setAccessToken(staticToken)
.build();
// Dynamic token with supplier for automatic refresh
Supplier<AccessToken> tokenSupplier = new Supplier<AccessToken>() {
@Override
public AccessToken get() {
// Implement your token refresh logic
String newToken = authService.refreshToken();
return new AccessToken(newToken, 3600L, "Bearer");
}
};
ClientConfig dynamicConfig = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.setAccessToken(tokenSupplier)
.build();
// Lambda-based token supplier
ClientConfig lambdaConfig = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.setAccessToken(() -> new AccessToken(getTokenFromService(), 3600L, "Bearer"))
.build();Configuration-related exceptions that may be thrown:
try {
ConnectionConfig config = ConnectionConfig.builder()
.setHostname("invalid-hostname")
.setPort(-1) // Invalid port
.build();
} catch (IllegalArgumentException e) {
System.err.println("Invalid configuration: " + e.getMessage());
}// Good: Reuse configuration across clients
ClientConfig config = ClientConfig.builder()
.setConnectionConfig(connectionConfig)
.build();
ApplicationClient appClient = new ApplicationClient(config);
ProgramClient programClient = new ProgramClient(config);
DatasetClient datasetClient = new DatasetClient(config);
// Good: Environment-specific configuration
ClientConfig prodConfig = ClientConfig.builder()
.setConnectionConfig(prodConnectionConfig)
.setVerifySSLCert(true)
.setDefaultReadTimeout(30000)
.build();
ClientConfig devConfig = ClientConfig.builder()
.setConnectionConfig(devConnectionConfig)
.setVerifySSLCert(false) // OK for development
.setDefaultReadTimeout(10000)
.build();Install with Tessl CLI
npx tessl i tessl/maven-io-cdap-cdap--cdap-client