29 Nisan 2016 Cuma

DefaultHandler Sınıfı

characters metodu
Tag arasındaki veriyi verir. Şöyle yaparız.
StringBuilder buf = new StringBuilder();

@Override
public void characters(char[] ch, int start, int length) {
  buf.append(ch, start, length);
  ...
}
endElement metodu
qname XML tag'ini verir. Şöyle yaparız.
@Override
public void endElement(String uri, String localName, String qName)
        throws SAXException {
  if (qName.equals("parent")) {
    ...
  } else if (qName.equals("child1")) {
    ...
  } else if (qName.startsWith("child")) {
    ...
  }
}
startElement metodu
qname XML tag'ini verir. Şöyle yaparız.
@Override
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {
  if (qName.equals("parent")) {
   ...
  } else if (qName.equals("child1")) {
    ...
  } else if (qName.startsWith("child")) {
    ...
  }
}

28 Nisan 2016 Perşembe

SecretKey Arayüzü

SecretKey
Giriş
Şu satırı dahil ederiz.
import javax.crypto.SecretKey;
Bir arayüzdür.

constructor
Şöyle üretilir.
KeySpec keySpec = ...;
SecretKeyFactory keyFactory = ...;
SecretKey key = keyFactory.generateSecret(keySpec);

AES
Anahtar uzunlukları 128 (16 byte) , 192 (24 byte) , and 256 (32 byte) bit olabilir.

Şöyle yaparız.
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256);  //using AES-256
SecretKey key = keyGen.generateKey();  //generating key
Şöyle yaparız.
byte[] keyBytes = "1234123412341234".getBytes();  //example
SecretKey key = new SecretKeySpec(keyBytes, "AES");



CipherOutputStream Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.crypto.CipherOutputStream;
constructor
Şöyle yaparız.
Cipher cipher = ...;
try(FileOutputStream fos = new FileOutputStream(...)){
  try(CipherOutputStream cos = new CipherOutputStream(fos, cipher)){
    ...
  }
 }
}
write metodu
Şöyle yaparız.
byte buf[] = ...;
cos.write(buf);

CipherInputStream Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.crypto.CipherInputStream;
constructor
Şöyle yaparız.
try(FileInputStream fis = new FileInputStream(...)){
  Cipher cipher = ...;
  try(CipherInputStream cis = new CipherInputStream(fis, cipher)){
    ...
  }
}
read metodu
Şöyle yaparız.
byte buf[] = new byte[4096];
while((read = cis.read(buf)) != -1)  //reading from file
  ...
}

27 Nisan 2016 Çarşamba

PrivateKey Arayüzü

PrivateKey
Bir arayüzdür.

RSAPrivateKey Sınıfı
Constructor
Şöyle yaparız.
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(new BigInteger(
        "12345678", 16), new BigInteger("12345678",
        16));

RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);


CertificateFactory Sınıfı

Giriş
Bu sınıfı bir X509Certificate sertifikasını stream'den okumamız sağlar.

generateCertificate metodu
Şöyle yaparız.
InputStream inStream = new FileInputStream("crypt.cer");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
getInstance metodu
Şöyle yaparız.
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Şöyle yaparız.
CertificateFactory cf = CertificateFactory.getInstance(X.509, BC);

26 Nisan 2016 Salı

JPA @Embeddable Anotasyonu

Giriş
Bir tabloda çok fazla alan varsa ve sütunları mantıksal olarak bir nesne altında gruplamak uygunsa kullanırız. Embeddable nesnesindeki alanlar içinde bulunduğu nesnenin tablosuna yazılır.

@Embeddable - Kullanım Şekli
En faydalı olduğu yer birden fazla sınıfa alan eklemek istersek kolayca yapabilmemizi sağlaması. Önce bir sınıf tanımlanıyor.
@Embeddable
class Audit {
  Timestamp created;
  String createdBy;
  String updatedBy;
}
Daha sonra sınıf Entity sınıfına ekleniyor.
@Entity
class Order {
   @Embedded
   Audit audit;
}
@Embeddable - AttributeOverrides
Embeddable ile çok kullanılan bir diğer anotasyon ise AttributeOverrides. Bu anotasyon ile nesnenin başka bir yerde tanımlanmış özelliği değiştiriliyor. Aşağıdaki kodda Address için farklı sütun isimleri kullanılıyor.
@Embeddable
public class Address {
  String email;
  String address;
  String city; 
  String state;
  String zip;
  String country;
}

@Entity
@Table(name="customer")
public class Customer {
  @Embedded
  @AttributeOverrides({
    @AttributeOverride(name="address", column=@Column(name="ship_addr"),
    @AttributeOverride(name="city", column=@Column(name="ship_city"),
    @AttributeOverride(name="state", column=@Column(name="ship_state"),
    @AttributeOverride(name="zip", column=@Column(name="ship_zip"),
    @AttributeOverride(name="country", column=@Column(name="ship_country")
  })
  Address shippingAddress;

  @Embedded
  @AttributeOverrides({
    @AttributeOverride(name="address", column=@Column(name="bill_addr"),
    @AttributeOverride(name="city", column=@Column(name="bill_city"),
    @AttributeOverride(name="state", column=@Column(name="bill_state"),
    @AttributeOverride(name="zip", column=@Column(name="bill_zip")
  })
  Address billingAddress;
}

@EmbeddedId - Composite Key
Eğer istenirse Embeddable , Composite Key olarak kullanılabilir. Şöyle yaparız.
@Embeddable
public class CourseId {
  private String club_id;
  private String course_id;
}

@Entity
@Table(name="course_info")
public class Course {
  @EmbeddedId
  private CourseId migCourseId;

  ...
}
İç İçe @Embeddable
Şöyle yaparız. İlk Embeddable tanımlanır
@Embeddable
public class CourseId {
    private String club_id;
    private String course_id;
}
Bunu kullanan ikinci Embeddable tanımlanır.
@Embeddable
public class HoleId {
    private CourseId migCourseId;
    private int hole_num;
}
İkinci Embeddable composite key bile yapılabilir.
@Entity
@Table(name="hole_info")
public class Hole {
  @EmbeddedId
  private HoleId migHoleId;
  ...
}