مطالب آموزشی مرتبط با محصولات شرکت اوراکل

oracle adf, oracle soa, oracle bpm, oracle database, oracle weblogic

نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

سلام در این بلاگ قصد دارم نحوه اتصال وب لاجیک به سایتهایی که SSL هستند را توضیح بدهم.
اگر قصد دارید که مثلاً در داخل یک برنامه مانند JSF یا ADF به وب سایت بانک پاسارگاد متصل شوید تا از نتیجه تراکنش مطلع گردید با یک HTTPClient ساده نمیتوانید این موضوع را حل نمایید زیرا وب لاجیک امکان اتصال را به شما نمیدهد برای این منظور باید فایل crt وب سایت امن را در داخل وب لاجیک وارد نمایید تا یک لینک trust بین سرور ها ایجاد گردد.
مرحله اول گرفتن فایل crt از وب سابت میباشد در تصاویر زیر من نحوه گرفتن فایل را از یک وب سایت نمونه مانند سایت بانک پاسارگاد نمایش داده ام.
مراحل زیر را به ترتیب انجام دهید تا فایل certificate دانلود گردد برای این منظور من از Firefox استفاده کرده ام.
سایت بانک پاسارگاد برای چک کردن وضعیت پرداخت: https://fanapepay.bpi.ir/checktransactionresult.aspx

پس از ذخیره فایل به مسیر jdk مربوط به middleware home بروید در کامپیوتر من این مسیر معادل D:\Oracle\Middleware\jdk160_24\bin
و فایل گرفته شده pasargad.pem را در آن فلدر ذخیره نمایید.
سپس به command prompt رفته و کدهای زیر را به ترتیب اجرا نمایید.

در این مرحله کلمه عبور برابر است با:DemoTrustKeyStorePassPhrase

در این مرحله برای سوال پرسیده شده کلمه yes را وارد نمایید.

حال وب لاجیک به راحتی میتواند به سابت SSL متصل گردد.
کد ارسال و نمونه برنامه در پیوست وجود دارد.

نمونه کد نوشته شده در managed bean برای ارسال کد به سایت پاسارگاد و خواندن جواب بازگشت

package view;<br />
import java.io.BufferedReader;<br />
import java.io.DataOutputStream;<br />
import java.io.InputStreamReader;<br />
import java.net.HttpURLConnection;<br />
import java.net.URL;</p>
<p>import java.security.cert.X509Certificate;</p>
<p>import javax.net.ssl.HttpsURLConnection;<br />
import javax.net.ssl.SSLContext;<br />
import javax.net.ssl.TrustManager;<br />
import javax.net.ssl.X509TrustManager;</p>
<p>public class MyClass {</p>
<p>private final String USER_AGENT = "Mozilla/5.0";</p>
<p>public static void main(String[] args) throws Exception {</p>
<p>MyClass http = new MyClass();</p>
<p>System.out.println("\nTesting 1 - Send Https POST request");<br />
http.postAction();<br />
System.out.println("\nTesting 2 - After Send Https POST request");</p>
<p>}</p>
<p>public String postAction() throws Exception {<br />
// Create a trust manager that does not validate certificate chains<br />
TrustManager[] trustAllCerts = new TrustManager[]{<br />
new X509TrustManager() {<br />
public java.security.cert.X509Certificate[] getAcceptedIssuers() {<br />
return null;<br />
}<br />
public void checkClientTrusted(<br />
java.security.cert.X509Certificate[] certs, String authType) {<br />
}<br />
public void checkServerTrusted(<br />
java.security.cert.X509Certificate[] certs, String authType) {<br />
}<br />
}<br />
};</p>
<p>// Install the all-trusting trust manager<br />
try {<br />
SSLContext sc = SSLContext.getInstance("SSL");<br />
sc.init(null, trustAllCerts, new java.security.SecureRandom());<br />
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());<br />
} catch (Exception e) {<br />
System.out.println(e.getMessage());<br />
e.printStackTrace();<br />
}<br />
String url = "https://fanapepay.bpi.ir/checktransactionresult.aspx";<br />
URL obj = new URL(url);<br />
weblogic.net.http.SOAPHttpsURLConnection con = (weblogic.net.http.SOAPHttpsURLConnection) obj.openConnection();</p>
<p>//add reuqest header<br />
con.setRequestMethod("POST");<br />
con.setRequestProperty("User-Agent", USER_AGENT);<br />
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");</p>
<p>String urlParameters ="invoiceUID=6352140483062587301";</p>
<p>// Send post request<br />
con.setDoOutput(true);<br />
DataOutputStream wr = new DataOutputStream(con.getOutputStream());<br />
wr.writeBytes(urlParameters);<br />
wr.flush();<br />
wr.close();</p>
<p>int responseCode = con.getResponseCode();<br />
System.out.println("\nSending 'POST' request to URL : " + url);<br />
System.out.println("Post parameters : " + urlParameters);<br />
System.out.println("Response Code : " + responseCode);</p>
<p>BufferedReader in = new BufferedReader(<br />
new InputStreamReader(con.getInputStream()));<br />
String inputLine;<br />
StringBuffer response = new StringBuffer();</p>
<p>while ((inputLine = in.readLine()) != null) {<br />
response.append(inputLine);<br />
}<br />
in.close();</p>
<p>//print result<br />
System.out.println(response.toString());<br />
return null;<br />
}<br />
}

