I use Apache’s HttpClient library for all my URL related needs. It is a marvelous library that does most of the job behind the scenes. Compared the Java’s URL class, it is not as easy to use as Apache’s HttpClient. While using this library, a site that I commonly check for updates threw the exception message javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated.
When I checked the site, it seemed that its SSL certificated had expired. The only workaround for this is to create your own TrustManager. This class actually checks if the SSL certificate is valid. The scheme used by SSL is called X.509 and Java has a specific TrustManager for this scheme, called X509TrustManager.
This handy method created by theskeleton is just the perfect solution to have your HttpClient object bypass any SSL related errors and ensures that it accepts all SSL certificates of a site, whether it is expired or not.
1. 1.Define the object type PROFILE_TAG_TYPE.
CREATE OR REPLACE TYPE PZN_ADMIN.PROFILE_TAG_TYPE
AS
OBJECT
(
MID VARCHAR2 (34),
TAG_ID NUMBER,
CUSTOMER_TYPE VARCHAR2(1),
SOURCE_SYSTEM VARCHAR2(30),
TAG_CREATED_DATE VARCHAR2(30),
INTEREST_LEVEL NUMBER(2),
SUPPRESSION_IND VARCHAR2(2),
SUPPRESSION_EXPIRY_DATE VARCHAR2(30),
LAST_HOUSEKEEPING_DATE VARCHAR2(30),
LAST_EVENT_DATE VARCHAR2(30),
REASON VARCHAR2(1500) );
2. 2. Grant PROFILE_TAG_TYPE execute access to PZN_MB_USER.
GRANT EXECUTE ON PZN_ADMIN.PROFILE_TAG_TYPE TO PZN_MB_USER;
3. 3. Define the array type reference to object PROFILE_TAG_TYPE.
CREATE TYPE PZN_ADMIN.PROFILE_TAG_ARRAY AS TABLE OF PZN_ADMIN.PROFILE_TAG_TYPE;
4. 4. Grant PROFILE_TAG_ARRAY execute access to PZN_MB_USER.
GRANT EXECUTE ON PZN_ADMIN.PROFILE_TAG_ARRAY TO PZN_MB_USER;
5. 5. Create store procedure package.
CREATE OR REPLACE
PACKAGE PZN_ADMIN.PZN_PROFILE_TAG_PKG
AS
PROCEDURE INSERT_PROFILE_TAG(
PTA PROFILE_TAG_ARRAY);
END PZN_PROFILE_TAG_PKG;
6. 6. Create store procedure package body.
CREATE OR REPLACE
PACKAGE BODY PZN_ADMIN.PZN_PROFILE_TAG_PKG
AS
PROCEDURE INSERT_PROFILE_TAG(
PTA PROFILE_TAG_ARRAY)
AS
BEGIN
FOR I IN PTA.FIRST..PTA.LAST
LOOP
INSERT
INTO PZN_ADMIN.PROFILE_TAG
(
PROFILE_TAG_ID,
MID,
TAG_ID,
CUSTOMER_TYPE,
SOURCE_SYSTEM,
TAG_CREATED_DATE,
INTEREST_LEVEL,
SUPPRESSION_IND,
SUPPRESSION_EXPIRY_DATE,
LAST_HOUSEKEEPING_DATE,
LAST_EVENT_DATE,
REASON
)
VALUES
(
SEQ_PROFILE_TAG_ID.NEXTVAL ,
PTA(I).MID,
PTA(I).TAG_ID,
PTA(I).CUSTOMER_TYPE,
PTA(I).SOURCE_SYSTEM,
TO_DATE(PTA(I).TAG_CREATED_DATE,'YYYY-MM-DD'),
PTA(I).INTEREST_LEVEL,
PTA(I).SUPPRESSION_IND,
TO_DATE(PTA(I).SUPPRESSION_EXPIRY_DATE,'YYYY-MM-DD'),
TO_DATE(PTA(I).LAST_HOUSEKEEPING_DATE,'YYYY-MM-DD'),
TO_DATE(PTA(I).LAST_EVENT_DATE,'YYYY-MM-DD'),
PTA(I).REASON
);
END LOOP;
END INSERT_PROFILE_TAG;
END PZN_PROFILE_TAG_PKG;
7. 7. Create synonym to PZN_MB_USER.
CREATE SYNONYM PZN_MB_USER.PZN_PROFILE_TAG_PKG FOR PZN_ADMIN.PZN_PROFILE_TAG_PKG;
8. 8. Grant execute access to PZN_MB_USER.
GRANT EXECUTE ON PZN_ADMIN.PZN_PROFILE_TAG_PKG TO PZN_MB_USER;
9. 9. Create the java class to call the procedure.
public class ProcedureTest2 {
public static void insertProfileTag(){
Connection dbConn = null;
try {
Object[] so1 = {"ee745b5782bfc311e0b5730a2aba15aa77",31,"C","eDB","2012-08-13",0,"0","2012-08-13","2012-08-13","2012-08-13","eDB"};
Object[] so2 = {"ee745b5782bfc311e0b5730a2aba15aa77",32,"C","eDB","2012-08-13",0,"0","2012-08-13","2012-08-13","2012-08-13","eDB"};
OracleCallableStatement callStatement = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn = DriverManager.getConnection("jdbc:oracle:thin:@da957116.fmr.com:1521:orcl", "PZN_MB_USER", "PZN_MB_USER123");
StructDescriptor st = new StructDescriptor("PZN_ADMIN.PROFILE_TAG_TYPE", dbConn);
STRUCT s1 = new STRUCT(st, dbConn, so1);
STRUCT s2 = new STRUCT(st, dbConn, so2);
STRUCT[] deptArray = { s1, s2 };
ArrayDescriptor arrayDept = ArrayDescriptor.createDescriptor("PZN_ADMIN.PROFILE_TAG_ARRAY", dbConn);
ARRAY deptArrayObject = new ARRAY(arrayDept, dbConn, deptArray);
callStatement = (OracleCallableStatement) dbConn.prepareCall("{call PZN_PROFILE_TAG_PKG.INSERT_PROFILE_TAG(?)}");
callStatement.setArray(1, deptArrayObject);
callStatement.executeUpdate();
dbConn.commit();
callStatement.close();
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
}
public static void main(String[] args) {
insertProfileTag();
}
}