Hi all,
    for impulse 2 I've been working on migrating to milo 0.36 and
      have 2 questions:
    1) Security Mode
    
    I have a security mode and security polivy
    // security
          public static final int SECURITY_NONE = 0;
          public static final int SECURITY_SIGN = 1;
          public static final int SECURITY_SIGN_ENCRYPT = 2;
          public static final String[] SECURITY_OPTIONS = {
        "None", "Sign", "Sign and Encrypt" };
          public int securityMode = SECURITY_NONE;
          public static final int POLICY_Basic128Rsa15 = 0;
          public static final int POLICY_Basic256 = 1;
          public static final int POLICY_Basic256Sha256 = 2;
          public static final int POLICY_NONE = 3;
          public static final String[] POLICY_OPTIONS = {
        "Basic128Rsa15", "Basic256", "Basic256Sha256", "None" };
          public int securityPolicy = POLICY_Basic128Rsa15;
    
    
    
    In the previous release I compared both for getting the endpoint.
    In the latest examples, just the policy is used:
    
    
            // Endpoint
              List<EndpointDescription> endpoints = null;
              try {
                  endpoints =
        DiscoveryClient.getEndpoints(adapter.server).get();
              } catch (Throwable ex) {
      
                  // try the explicit discovery endpoint as well
                  String discoveryUrl = adapter.server;
      
                  if (!discoveryUrl.endsWith("/")) {
                      discoveryUrl += "/";
                  }
                  discoveryUrl += "discovery";
      
                  logger.info("Trying explicit discovery URL:
        {}", discoveryUrl);
                  endpoints =
        DiscoveryClient.getEndpoints(discoveryUrl).get();
              }
      
              // determine end point
              EndpointDescription endpoint = null;
              if (endpoint == null)
                  endpoint = endpoints.stream().filter(e ->
        e.getSecurityPolicyUri().equals(securityPolicy.getUri())).findFirst()
                          .orElseThrow(() -> new Exception("No
        desired endpoints returned"));
    
    
    
    
    How do i apply the security mode ? Is it done by passing
      public/private keys or not ?
    
             OpcUaClientConfig config =
OpcUaClientConfig.builder().setApplicationName(LocalizedText.english(adapter.applicationName))
                     
.setApplicationUri(adapter.applicationUri).setProductUri(adapter.productUri).setCertificate(certificate).setKeyPair(clientKeyPair)
    
    
    
    2) EncoderDelegate / DelegateRegistry for converting data
        values to String
    
    In previous version I used the EncoderDelegate / DelegateRegistry
      to transform a UaSerializable to String. I dont find this anymore.
      How is it done now ?
        static public String valToString(Object value, int
        maxSize) {
              if (value != null &&
        value.getClass().isArray()) {
                  String combined = "";
                  for (int n = 0; n < Array.getLength(value);
        n++) {
                      combined += (combined.isEmpty() ? "" : ";
        ");
                      String val = valToString(Array.get(value,
        n));
                      if (val != null) {
                          combined += val;
                      }
                  }
                  return combined;
              } else if (value instanceof DateTime)
                  value = ((DateTime)
        value).getJavaDate().toString();
              else if (value instanceof ByteString)
                  value = ((ByteString) value).toString();
              else if (value instanceof LocalizedText)
                  value = ((LocalizedText) value).getText();
              else if (value instanceof QualifiedName)
                  value = ((QualifiedName)
        value).toParseableString();
              else if (value instanceof NodeId)
                  value = ((NodeId) value).toParseableString();
              else if (value instanceof ExpandedNodeId)
                  value = ((ExpandedNodeId)
        value).toParseableString();
              else if (value instanceof UUID)
                  value = ((UUID) value).toString();
              else if (value instanceof XmlElement)
                  value = ((XmlElement) value).getFragment();
              else if (value instanceof StatusCode)
                  value = ((StatusCode) value).isGood() ? "Good"
        : ((StatusCode) value).isBad() ? "Bad" : "Uncertain";
              else if (value instanceof Boolean)
                  value = ((Boolean) value).toString();
      
            else if (value instanceof UaSerializable) {
                  final StringBuilder writer = new
          StringBuilder();
                    writer.append('{');
                     EncoderDelegate<Object>
          delegate = DelegateRegistry.getInstance().getEncoder(value);
                     delegate.encode(value, new
          UaEncoder() {
                    
                     private void append(String field,
          String valueOf) {
                     if (writer.length() > 1)
                     writer.append(';');
                     writer.append(field);
                     writer.append('=');
                     writer.append(valueOf);
                     }
                    
                     @Override
                     public void encodeBoolean(String
          field, Boolean value) throws UaSerializationException {
                     append(field, valToString(value));
                     }
                    
                     @Override
                     public void encodeSByte(String field,
          Byte value) throws UaSerializationException {
                     append(field, valToString(value));
                    
                     }
    
      
    ...
    thanks,
    thomas
    
    
    
    
    
    
   
_______________________________________________