// Path: camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java
// public class KeyStoreLoader {
// 	public static final String DEFAULT_KEY_STORE_TYPE = "PKCS12";
// 
// 	private String type = DEFAULT_KEY_STORE_TYPE;
// 	private URL url;
// 	private String keyStorePassword;
// 	private String keyPassword;
// 	private String keyAlias;
// 
// 	public static class Result {
// 
// 		private final X509Certificate certificate;
// 		private final KeyPair keyPair;
// 
// 		public Result(final X509Certificate certificate, final KeyPair keyPair) {
// 			this.certificate = certificate;
// 			this.keyPair = keyPair;
// 		}
// 
// 		public X509Certificate getCertificate() {
// 			return this.certificate;
// 		}
// 
// 		public KeyPair getKeyPair() {
// 			return this.keyPair;
// 		}
// 	}
// 
// 	public KeyStoreLoader() {
// 	}
// 
// 	public void setType(final String type) {
// 		this.type = type != null ? type : DEFAULT_KEY_STORE_TYPE;
// 	}
// 
// 	public String getType() {
// 		return this.type;
// 	}
// 
// 	public void setUrl(final URL url) {
// 		this.url = url;
// 	}
// 
// 	public URL getUrl() {
// 		return this.url;
// 	}
// 
// 	public void setUrl(final String url) throws MalformedURLException {
// 		this.url = new URL(url);
// 	}
// 
// 	public void setKeyStorePassword(final String keyStorePassword) {
// 		this.keyStorePassword = keyStorePassword;
// 	}
// 
// 	public String getKeyStorePassword() {
// 		return this.keyStorePassword;
// 	}
// 
// 	public void setKeyPassword(final String keyPassword) {
// 		this.keyPassword = keyPassword;
// 	}
// 
// 	public String getKeyPassword() {
// 		return this.keyPassword;
// 	}
// 
// 	public void setKeyAlias(final String keyAlias) {
// 		this.keyAlias = keyAlias;
// 	}
// 
// 	public String getKeyAlias() {
// 		return this.keyAlias;
// 	}
// 
// 	public Result load() throws GeneralSecurityException, IOException {
// 
// 		final KeyStore keyStore = KeyStore.getInstance(this.type);
// 
// 		try (InputStream stream = this.url.openStream()) {
// 			keyStore.load(stream, this.keyStorePassword != null ? this.keyStorePassword.toCharArray() : null);
// 		}
// 
// 		String effectiveKeyAlias = this.keyAlias;
// 
// 		if (effectiveKeyAlias == null) {
// 			if (keyStore.size() != 1) {
// 				throw new IllegalArgumentException(
// 						"Key store contains more than one key. The use of the 'keyAlias' parameter is required.");
// 			}
// 			try {
// 				effectiveKeyAlias = keyStore.aliases().nextElement();
// 			} catch (final NoSuchElementException e) {
// 				throw new RuntimeException("Failed to enumerate key alias", e);
// 			}
// 		}
// 
// 		final Key privateKey = keyStore.getKey(effectiveKeyAlias,
// 				this.keyPassword != null ? this.keyPassword.toCharArray() : null);
// 
// 		if (privateKey instanceof PrivateKey) {
// 			final X509Certificate certificate = (X509Certificate) keyStore.getCertificate(effectiveKeyAlias);
// 			if (certificate == null) {
// 				return null;
// 			}
// 
// 			final PublicKey publicKey = certificate.getPublicKey();
// 			final KeyPair keyPair = new KeyPair(publicKey, (PrivateKey) privateKey);
// 			return new Result(certificate, keyPair);
// 		}
// 
// 		return null;
// 	}
// }


import java.net.MalformedURLException;
import java.net.URL;
import org.apache.camel.component.milo.KeyStoreLoader;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
	private String applicationUri = DEFAULT_APPLICATION_URI;

	@UriParam(label = "client", defaultValue = DEFAULT_PRODUCT_URI)
	private String productUri = DEFAULT_PRODUCT_URI;

	@UriParam(label = "client")
	private Long requestTimeout;

	@UriParam(label = "client")
	private Long channelLifetime;

	@UriParam(label = "client")
	private String sessionName;

	@UriParam(label = "client")
	private Long sessionTimeout;

	@UriParam(label = "client")
	private Long maxPendingPublishRequests;

	@UriParam(label = "client")
	private Long maxResponseMessageSize;

	@UriParam(label = "client")
	private Boolean secureChannelReauthenticationEnabled;

	@UriParam(label = "client")
	private URL keyStoreUrl;

	@UriParam(label = "client")