firefox-step1.png

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

firefox-step2.png

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

%D9%84%DB%8C%D8%B3%D8%AA %D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA - نحوه اتصال وب لاجیک به سایتهایی که SSL هستند

خواندن بیشتر
royal visionنحوه اتصال وب لاجیک به سایتهایی که SSL هستند

ساخت فایل zip در داخل برنامه جاوا zip file build in java adf

ساخت فایل zip در داخل برنامه جاوا zip file build in java adf

از کد زیر میتوانید برای ساخت فایل zip استفاده نمایید.

package test;</p>
<p>import java.io.File;<br />
import java.io.FileInputStream;<br />
import java.io.FileNotFoundException;<br />
import java.io.FileOutputStream;<br />
import java.io.IOException;<br />
import java.util.zip.ZipEntry;<br />
import java.util.zip.ZipOutputStream;</p>
<p>public class ZipFiles {</p>
<p>public static void main(String[] args) {</p>
<p>try {<br />
FileOutputStream fos = new FileOutputStream("atest.zip");<br />
ZipOutputStream zos = new ZipOutputStream(fos);</p>
<p>String file1Name = "file1.txt";<br />
String file2Name = "file2.txt";<br />
String file3Name = "folder/file3.txt";<br />
String file4Name = "folder/file4.txt";<br />
String file5Name = "f1/f2/f3/file5.txt";</p>
<p>addToZipFile(file1Name, zos);<br />
addToZipFile(file2Name, zos);<br />
addToZipFile(file3Name, zos);<br />
addToZipFile(file4Name, zos);<br />
addToZipFile(file5Name, zos);</p>
<p>zos.close();<br />
fos.close();</p>
<p>} catch (FileNotFoundException e) {<br />
e.printStackTrace();<br />
} catch (IOException e) {<br />
e.printStackTrace();<br />
}</p>
<p>}</p>
<p>public static void addToZipFile(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException {</p>
<p>System.out.println("Writing '" + fileName + "' to zip file");</p>
<p>File file = new File(fileName);<br />
FileInputStream fis = new FileInputStream(file);<br />
ZipEntry zipEntry = new ZipEntry(fileName);<br />
zos.putNextEntry(zipEntry);</p>
<p>byte[] bytes = new byte[1024];<br />
int length;<br />
while ((length = fis.read(bytes)) &gt;= 0) {<br />
zos.write(bytes, 0, length);<br />
}</p>
<p>zos.closeEntry();<br />
fis.close();<br />
}</p>
<p>}
خواندن بیشتر
royal visionساخت فایل zip در داخل برنامه جاوا zip file build in java adf

نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

نحوه استفاده از کامپوننت af:listView برای نمایش رکوردهای یک ViewObject بصورت یک لیست که مشابه به اندروید و اپل باشد در این حالت با اسکرول صفحه رکورد های بعدی را میبیند.

List View – Cool Looking Component for Collections post by:http://andrejusb.blogspot.com

I’m very excited about ADF release, it brings new freshness and coolness feeling to ADF. ADF Faces runtime performance seems to be incomparable faster and much more responsive comparing to previous ADF 11g R1 and even ADF 11g R2 releases. This gives good hopes to expect the same improvements in ADF 12c. There is new ADF Faces component introduced – List View. You can think about it as about much more liberal ADF Faces table component. List View renders data collections but there is much more control and flexibility how data collection is presented visually. If you need to render strict tabular data – ADF Faces table is the most suitable, List View is for something less structured. We could achieve up till now similar layout as List View with custom implementation using ADF Faces iterators or for each tags. Of course it is much easier now to use out of the box List View tag – Displaying a Collection in a List.

 

Here you can see fragment structure for my sample application with List View usage – ListViewApp.zip:

1 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

There are two types of List View implemented here – simple and hierarchical one. Simple List View renders collection in a list, there is option to load more rows from the collection on demand. Hierarchical List View renders Department – Employees master detail data:

2 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

Simple list is configured with the same property values as regular ADF Faces table:

3 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

Collection row is rendered within List View using List Item tag – this is where actual output or input ADF Faces component is implemented:

4 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

List View with editable popup functionality – launched from Edit button. Edited data is synchronized with data rendered in List View immediately:

5 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

Hierarchical List View is configured with the same properties as regular ADF Faces tree would be configured – pointing to treeModel instead of collectionModel as for the ADF Faces table. There is groupHeaderStamp facet – it allows to render data grouping:

6 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

Second level data is rendered under List Item tag:

7 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

In the page definition, there is regular tree collection definition as usual:

8 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

Hierarchical List View provides really good view of hierarchical data and it renders fast. Here viewing employees by departments:

9 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

One more small thing: I noticed in PS6 after session timeout – screen becomes black, looks good:

10 - نحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل
خواندن بیشتر
royal visionنحوه استفاده از af:listView زمانیکه جدول داریم، بهترین کامپوننت برای فضای موبایل و تبلت چیدمان صفحه شبیه به اندروید و اپل

نحوه استفاده از fileDownloadActionListener برای دانلود کردن فایل در داخل Oracle ADF (گرفتن پیوست و attachment)

برای دانلود کردن فایل در داخل برنامه از کدهای زیر میتوانید استفاده نمایید.  کد در سمت ui به شکل زیر است.

<!--
<af:panelFormLayout maxColumns="2" rows="1">
<af:forEach items="#{viewScope.inboxBean.attachment}" var="attach">
<af:commandImageLink icon="/images/attach.png" text="#{attach.name}" id="cl1">
<af:setActionListener from="#{attach.name}" to="#{viewScope.inboxBean.selectedFile}"/>
<af:fileDownloadActionListener filename="#{attach.name}" method="#{viewScope.inboxBean.downloadFile}"/>
</af:commandImageLink>
<af:spacer height="10" id="s1"/>
</af:forEach>
</af:panelFormLayout>
--><br />

در سمت manged bean که در اینجا downloadFile نام دارد کد زیر قراردارد. در کد زیر فرض شده است که فایلی که کاربر درخواست کرده است یک فایل zip است برای همین از zipfile استفاده شده است در غیر اینصورت به راحتی محتوای فایل خوانده شده و در IU نوشته میگردد.

public void downloadFile(FacesContext facesContext,<br />
OutputStream outputStream) {</p>
<p>Row current= JSFUtils.getCurrentRow("myFilesViewIterator");<br />
File zipFile=new File(current.getAttribute("filePath")+"\\"+current.getAttribute("fileName")); //current record...<br />
BeanUtils.logInfo(InboxBean.class.getName(),"downloadFile","going to view file: "+zipFile); //log the code...<br />
ZipInputStream zin=null;<br />
FileInputStream fin=null;<br />
try {</p>
<p>fin = new FileInputStream(zipFile);<br />
zin = new ZipInputStream(fin);<br />
ZipEntry entry = null; //read the zip file...<br />
attachment= new ArrayList();<br />
while ((entry = zin.getNextEntry()) != null) {</p>
<p>if (entry.getName().endsWith(selectedFile)) {</p>
<p>InputStream is= new BufferedInputStream(zin);</p>
<p>byte [] buff= new byte[2048];<br />
int len=-1;<br />
while((len=is.read(buff))!=-1){<br />
outputStream.write(buff,0,len); //write file content to the users to see the file<br />
//outputStream.flush();<br />
}</p>
<p>}</p>
<p>}<br />
BeanUtils.logInfo(InboxBean.class.getName(),"downloadFile","file downloaded successfully in inbox: "+zipFile);<br />
} catch (UnsupportedEncodingException uee) {<br />
// TODO: Add catch code<br />
uee.printStackTrace();<br />
BeanUtils.logError(InboxBean.class.getName(),"downloadFile",uee.getMessage());<br />
} catch (FileNotFoundException fnfe) {<br />
// TODO: Add catch code<br />
fnfe.printStackTrace();<br />
BeanUtils.logError(InboxBean.class.getName(),"downloadFile",fnfe.getMessage());<br />
} catch (IOException ioe) {<br />
// TODO: Add catch code<br />
ioe.printStackTrace();<br />
BeanUtils.logError(InboxBean.class.getName(),"downloadFile",ioe.getMessage());<br />
}finally{</p>
<p>if( fin==null){<br />
try{ fin.close();<br />
}catch(Exception e){<br />
System.err.println(e);<br />
}<br />
}<br />
} // Add event code here...<br />
}
خواندن بیشتر
royal visionنحوه استفاده از fileDownloadActionListener برای دانلود کردن فایل در داخل Oracle ADF (گرفتن پیوست و attachment)

خواندن پارامتر های برنامه از web.xml (پارامتر های اولیه برنامه)

برای خواندن پرامتر های اولیه برنامه از داخل web.xml از کد زیر در جاوا استفاده نمایید. (manged bean)

FacesContext fctx = FacesContext.getCurrentInstance();<br />
ExternalContext ectx = fctx.getExternalContext();<br />
ServletContext servletContext = (ServletContext) ectx.getContext();<br />
String myContextParam = null;<br />
myContextParam = (String)servletCtx.getInitParameter(“contextparam1”);

برای قرار دادن و تعریف پارامتر در داخل web.xml از کد زیر در داخل این فایل استفاده میگردد در داخل jdeveloper وقتی روی web.xml میروید خودش  wizard برای تعریف دارد.

<!--
<context-param>
<param-name>contextparam1</param-name>
<param-value>value1</param-value>
</context-param>
-->

اگر در داخل UI و صفحات هستید با استفاده از EL میتوانید پارامتر های را بخوانید.

#{initParam.contextparam1}
خواندن بیشتر
royal visionخواندن پارامتر های برنامه از web.xml (پارامتر های اولیه برنامه)