private OpcUaClient createClient(String connectionString) throws Exception {
File securityTempDir = new File(System.getProperty("java.io.tmpdir"), "security");
if (!securityTempDir.exists() && !securityTempDir.mkdirs()) {
throw new Exception("unable to create security dir: " + securityTempDir);
}
LOGGER.info("security temp dir: {}", securityTempDir.getAbsolutePath());
KeyStoreLoader loader = new KeyStoreLoader().load(securityTempDir);
SecurityPolicy securityPolicy = getSecurityPolicy();
EndpointDescription[] endpoints;
try {
endpoints = UaTcpStackClient.getEndpoints(connectionString).get();
} catch (Throwable ex) {
String discoveryUrl = connectionString + "/discovery";
LOGGER.info("Trying explicit discovery URL: {}", discoveryUrl);
endpoints = UaTcpStackClient.getEndpoints(discoveryUrl).get();
}
EndpointDescription endpoint = Arrays.stream(endpoints)
.filter(e -> e.getSecurityPolicyUri().equals(securityPolicy.getSecurityPolicyUri())).findFirst()
.orElseThrow(() -> new Exception("no desired endpoints returned"));
LOGGER.info("Using endpoint: {} [{}]", endpoint.getEndpointUrl(), securityPolicy);
OpcUaClientConfig config = OpcUaClientConfig.builder()
.setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
.setApplicationUri("urn:eclipse:milo:examples:client").setCertificate(loader.getClientCertificate())
.setKeyPair(loader.getClientKeyPair()).setEndpoint(endpoint).setIdentityProvider(getIdentityProvider())
.setRequestTimeout(uint(5000)).build();
return new OpcUaClient(config);
}