// Path: camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java
// public class KeyStoreLoader {
// 	public static final String DEFAULT_KEY_STORE_TYPE = "PKCS12";
// 
// 	private String type = DEFAULT_KEY_STORE_TYPE;
// 	private URL url;
// 	private String keyStorePassword;
// 	private String keyPassword;
// 	private String keyAlias;
// 
// 	public static class Result {
// 
// 		private final X509Certificate certificate;
// 		private final KeyPair keyPair;
// 
// 		public Result(final X509Certificate certificate, final KeyPair keyPair) {
// 			this.certificate = certificate;
// 			this.keyPair = keyPair;
// 		}
// 
// 		public X509Certificate getCertificate() {
// 			return this.certificate;
// 		}
// 
// 		public KeyPair getKeyPair() {
// 			return this.keyPair;
// 		}
// 	}
// 
// 	public KeyStoreLoader() {
// 	}
// 
// 	public void setType(final String type) {
// 		this.type = type != null ? type : DEFAULT_KEY_STORE_TYPE;
// 	}
// 
// 	public String getType() {
// 		return this.type;
// 	}
// 
// 	public void setUrl(final URL url) {
// 		this.url = url;
// 	}
// 
// 	public URL getUrl() {
// 		return this.url;
// 	}
// 
// 	public void setUrl(final String url) throws MalformedURLException {
// 		this.url = new URL(url);
// 	}
// 
// 	public void setKeyStorePassword(final String keyStorePassword) {
// 		this.keyStorePassword = keyStorePassword;
// 	}
// 
// 	public String getKeyStorePassword() {
// 		return this.keyStorePassword;
// 	}
// 
// 	public void setKeyPassword(final String keyPassword) {
// 		this.keyPassword = keyPassword;
// 	}
// 
// 	public String getKeyPassword() {
// 		return this.keyPassword;
// 	}
// 
// 	public void setKeyAlias(final String keyAlias) {
// 		this.keyAlias = keyAlias;
// 	}
// 
// 	public String getKeyAlias() {
// 		return this.keyAlias;
// 	}
// 
// 	public Result load() throws GeneralSecurityException, IOException {
// 
// 		final KeyStore keyStore = KeyStore.getInstance(this.type);
// 
// 		try (InputStream stream = this.url.openStream()) {
// 			keyStore.load(stream, this.keyStorePassword != null ? this.keyStorePassword.toCharArray() : null);
// 		}
// 
// 		String effectiveKeyAlias = this.keyAlias;
// 
// 		if (effectiveKeyAlias == null) {
// 			if (keyStore.size() != 1) {
// 				throw new IllegalArgumentException(
// 						"Key store contains more than one key. The use of the 'keyAlias' parameter is required.");
// 			}
// 			try {
// 				effectiveKeyAlias = keyStore.aliases().nextElement();
// 			} catch (final NoSuchElementException e) {
// 				throw new RuntimeException("Failed to enumerate key alias", e);
// 			}
// 		}
// 
// 		final Key privateKey = keyStore.getKey(effectiveKeyAlias,
// 				this.keyPassword != null ? this.keyPassword.toCharArray() : null);
// 
// 		if (privateKey instanceof PrivateKey) {
// 			final X509Certificate certificate = (X509Certificate) keyStore.getCertificate(effectiveKeyAlias);
// 			if (certificate == null) {
// 				return null;
// 			}
// 
// 			final PublicKey publicKey = certificate.getPublicKey();
// 			final KeyPair keyPair = new KeyPair(publicKey, (PrivateKey) privateKey);
// 			return new Result(certificate, keyPair);
// 		}
// 
// 		return null;
// 	}
// }


// Path: camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.camel.component.milo.KeyStoreLoader;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;

	private String applicationUri = DEFAULT_APPLICATION_URI;

	@UriParam(label = "client", defaultValue = DEFAULT_PRODUCT_URI)
	private String productUri = DEFAULT_PRODUCT_URI;

	@UriParam(label = "client")
	private Long requestTimeout;

	@UriParam(label = "client")
	private Long channelLifetime;

	@UriParam(label = "client")
	private String sessionName;

	@UriParam(label = "client")
	private Long sessionTimeout;

	@UriParam(label = "client")
	private Long maxPendingPublishRequests;

	@UriParam(label = "client")
	private Long maxResponseMessageSize;

	@UriParam(label = "client")
	private Boolean secureChannelReauthenticationEnabled;

	@UriParam(label = "client")
	private URL keyStoreUrl;

	@UriParam(label = "client")
	private String keyStoreType = KeyStoreLoader.DEFAULT_KEY_STORE_TYPE;