22 Eylül 2017 Cuma

Double Sınıfı

isFinite metodu
Metodun içi şöyle
public static boolean isFinite(double d) {
  return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}
parse metodu - string
Şöyle yaparız.
String str = ...;
try {
  double d = Double.parseDouble(str);
} catch(NumberFormatException nfe) {
  ...
}
Bilimsel yani scientific gösterim şöyledir.
3564e-8 //returns 0.00003564
Örnek
Scientific notation ile belirtilen bir string'i parse edebilir. Şöyle yaparız.
double d = Double.parseDouble("4.30000000e01");
Örnek
Şöyle yaparız.
double d = Double.valueOf("4.30000000e+01");

AES

Kullanım
Her şey Cipher nesnesine dayanır.

1. Cipher.getInstance () ile AES cipher nesnesini yarat

2.Cipher.init() ile cipher nesnesini ilklendir.
Şöyle yaparız
byte[] initVector = ...;
byte[] secretKey = ...;
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE new SecretKeySpec(secretKey, "AES"),
  new IvParameterSpec(initVector));
İlklendirmede AES 256 bit kullanırsak "InvalidKeyException : Illegal key size" hatası alırsak
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy'i kurmak gerekir.

3. Cipher.doFinal () ile veriyi şifrele.

AES
Şöyle yaparız.
Cipher cipher = Cipher.getInstance("AES");
AES/CBC/NoPadding
Şöyle yaparız
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
AES/CBC/PKCS5Padding
Şöyle yaparız.
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Şifreleme için şöyle yaparız. IV için rastgele byte'lar oluşturulur. Key için kullanılan byte'lar kullanılmaz. Şifreleme yapıldıktan sonra IV + salt + şifreli veri gönderilir.
SecureRandom random = new SecureRandom();
byte[] salt = new byte[16];
random.nextBytes(salt);
// AES-256
KeySpec spec = new PBEKeySpec("password".toCharArray(), salt, 65536, 256);
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] key = f.generateSecret(spec).getEncoded();

byte[] ivBytes = new byte[16];
random.nextBytes(ivBytes);
IvParameterSpec iv = new IvParameterSpec(ivBytes);

Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encValue = c.doFinal(valueToEnc.getBytes());

byte[] finalCiphertext = new byte[encValue.length+2*16];
System.arraycopy(ivBytes, 0, finalCiphertext, 0, 16);
System.arraycopy(salt, 0, finalCiphertext, 16, 16);
System.arraycopy(encValue, 0, finalCiphertext, 32, encValue.length);

return finalCiphertext;
AES/CTR/NoPadding
Şöyle yaparız.
String CIPHER_ALGORITHM = "AES/CTR/NoPadding";
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);



Remote Method Invocation - RMI

Giriş
Remote Method Invocation (RMI) Java'nın en başından beri olan bir teknoloji.

RMI Hangi Protokolü Kullanır
RMI JRMP (Java Remote Method Protocol) protokolünü kullanır.

JAX-RS @PathParam Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.ws.rs.PathParam;
Get İsteği ve PathParam
URL'deki path isminden sonra gelen parametrelere erişim sağlar

Örnek
Şöyle yaparız.
@Path("/hello")
public class HelloWorldService {

  @GET
  @Path("{param}")
  public Response getMsg(@PathParam("param") String msg) {

    String output = "Jersey say : " + msg;

    return Response.status(200).entity(output).build();

  }
}
war ismi RestTest olsun. java paket ismi ise rest olsun.Çağırmak için şöyle yaparız.
http://localhost:8080/RestTest/rest/hello/Tuan

JAX-RS @QueryParam Anotasyonu

Giriş 
Şu satırı dahil ederiz.
import javax.ws.rs.QueryParam;
Get İsteği ve QueryParam
URL'deki ? karakterinden sonra gelen parametrelere erişimi sağlar

Örnek
İstek şöyle olsun.
/query?Country=US&City=Boston&City=Chicago
Açıklaması şöyle
JAX-RS supports multiple query parameters of the same name by mapping them to a Collection in your endpoint as follows:
Şöyle yaparız.
@GET
@Path("/query")
public String queryValues(@QueryParam("Country") List<String> countries,
                          @QueryParam("City") List<String> cities) {
  ...
}
Örnek
İstek şöyle olsun
http://www.example.com/service/endpoint?queryA=foo&queryB=bar
Şöyle yaparız. Sonuç olarak Json döner.
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

@Path("/service")
@Produces("application/json")
public interface ServiceInterface {

  @Path("/endpoint")
  @GET
  public Response getEndpoint(
          @QueryParam("queryA") String first,
          @QueryParam("queryB") String second);

}

StandardCharsets Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.nio.charset.StandardCharsets;
Alanlar
Şöyle yaparız.
StandardCharsets.UTF_8

21 Eylül 2017 Perşembe

Selenium

ChromeOptions Sınıfı
add_argument metodu
Şöyle yaparız.

ChromeOptions option = ChromeOptions();
option.add_argument("--start-maximized");
Driver Sınıfı
Selenium Driver Sınıfı yazısına taşıdım.

WebDriverWait Sınıfı
constructor
Şöyle yaparız.
 WebDriverWait wait = new WebDriverWait(driver,30);
until metodu
Şöyle yaparız.
WebElement seleniumlink = 
wait.until(ExpectedConditions.visibilityOfElementLocated(
  By.xpath("//input[@id='add_files_btn']")));
seleniumlink.click();
WebElement Sınıfı
click metodu
Java 8 Consumer arayüzü ile şöyle yaparız
Consumer<WebElement> command = e -> e.click();

// ...

command.accept(driver.findElement(By.id("id1")));