Here are good links on configuring SSL in WebLogic:
http://wls4mscratch.wordpress.com/category/security/
http://download.oracle.com/docs/cd/E14571_01/web.1111/b32511/setup_config.htm
Wednesday, August 18, 2010
Saturday, August 14, 2010
More on WebService Development using JAX-WS
For new project, I have to build an SOA layer in front of an engine that serves offers. The SOA layer will communicate via webservice as well.
Here's how I did it:
1. In eclipse, create a Dynamic Webcontent Project as a placeholder for the code stubs I am going to generate from my WSDL:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9h9uYOaDnWAAZnvfXk4NGLdbHu-v5lfie0e2aUoIY0DwsbEx8FnoNqyWfjwUnK_K2G8rNTShrVrlC5GgkOV7Gm55i15lsdI5l9xBdS4rSIRCBnM-B8xV0lN0BUUCR769PtXd_f1JnYaM/s400/1.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-ZT_B1u5AaeRZSJPug1Nl7RSvdmUMO2TGxckxQVjxtXxtJzZI22Y22MlUpDI7y9AmjpW405aGGIIXxhR_BNHTFPK_DjOJ5xax2wbQc7O6TZLOzy3U68T_W2e_-7XskxnFYEnNNI8TXLE/s400/2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWzOsS1-aFPLFW0ICd3cEnz8SxtH4JEiGRADaDlH4vTVkTGSrKOgAGPoAjCo79_NTrn2mc2Ki6qU0ss7b8UbRYBJGVa-PPJHBLXrcaYPm58Jo8KalmLTfI67r6TpGIQNk5ToYjS-mt8w/s400/3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlCWK7eF36x-JGBzzpdJ4jVfjwhFAmL147b9BV2Rfbx4Urtyyd9-7f5u9CWaaJ_7dLmmFPYu6PzEI2X-ytz0QGu1wnXjMVwETWAIftFiTpsDn9DlUjlJvBF038y7YRLJk4xlN4T0oHEI/s400/4.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixrSxrkmlFO6dtz_R-qvWhL4-ufDGWUgUE0ChCXVSYlRCLUldRGqHmq0-ikpBIOfSkKaNjhSwOPucUXSNXWBsWBlbITF32_MODB7Lu8TVaBtX4sqR18NTUdmHLPvahk1MPr-0EUnP4zlg/s400/5.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzgg6JH3X4OsRpF5S8fmyz3qcwczjYNOOLde3gukwKimW-TQ25yD1sjnBJ_FH6htV7vlZ5CUTDq4VlHfjRsLvXxpMVcnv8V9wbq0MeoRb9EtCXc0Ir8HOKN3GzqN9JCxHz_Nrnm88RViQ/s400/6.png)
2. Get the WSDL and XSD files of the webservice you need to implement to the root project folder:
InteractService.wsdl
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGp5TqwHiO_MmfpAM0DnfzaL-FbiItdN7v1RxZ9xHs21BNaucvfNXa8J8YXAXeKJxf8JgvNUz9-r1SVDOgoo_gUNoDnem6chQXX6aT9ICMKM6o8oUtn36TcWRqYSRhK1xRln6et7Lio2I/s400/1a.png)
3. Use WSIMPORT to generate the code stubs. Eg. command I used:
"C:\Program Files (x86)\Java\jdk1.6.0_21\bin\wsimport" InteractService.wsdl -s src -d build\classes
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9XPrA7VqP_e9v8Wv4oIC1HWIUB3zsud-65O4TSfOGM3hxmY3N-BrBq1AX_n6yVMnchyphenhyphenQKCBcGCQS-y8S2pDG3U8udjJzBnGRSqGe1tzqHDj_K5oVDMIDx8o08HmR2ouTCNmnjXvPQpjo/s400/1b.png)
4. Go back to Eclipse and refresh the project and you can see the source files generated:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUB3MD0z2mH5dm0LyZaNlZC1jUslG5U1ZdBjBOGaEUNrQ5gwC6J2u4vnKzXDtpkieSelXihCtoiJbjvRbB-vKLwTSt4TdCJzQXd2E_8kORNuOybXvVpSu4jVUjEFXXT9aGrPtXNyt-v0/s400/1c.png)
5. In eclipse, create new a Dynamic Webcontent Project for my SOA layer:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxHlVwrwTtibdS6sPefVFVYGbGfz03YW_BksoEez5ZOyacKMnZB_LpGKhbO3fXEwDDjhZE-8XXnkdusobu27XLSI2Y_oKiAFO-LOoEE0qcl6olUqrwUqVM8PKuakEfJY_C81g7IB8Slpw/s400/1d.png)
6. Create and empty package for it:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3Py6RPhE2CMeS0bH8_39xOEg0dhNy1FKXD8xirQPG1sBu1f4U-4-QFIJOpfCmKp-SHoKUGFnck4hfX3hSMD8MM8c4SRST41Otwi36exLhA-pP3wAOkXcFhMxUxa9NgJIy_kJWdkNgZQY/s400/1e.png)
7. Create my interface and implementation classes for the SOA:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDipIvLyMcOlkmW1u_ml6dMIfKkAqWg9_nQB0S4rTrP6mPcgxSikKCfxyhxa9ewg68D_2izOrCehxKDFnYeDg8C6bBQsEsCj2VWrCj6oMxc9fIZQhsEuhHa3jo-ErpkcRN_AnBbMujQis/s400/1f.png)
8. Copy the required classes especially those that passes the objects as request and response:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja7tVVzdO1lw4RZH183zWbdaShkfhm4tUsLlGRT8LDUbuyY_Zre80E5q5cIDplcNGz8iGpGKOd3L7TT_3ZF2yRbPq_CNT36l_qjHhPr6a_5k0fVaoE7nt8orVNNwotTLZx9IWXRgQ2sY4/s400/2a.png)
9. Import the right package:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3KvqU7j_aJxqzX4OSDLJpwHJ41Q9xPfkXyzT2l_4TfWpQ98cEB7ZQP3f3FqzpCjOq8bnZ8i3bkDcYfGx79_jMLVX7djmRWFw880I0jWHeLYQUxKX1PVdLFLx6GMwFYbpK5D2kpN7buqE/s400/2b.png)
10. Ensure all the annotations are correct:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZA8ontXWnUZJG8h2ycMM0HtI4Rlr3UKCiPNU3cri_V8XkBmUjBayRSwX5cM6cmfY8X0RR2tyfe0mMYhVV0_fMCQxJutg8ad6W2p0AYy7lo7Rk-tZo0rzlxE2XHZTLrRbXEKtHLf_E54/s400/2c.png)
11. Build the project and ensure the classes are generated:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1X9lWy3KR8Vs1SRysbL7keaywQmbNZhhHV0fgwQ0_dAmiSEEazREMxdUEAxpOWwUCMQIb8XLVvkpml1rLOGIEG5SqupfUPpZj39kWpWQQulwHFj1O9FJKjLgu9ItNOi2N90s51_-758o/s400/2d.png)
12. Generate the WSDL and artifacts using the following command:
"C:\Program Files (x86)\Java\jdk1.6.0_21\bin\wsgen" -cp ../build/classes -r ../WebContent -s . -d ../build/classes -keep com.singtel.ma.rto.RTOImpl -wsdl
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiyBYgRcn6qGkPy5ii7c4ZO6dX4HKkhLjOH1FRrdnI85Ks6Z3hP-pFASNnH2opRFolKldPB2mQll4hLYbZTEFb13NWm5TaoGZXRzAoAK3xLQXFIVO0uPtpHTD-pLzR20x8RZtMQBMP_Y/s400/2e.png)
13. Check that the classes are generated:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCppAtYXwYXhdxYgh9FD_29dUwPp-h8fxxqQQNL4e9uAoO3zAmxV9EosGxsyM2p3-JZ-83ZS52-Vnfe0XC0lEXn8yoTr9xyDYkmwf4hqnfIurTIoguCGBYfivitxtJi_Js48Qkp7eZeqU/s400/3a.png)
14. Create the war file for deployment:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5e81IOLpLKkSbkhBlSDj_ogWMWRF_9MS5us2_F-z0QyDhN3diygQc0l8aRDMGZcH47SHfkYNNzFC0lianx1IE0NQV8sBODAKsoDoYMtz5hDPulFBP4ZIgbRaBqy6ppb97g5xFfbYh0oI/s400/3b.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUGxnfG5XnH2QQb0KndtMcedbq7sbZ9R-a_mGL17b3QPtHQH2r3iiXXBBZtDxkO9dDWn4YCUyTDiiW2pqZIQRe42IoeEwjiec2SSwLJtUcTOFLK1Jzw9x0ArQ-tUy590HbPDaxffCAvEc/s400/3c.png)
15. Deploy on Glassfish:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9_DRBLInyfC3Celh0CizRk3UiPipBfRjJMU5WYr4-6i_z66QzbJe8Iayk3TZ4_aManAuWI7aQaGQ-Zj6gjcrayuynyDkcuSwr8Qx-dNu4ZmbKSxV1NYdvjGwWPR99_8A2QitaWWyiCr4/s400/3d.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkjme2H9ow6SW_cOqvu_JGf-YG5Jm6h3zNIxY7lR2KS9hYV6rme7aW6qOkZG_w7A8_fGRetV9oOxX2z-dy0CU7fBOkh75VN9qBjIPR7w6Pvjx9X4wqUOvpL25f9lT3XJgV9S5dJRBcwM4/s400/3e.png)
16. Check that the Webservice is registered:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmj5lcYPlnSj8IKc1nDkR-5Hh1yh4z13Q32sHn_X9fDAiNw6iqnO3FU1IW5N8mFhcOq8FgdDdkZYTFHHh-D44E7lo3qspgHqjMixnm-0c7fec6NzZ0v8nENsqG7tUzP64KsTW1sW5dHJc/s400/4a.png)
17. And the WSDL can be seen:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht4_kHlXRhyphenhyphenjRf85lMHJHV9yYYvrM4xLM2RsjnOqTtSTK4VvDgQ-5sLujAq4COMcREPZydF5sHTDc_mJ1W1jrY3K6156s2uTq0sPM8ds_P4NaBVsmyLpZDjERCrC5I6gh3PCoyIjwPqMw/s400/4b.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_a6NU29KcBEU2Rze_UviY7NnggPeQXZh5sZFbkyh6HSyX15SVRjSDMSW_qftq5oYTH9efThd7tW4BpCmyZ_wRoxITtRb7_jgCWm3Xnd3Chk-DugQgdGNuGCqGpBk4FSsRU94A0yeV69A/s400/4c.png)
18. And there is a test inteface:
Here's how I did it:
1. In eclipse, create a Dynamic Webcontent Project as a placeholder for the code stubs I am going to generate from my WSDL:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9h9uYOaDnWAAZnvfXk4NGLdbHu-v5lfie0e2aUoIY0DwsbEx8FnoNqyWfjwUnK_K2G8rNTShrVrlC5GgkOV7Gm55i15lsdI5l9xBdS4rSIRCBnM-B8xV0lN0BUUCR769PtXd_f1JnYaM/s400/1.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-ZT_B1u5AaeRZSJPug1Nl7RSvdmUMO2TGxckxQVjxtXxtJzZI22Y22MlUpDI7y9AmjpW405aGGIIXxhR_BNHTFPK_DjOJ5xax2wbQc7O6TZLOzy3U68T_W2e_-7XskxnFYEnNNI8TXLE/s400/2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWzOsS1-aFPLFW0ICd3cEnz8SxtH4JEiGRADaDlH4vTVkTGSrKOgAGPoAjCo79_NTrn2mc2Ki6qU0ss7b8UbRYBJGVa-PPJHBLXrcaYPm58Jo8KalmLTfI67r6TpGIQNk5ToYjS-mt8w/s400/3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlCWK7eF36x-JGBzzpdJ4jVfjwhFAmL147b9BV2Rfbx4Urtyyd9-7f5u9CWaaJ_7dLmmFPYu6PzEI2X-ytz0QGu1wnXjMVwETWAIftFiTpsDn9DlUjlJvBF038y7YRLJk4xlN4T0oHEI/s400/4.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixrSxrkmlFO6dtz_R-qvWhL4-ufDGWUgUE0ChCXVSYlRCLUldRGqHmq0-ikpBIOfSkKaNjhSwOPucUXSNXWBsWBlbITF32_MODB7Lu8TVaBtX4sqR18NTUdmHLPvahk1MPr-0EUnP4zlg/s400/5.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzgg6JH3X4OsRpF5S8fmyz3qcwczjYNOOLde3gukwKimW-TQ25yD1sjnBJ_FH6htV7vlZ5CUTDq4VlHfjRsLvXxpMVcnv8V9wbq0MeoRb9EtCXc0Ir8HOKN3GzqN9JCxHz_Nrnm88RViQ/s400/6.png)
2. Get the WSDL and XSD files of the webservice you need to implement to the root project folder:
InteractService.wsdl
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGp5TqwHiO_MmfpAM0DnfzaL-FbiItdN7v1RxZ9xHs21BNaucvfNXa8J8YXAXeKJxf8JgvNUz9-r1SVDOgoo_gUNoDnem6chQXX6aT9ICMKM6o8oUtn36TcWRqYSRhK1xRln6et7Lio2I/s400/1a.png)
3. Use WSIMPORT to generate the code stubs. Eg. command I used:
"C:\Program Files (x86)\Java\jdk1.6.0_21\bin\wsimport" InteractService.wsdl -s src -d build\classes
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9XPrA7VqP_e9v8Wv4oIC1HWIUB3zsud-65O4TSfOGM3hxmY3N-BrBq1AX_n6yVMnchyphenhyphenQKCBcGCQS-y8S2pDG3U8udjJzBnGRSqGe1tzqHDj_K5oVDMIDx8o08HmR2ouTCNmnjXvPQpjo/s400/1b.png)
4. Go back to Eclipse and refresh the project and you can see the source files generated:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUB3MD0z2mH5dm0LyZaNlZC1jUslG5U1ZdBjBOGaEUNrQ5gwC6J2u4vnKzXDtpkieSelXihCtoiJbjvRbB-vKLwTSt4TdCJzQXd2E_8kORNuOybXvVpSu4jVUjEFXXT9aGrPtXNyt-v0/s400/1c.png)
5. In eclipse, create new a Dynamic Webcontent Project for my SOA layer:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxHlVwrwTtibdS6sPefVFVYGbGfz03YW_BksoEez5ZOyacKMnZB_LpGKhbO3fXEwDDjhZE-8XXnkdusobu27XLSI2Y_oKiAFO-LOoEE0qcl6olUqrwUqVM8PKuakEfJY_C81g7IB8Slpw/s400/1d.png)
6. Create and empty package for it:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3Py6RPhE2CMeS0bH8_39xOEg0dhNy1FKXD8xirQPG1sBu1f4U-4-QFIJOpfCmKp-SHoKUGFnck4hfX3hSMD8MM8c4SRST41Otwi36exLhA-pP3wAOkXcFhMxUxa9NgJIy_kJWdkNgZQY/s400/1e.png)
7. Create my interface and implementation classes for the SOA:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDipIvLyMcOlkmW1u_ml6dMIfKkAqWg9_nQB0S4rTrP6mPcgxSikKCfxyhxa9ewg68D_2izOrCehxKDFnYeDg8C6bBQsEsCj2VWrCj6oMxc9fIZQhsEuhHa3jo-ErpkcRN_AnBbMujQis/s400/1f.png)
8. Copy the required classes especially those that passes the objects as request and response:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja7tVVzdO1lw4RZH183zWbdaShkfhm4tUsLlGRT8LDUbuyY_Zre80E5q5cIDplcNGz8iGpGKOd3L7TT_3ZF2yRbPq_CNT36l_qjHhPr6a_5k0fVaoE7nt8orVNNwotTLZx9IWXRgQ2sY4/s400/2a.png)
9. Import the right package:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3KvqU7j_aJxqzX4OSDLJpwHJ41Q9xPfkXyzT2l_4TfWpQ98cEB7ZQP3f3FqzpCjOq8bnZ8i3bkDcYfGx79_jMLVX7djmRWFw880I0jWHeLYQUxKX1PVdLFLx6GMwFYbpK5D2kpN7buqE/s400/2b.png)
10. Ensure all the annotations are correct:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZA8ontXWnUZJG8h2ycMM0HtI4Rlr3UKCiPNU3cri_V8XkBmUjBayRSwX5cM6cmfY8X0RR2tyfe0mMYhVV0_fMCQxJutg8ad6W2p0AYy7lo7Rk-tZo0rzlxE2XHZTLrRbXEKtHLf_E54/s400/2c.png)
11. Build the project and ensure the classes are generated:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1X9lWy3KR8Vs1SRysbL7keaywQmbNZhhHV0fgwQ0_dAmiSEEazREMxdUEAxpOWwUCMQIb8XLVvkpml1rLOGIEG5SqupfUPpZj39kWpWQQulwHFj1O9FJKjLgu9ItNOi2N90s51_-758o/s400/2d.png)
12. Generate the WSDL and artifacts using the following command:
"C:\Program Files (x86)\Java\jdk1.6.0_21\bin\wsgen" -cp ../build/classes -r ../WebContent -s . -d ../build/classes -keep com.singtel.ma.rto.RTOImpl -wsdl
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiyBYgRcn6qGkPy5ii7c4ZO6dX4HKkhLjOH1FRrdnI85Ks6Z3hP-pFASNnH2opRFolKldPB2mQll4hLYbZTEFb13NWm5TaoGZXRzAoAK3xLQXFIVO0uPtpHTD-pLzR20x8RZtMQBMP_Y/s400/2e.png)
13. Check that the classes are generated:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCppAtYXwYXhdxYgh9FD_29dUwPp-h8fxxqQQNL4e9uAoO3zAmxV9EosGxsyM2p3-JZ-83ZS52-Vnfe0XC0lEXn8yoTr9xyDYkmwf4hqnfIurTIoguCGBYfivitxtJi_Js48Qkp7eZeqU/s400/3a.png)
14. Create the war file for deployment:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5e81IOLpLKkSbkhBlSDj_ogWMWRF_9MS5us2_F-z0QyDhN3diygQc0l8aRDMGZcH47SHfkYNNzFC0lianx1IE0NQV8sBODAKsoDoYMtz5hDPulFBP4ZIgbRaBqy6ppb97g5xFfbYh0oI/s400/3b.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUGxnfG5XnH2QQb0KndtMcedbq7sbZ9R-a_mGL17b3QPtHQH2r3iiXXBBZtDxkO9dDWn4YCUyTDiiW2pqZIQRe42IoeEwjiec2SSwLJtUcTOFLK1Jzw9x0ArQ-tUy590HbPDaxffCAvEc/s400/3c.png)
15. Deploy on Glassfish:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9_DRBLInyfC3Celh0CizRk3UiPipBfRjJMU5WYr4-6i_z66QzbJe8Iayk3TZ4_aManAuWI7aQaGQ-Zj6gjcrayuynyDkcuSwr8Qx-dNu4ZmbKSxV1NYdvjGwWPR99_8A2QitaWWyiCr4/s400/3d.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkjme2H9ow6SW_cOqvu_JGf-YG5Jm6h3zNIxY7lR2KS9hYV6rme7aW6qOkZG_w7A8_fGRetV9oOxX2z-dy0CU7fBOkh75VN9qBjIPR7w6Pvjx9X4wqUOvpL25f9lT3XJgV9S5dJRBcwM4/s400/3e.png)
16. Check that the Webservice is registered:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmj5lcYPlnSj8IKc1nDkR-5Hh1yh4z13Q32sHn_X9fDAiNw6iqnO3FU1IW5N8mFhcOq8FgdDdkZYTFHHh-D44E7lo3qspgHqjMixnm-0c7fec6NzZ0v8nENsqG7tUzP64KsTW1sW5dHJc/s400/4a.png)
17. And the WSDL can be seen:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht4_kHlXRhyphenhyphenjRf85lMHJHV9yYYvrM4xLM2RsjnOqTtSTK4VvDgQ-5sLujAq4COMcREPZydF5sHTDc_mJ1W1jrY3K6156s2uTq0sPM8ds_P4NaBVsmyLpZDjERCrC5I6gh3PCoyIjwPqMw/s400/4b.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_a6NU29KcBEU2Rze_UviY7NnggPeQXZh5sZFbkyh6HSyX15SVRjSDMSW_qftq5oYTH9efThd7tW4BpCmyZ_wRoxITtRb7_jgCWm3Xnd3Chk-DugQgdGNuGCqGpBk4FSsRU94A0yeV69A/s400/4c.png)
18. And there is a test inteface:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3De-4uxBt2PbGIM8Zbnw4qcpNh4kmqZ4kQG25eSlk5AicUrS-28KRWoWsLIlfgB5_h808a-V8XilTQfU_r8RlJJF_VcLq1IBsV482x4qaZEgnnNIbCX1pLrXNUK9jHvvapkc8t8FVuiQ/s400/4d.png)
Subscribe to:
Posts (Atom)