use of org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription in project milo by eclipse.
the class OpcUaClient method create.
/**
* Create and configure an {@link OpcUaClient} by selecting an {@link EndpointDescription} from a list of endpoints
* retrieved via the GetEndpoints service from the server at {@code endpointUrl} and building an
* {@link OpcUaClientConfig} using that endpoint.
*
* @param endpointUrl the endpoint URL of the server to connect to and retrieve endpoints from.
* @param selectEndpoint a function that selects the {@link EndpointDescription} to connect to from the list of
* endpoints from the server.
* @param buildConfig a function that configures an {@link OpcUaClientConfigBuilder} and then builds and returns
* an {@link OpcUaClientConfig}.
* @return a configured {@link OpcUaClient}.
* @throws UaException if the endpoints could not be retrieved or the client could not be created.
*/
public static OpcUaClient create(String endpointUrl, Function<List<EndpointDescription>, Optional<EndpointDescription>> selectEndpoint, Function<OpcUaClientConfigBuilder, OpcUaClientConfig> buildConfig) throws UaException {
try {
List<EndpointDescription> endpoints = DiscoveryClient.getEndpoints(endpointUrl).get();
EndpointDescription endpoint = selectEndpoint.apply(endpoints).orElseThrow(() -> new UaException(StatusCodes.Bad_ConfigurationError, "no endpoint selected"));
OpcUaClientConfigBuilder builder = OpcUaClientConfig.builder().setEndpoint(endpoint);
return create(buildConfig.apply(builder));
} catch (InterruptedException | ExecutionException e) {
if (!endpointUrl.endsWith("/discovery")) {
StringBuilder discoveryUrl = new StringBuilder(endpointUrl);
if (!endpointUrl.endsWith("/")) {
discoveryUrl.append("/");
}
discoveryUrl.append("discovery");
return create(discoveryUrl.toString(), selectEndpoint, buildConfig);
} else {
throw UaException.extract(e).orElseGet(() -> new UaException(e));
}
}
}
use of org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription in project milo by eclipse.
the class AnonymousProviderTest method testGetIdentityToken_EmptyPolicyId.
@Test
public void testGetIdentityToken_EmptyPolicyId() throws Exception {
EndpointDescription endpoint = new EndpointDescription(null, null, null, null, null, new UserTokenPolicy[] { new UserTokenPolicy("", UserTokenType.Anonymous, null, null, null) }, null, null);
AnonymousProvider p = new AnonymousProvider();
SignedIdentityToken signedIdentityToken = p.getIdentityToken(endpoint, ByteString.NULL_VALUE);
assertEquals(signedIdentityToken.getToken().getPolicyId(), "");
assertTrue(signedIdentityToken.getToken() instanceof AnonymousIdentityToken);
}
use of org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription in project milo by eclipse.
the class AnonymousProviderTest method testGetIdentityToken.
@Test
public void testGetIdentityToken() throws Exception {
EndpointDescription endpoint = new EndpointDescription(null, null, null, null, null, new UserTokenPolicy[] { new UserTokenPolicy("anonymous", UserTokenType.Anonymous, null, null, null) }, null, null);
AnonymousProvider p = new AnonymousProvider();
SignedIdentityToken signedIdentityToken = p.getIdentityToken(endpoint, ByteString.NULL_VALUE);
assertEquals(signedIdentityToken.getToken().getPolicyId(), "anonymous");
assertTrue(signedIdentityToken.getToken() instanceof AnonymousIdentityToken);
}
use of org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription in project milo by eclipse.
the class DiscoveryClient method getEndpoints.
private static CompletableFuture<List<EndpointDescription>> getEndpoints(String endpointUrl, String profileUri, Consumer<UaStackClientConfigBuilder> customizer) {
EndpointDescription endpoint = new EndpointDescription(endpointUrl, null, null, MessageSecurityMode.None, SecurityPolicy.None.getUri(), null, profileUri, ubyte(0));
UaStackClientConfigBuilder builder = UaStackClientConfig.builder();
builder.setEndpoint(endpoint);
customizer.accept(builder);
UaStackClientConfig config = builder.build();
try {
UaStackClient stackClient = UaStackClient.create(config);
DiscoveryClient discoveryClient = new DiscoveryClient(stackClient);
return discoveryClient.connect().thenCompose(c -> c.getEndpoints(endpointUrl, new String[0], new String[] { profileUri })).whenComplete((e, ex) -> discoveryClient.disconnect()).thenApply(response -> l(response.getEndpoints()));
} catch (UaException e) {
return failedFuture(e);
}
}
use of org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription in project milo by eclipse.
the class DiscoveryClient method findServers.
/**
* Query the FindServers service at the {@code endpointUrl}.
* <p>
* The discovery URL(s) for each server {@link ApplicationDescription} in the response can then be used in a
* {@link #getEndpoints(String)} call to discover the endpoints for that server.
*
* @param endpointUrl the endpoint URL to find servers at.
* @param customizer a {@link Consumer} that accepts a {@link UaStackClientConfigBuilder} for customization.
* @return a List of {@link ApplicationDescription}s returned by the FindServers service.
*/
public static CompletableFuture<List<ApplicationDescription>> findServers(String endpointUrl, Consumer<UaStackClientConfigBuilder> customizer) {
EndpointDescription endpoint = new EndpointDescription(endpointUrl, null, null, MessageSecurityMode.None, SecurityPolicy.None.getUri(), null, Stack.TCP_UASC_UABINARY_TRANSPORT_URI, ubyte(0));
UaStackClientConfigBuilder builder = UaStackClientConfig.builder();
builder.setEndpoint(endpoint);
customizer.accept(builder);
UaStackClientConfig config = builder.build();
try {
UaStackClient stackClient = UaStackClient.create(config);
DiscoveryClient discoveryClient = new DiscoveryClient(stackClient);
return discoveryClient.connect().thenCompose(c -> c.findServers(endpointUrl, new String[0], new String[0])).whenComplete((e, ex) -> discoveryClient.disconnect()).thenApply(response -> l(response.getServers()));
} catch (UaException e) {
return failedFuture(e);
}
}
Aggregations