1
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Hand-on Exercises
Java Web Services and SOA
Using NetBeans IDE with Open ESB
GlassFish Server and MySQL Database
Assoc.Prof.Dr. Thanachart Numnonda and
Assist.Prof.Dr. Thanisa Kruawaisayawan
April 2013
2
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercises Exercise 1: Calling Existing Web Services 3 Exercise 2: Java Web Services 11 Exercise 3: Axis2 Web Services 16 Exercise 4: āļāļēāļĢāđāļāļāļĄāļāļāļāļ MySQL Database 22 Exercise 5: Java Web Services from Session Bean (1) 29 Exercise 6: Java Web Services from Session Bean (2) 40 Exercise 7: RESTful Web Services 53 Exercise 8: Google Map Web Services 57 Exercise 9: āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļ§āļāđāļāļāļāļāļāļāļāļēāļāļāļāļĄāļĨ MongoDB 64 Exercise 10: Developing a Simple Synchronous BPEL Program 72 Exercise 11: BPEL for Writing to File 82 Exercise 12: Simple BPEL Invoking Web Services 95
3
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 1: Calling Existing Web Services
āđāļāļāļāļāļŦāļāđāļāļāļāļāđāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļāļāđāļĢāļĒāļāđāļ Web Services āļāļĄāļāļĒāđāļĨāļ§ āļāļāļāļ°āđāļĨāļāļāļĄāļē 3 āļāļĢāļāļēāļĢāļāļāļ
āļāļēāļĢāļāļāļĨāļāļāļ 1 āļāļāļĢāļēāđāļĨāļāđāļāļĨāļĒāļāđāļāļāļāļĢāļēāļĢāļ°āļŦāļ§āļēāļāļāļĢāļ°āđāļāļĻ
āļāļēāļĢāļāļāļĨāļāļāļ 2 āđāļĨāļāļāļĢāļ°āļāļēāļāļ§āļāļĢāļ°āļāļēāļāļāļāļāļ āļāļĢāļĄāļŠāļĢāļĢāļāļēāļāļĢ
āļāļēāļĢāļāļāļĨāļāļāļ 3 āļĢāļēāļāļēāļāļēāļĄāļāļĨāļēāļŠāļāļāļāļ āļāļāļ.
āđāļāļĒāļāļ°āđāļ soapUI, NetBeans āđāļĨāļ° GlassFish Server
āļāļēāļĢāļāļāļĨāļāļāļ 1 āļāļēāļĢāļāļāļŠāļāļ Web Services āđāļāļĒāđāļ soapUI
āđāļāļĢāđāļāļĢāļĄ soapUI āđāļāļāđāļāļĢāđāļāļĢāļĄ Open Source āļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāđāļāļĢāļāļāļĄāļāđāļāļāļēāļĢāļāļāļŠāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠ
āļāļāđāļāļāļāļāļĒāļĄāđāļāļāļāļāļĒāļēāļāļāļ§āļēāļāļāļ§āļēāļ āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļēāļ§āļāđāļŦāļĨāļāđāļāļĢāđāļāļĢāļĄāļāđāļāļ www.soapui.org
āđāļāļĒāđāļĄāļāļāļāļāļāđāļĨāļ§ āđāļŦāļāļēāļāļēāļĢāļāļāļŠāļāļāđāļĢāļĒāļāđāļāđāļ§āļāđāļāļāļĢāļ§āļŠ āļāļēāļĄāļāļāļāļāļāļāļāļ
1. āđāļāđāļāļĢāđāļāļĢāļĄ soapUI āđāļĨāļāļāđāļĄāļ File > New soapUI Project 2. āđāļāļāļāļ Initial WSDL āđāļŦāđāļŠ
http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āļāļāđāļŠāļāļāđāļāļĢāļāļ 1
4
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 1 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ soapUI Project āđāļ soapUI
3. āļāļēāļāļāļāļāļāļāļĄ OK āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļāļāļāļāļĄāļē 4. āļāļĒāļēāļĒāđāļŦāļāļ ConversionRate āļāļāļ CurrencyConvertorSoap āđāļĨāļ§āļāļāđāļāļĨāļāļĨāļāļ Request1 5. āđāļāļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāļāļēāļāļāļ SOAP Request āļāļāļ°āļŠāļāđāļ āđāļŦāđāļŠāļāļēāļāļāļ
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/">
<soapenv:Header/> <soapenv:Body> <web:ConversionRate> <web:FromCurrency>USD</web:FromCurrency> <web:ToCurrency>THB</web:ToCurrency> </web:ConversionRate> </soapenv:Body> </soapenv:Envelope>
5
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āļāļāļāļĄ Submit request (āđāļāļĢāļāļāļŦāļĄāļēāļĒāļŠāđāļāļĒāļ§) āļāļāļĒāļāļēāļāļāļēāļĒāļāļ āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļ SOAP Response āļāļĨāļāļĄāļēāļāļāđāļŠāļāļāļāļ§āļāļĒāļēāļāđāļāļāļāļ
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body> <ConversionRateResponse xmlns="http://www.webserviceX.NET/"> <ConversionRateResult>31.403/ConversionRateResult> </ConversionRateResponse> </soap:Body> </soap:Envelope>
āļāļēāļĢāļāļāļĨāļāļāļ 2
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļŠāļāļāļāļēāļĢāđāļāļāļēāļ SoupUI āļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāļāđāļāđāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāđāļĨāļāļāļĢāļ°āļāļēāļāļ§āļāļĢāļ°āļāļēāļāļ āļ§āļēāļāļāļāļāļāļŦāļĢāļāđāļĄ āļāļēāļĄāļāļāļāļāļāļāļāļ
1. āđāļāđāļāļĢāđāļāļĢāļĄ soapUI āđāļĨāļāļāđāļĄāļ File > New soapUI Project 2. āđāļāļāļāļ Initial WSDL āđāļŦāđāļŠ
https://rdws.rd.go.th/ServiceRD/CheckTINPINService.asmx?WSDL āđāļĨāļ§āļāļ OK
3. āļāļĒāļēāļĒāđāļŦāļāļ ServicePIN āđāļ CheckTINPINServiceSoap āđāļĨāļ§āļāļāđāļāļĨāļāļĨāļāļ Request1 4. āđāļāļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāļāļēāļāļāļ SOAP Request āđāļŦāļāļēāļāļēāļĢāđāļŠāļāļēāļāļāļ username āđāļĨāļ° password
āđāļāļ anonymous āđāļĨāļ°āđāļŠāđāļĨāļāļāļĢāļ°āļāļēāļāļ§āļāļĢāļ°āļāļēāļāļāļāļāļāļāļāļēāļĢāļāļāļŠāļāļ āđāļāļĒāđāļŠāļāļāļāļ§āļāļĒāļēāļāđāļāļāļāļ :
<chec:ServicePIN> <!--Optional:--> <chec:username>anonymous</chec:username> <!--Optional:--> <chec:password>anonymous</chec:password> <!--Optional:--> <chec:PIN>3605699082386</chec:PIN> </chec:ServicePIN>
:
5. āļāļāļāļĄ submit request (āđāļāļĢāļāļāļŦāļĄāļēāļĒāļŠāđāļāļĒāļ§) āļāļāļĒāļāļēāļāļāļēāļĒāļāļ āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļ SOAP Response āļāļĨāļāļĄāļēāļāļāļāļ§āļāļĒāļēāļ
:
6
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns=""> <CheckingResult diffgr:id="CheckingResult1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> <ID>3605699082386</ID> <DigitOk>true</DigitOk> </CheckingResult> <Message diffgr:id="Message1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> <Code>W00000</Code>
<Description>āļāļēāļĢāļāļēāļāļēāļāđāļŠāļĢāļāļŠāļĄāļāļĢāļ <br> Success "</Description> </Message> </NewDataSet> </diffgr:diffgram>
:
āļāļēāļĢāļāļāļĨāļāļāļ 3
āļāļēāļĢāļāļāļāļē Web Service Client
āđāļāļāļāļāļŦāļāļāļāļ°āļŠāļĢāļēāļ Web Application Project āļāļāđāļŦāļĄ āđāļāļāđāļāđāļāļāļēāļĢāđāļĢāļĒāļ Web Services āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java Web āđāļĨāļ° Projects āđāļāļ Web
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ ExistingWSDemo āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ folder
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļ Project āđāļ§ āđāļĨāļ§āļāļ Next 4. āđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āļāļēāļŦāļāļ Jave EE Version: āđāļāļ Java EE 6 Web
āļāļāđāļŠāļāļāđāļāļĢāļāļ 2 āđāļĨāļ§āļāļ Finish
7
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āđāļŠāļāļāđāļāļāļ°āļĨāļāļ New Web Application
5. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ ExistingWSDemo āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > OtherâĶ āđāļŦāđāļĨāļāļ Categories āđāļāļ
Web Services āđāļĨāļ° File Types āđāļāļ Web Service Client āđāļĨāļ§āļāļ Next 6. āđāļāđāļāļāļ°āļĨāļāļ New Web Service Client āđāļŦāđāļĨāļāļ WSDL URL: āđāļĨāļ§āđāļŠ URL āđāļāļ
http://www.pttplc.com/webservice/pttinfo.asmx?wsdl āļāļāđāļŠāļāļāđāļāļĢāļāļ 3 āđāļĨāļ§āļāļ Finish
8
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļāđāļāļāļ°āļĨāļāļ New Web Service Client 7. āđāļāļŦāļāļēāļāļēāļ Projects āļāļ°āļĄ Folder āļāļāļ Web Service References āļāļāļĄāļē 8. āļāļĨāļāļāļ§āļēāļ ExistingWSDemo āđāļĨāļ§āđāļĨāļāļ New > Servlet āļāļēāļāļāļāđāļŦāļāļēāļŦāļāļāļāļāđāļāļ PTTServlet āđāļĨāļ°
Package: āđāļāļ servlets āđāļĨāļ§āļāļ Finish 9. āļ āļēāļĒāđāļāđāļĄāļāļāļ processRequest āđāļāđāļāļĨ PTTServlet.java āđāļŦāļĨāļ sourcecode āļāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļŠāļ try
āđāļĨāļ° finally 10. āļāļĨāļāļāļ§āļēāļĢāļ°āļŦāļ§āļēāļāļāļēāļŠāļ try āđāļĨāļ° finally āđāļĨāļ§āđāļĨāļāļ Insert Code āļāļēāļāļāļāđāļŦāđāļĨāļāļ Call Web Service
Operation āļāļāđāļŠāļāļāđāļāļĢāļāļ 4
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢāđāļĢāļĒāļāđāļ operation āļāļāļ Web Service
11. āđāļĨāļāļ CurrentOilPrice āļāļāđāļŠāļāļāđāļāļĢāļāļ 5 āđāļĨāļ§āļāļ OK
9
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 5 āđāļŠāļāļāļāļēāļĢāđāļĢāļĒāļāđāļ Operation: CurrentOilPrice āļāļāļāļāļāļ.
12. āđāļāļĄ code āļ āļēāļĒāđāļāđāļĄāļāļāļ processRequest āđāļāđāļāļĨ PTTServlet.java āļāļāļ
@WebServlet(name = "PTTServlet", urlPatterns = {"/PTTServlet"}) public class PTTServlet extends HttpServlet { @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/www.pttplc.com/pttinfo.asmx.wsdl") private com.pttplc.ptt_webservice.PTTInfo service; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.print(currentOilPrice("TH")); } finally { out.close(); } } : private String currentOilPrice(java.lang.String language) { com.pttplc.ptt_webservice.PTTInfoSoap port = service.getPTTInfoSoap(); return port.currentOilPrice(language); } }
13. āļāļĨāļāļāļ§āļēāļ ExistingWSDemo āđāļĨāļ§āđāļĨāļāļ Clean and Build
10
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
14. āļāļĨāļāļāļ§āļēāļ PTTServlet.java āđāļĨāļ§āđāļĨāļāļ Run File āđāļĨāļ§āļāļ OK āļāļ°āđāļāļāļĨāļĨāļāļāđāļāļāļĢāļēāļāļēāļāļēāļĄāļāļĨāļēāļŠāļ āļāļāđāļŠāļāļāđāļāļĢāļāļ 6
āļĢāļāļ 6 āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāđāļĢāļĒāļāđāļ Web Service Operation: CurrentOilPrice āļāļāļāļāļāļ.
11
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 2: Java Web Services
āđāļāļāļāļāļŦāļāļāđāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Services āļŠāļēāļŦāļĢāļ Java EE āđāļāļĒāđāļāļāļāļāļēāļŠāļ JAX-WS āļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļē Web Services Provider āļāļ Java EE Server āļāļāļāļāļāļāļēāļŠāļ JAX-WS āļāļ°āļāļ§āļĒāļāļēāđāļŦāļāļēāļĢāļŠāļĢāļēāļāđāļĨāļ°āđāļĢāļĒāļāđāļ Web Services āļāļ§āļĒāļ āļēāļĐāļē Java āđāļāļāđāļāđāļāļāļēāļĒāļāļ āļāļēāļĢāļāļāļāļē Web Services āļāļ°āđāļāļāđāļāđāļāļāļŠāļāļāļŠāļ§āļāļāļ Web Service Requester (Client) āđāļĨāļ° Web Service Provider (Server) āļāļāļāļēāļĢāļāļāļāļē Web Service Provider āļŠāļēāļĄāļēāļĢāļāļāļēāđāļ 2 āļ§āļāļāļ
1. Web Services āļāļĢāļāļāļ Web Server āđāļāļĒāđāļ Java Servlet 2. Web Services āļāļĢāļāļāļ Application Server āđāļāļĒāđāļ Session Bean
āđāļāļāļāļāļŦāļāļāļāļ°āđāļŠāļāļāļāļāļāļāļāļāļēāļĢāđāļ NetBeans āļŠāļĢāļēāļ Web Service āļāļāļ calculateTax āđāļāļĒāđāļ Servlet āļāļāļāļ°āļĢāļāļāļĒāļāļ GlassFish Server 3.1.2 Server āđāļāļāđāļŠāļāļ Web Services āļāļēāļĢāļŠāļ SOAP message āđāļĨāļ° WSDL āļāļāļ Services
āļāļēāļĢāļāļāļāļē calculateTax Web Service
āđāļāļāļāļāļŦāļāļāļāļ°āļŠāļĢāļēāļ Web Application Project āļāļāđāļŦāļĄ āđāļāļāđāļāđāļāļāļēāļĢāđāļāļ Web Service āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java Web āđāļĨāļ° Projects āđāļāļ Web
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ TaxWSDemo āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ folder
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļ Project āđāļ§ 4. āļāļēāļāļāļāđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āļāļēāļŦāļāļ Jave EE Version: āđāļāļ Java EE 6
Web āđāļĨāļ§āļāļ Finish 5. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ TaxWSDemo āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > OtherâĶ āđāļŦāđāļĨāļāļ Categories āđāļāļ Web
Services āđāļĨāļ°āđāļĨāļāļ File Types āđāļāļ Web Service āđāļĨāļ§āļāļ Next 6. āđāļāđāļāļāļ°āļĨāļāļ New Web Service āļāļēāļŦāļāļ Web Service Name: āđāļāļ TaxService āđāļĨāļ° Package:
āđāļāļ ws āđāļĨāļ§āļāļ Finish 7. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļĢāļ°āļāļēāļĻ Web Services āļāļāļ TaxService āđāļāđāļŦāļāļ Web Services āļāļāļāļŦāļāļēāļāļēāļ Project
āđāļĨāļ°āļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāđāļāļĨāļāļāļ TaxService.java 8. āđāļāļŦāļāļēāļāļēāļ Projects āļāļĒāļēāļĒāđāļŦāļāļ TaxWSDemo > Web Services āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ TaxService
āđāļĨāļāļāļāļēāļŠāļ Add OperationâĶ 9. āđāļāđāļāļāļ°āļĨāļāļ Add Operation āļāļēāļŦāļāļ Method āđāļāļ calculateTax āļāļāļāļāļāļ Return Type āđāļāļ
12
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
double āđāļĨāļ°āļāļāļāļĄ Add āđāļāļāđāļāļĄ Input parameter āđāļāļĒāļāļēāļŦāļāļ Name āđāļāļ income āđāļĨāļ° Type āđāļāļāļāļāļ double āđāļĨāļ§āļāļ OK
10. āļāļĨāļāļāđāļāļ Source āļāļāļ TaxService.java āđāļĨāļ°āļāļĢāļāļāļĢāļāđāļĄāļāļāļ calculateTax āļāļāļ
import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService() public class TaxService { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } } }
11. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ TaxWSDemo āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ Clean and Build āļāļēāļāļāļāļāļĨāļāļāļ§āļēāļāđāļŦāļāļ
TaxWSDemo āļāļāļāļĢāļ āđāļĨāļ§āđāļĨāļāļ Deploy āļāļēāļĢāļāļāļŠāļāļ Web Service
1. āļāļĨāļāļāļ§āļēāļ TaxService āđāļ Web Services āđāļĨāļ§āđāļĨāļāļ Test Web Service āļāļāđāļŠāļāļāđāļāļĢāļāļ 1
āļĢāļāļ 1 āđāļŠāļāļāļ§āļāļāļēāļĢāļāļāļŠāļāļ Web Service āđāļ Netbeans
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļŠāļāļāļŦāļāļēāļāļāđāļāļāđāļŦāđāļĢāļēāļāļāļāļāļāļĄāļĨāļāļāļāļ āļāļāļāļāļāļēāļāļ§āļāđāļāļāļāļāļāļāļāļēāļĢāļāļēāļāļ§āļāļ āļēāļĐ āđāļāļāļāļāļ°āđāļŠāļāļ§āđāļĨāļāđāļāļ 730000 āđāļĨāļ°āļāļāļāļĄ calculateTax āļāļāđāļŠāļāļāđāļāļĢāļāļ 2
13
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āđāļŠāļāļāļŦāļāļēāļāļēāļāļŠāļēāļŦāļĢāļāđāļŦāļāļāļŠāļāļāđāļĢāļĒāļ Web Service
3. āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļĢāļĒāļāđāļ Web Services āđāļĨāļ°āļāļ°āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļ āļāļĢāļāļĄāļāļāđāļŠāļāļāļāļē SOAP Request āđāļĨāļ° SOAP Response āļāļāđāļŠāļāļāļāļ§āļāļĒāļēāļāđāļāļĢāļāļ 3
14
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāđāļĢāļĒāļāđāļ Web Service āļāļĢāļāļĄāļāļ SOAP Request āđāļĨāļ° SOAP Response 4. āļŦāļĨāļāļāļēāļāļāļ Back āļāļĨāļāļĄāļēāļāļŦāļāļēāđāļāļĄāđāļĨāļ§ āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāđāļāļĨ WSDL āļāļāļ Web
Service āļāđāļ āđāļāļĒāļāļēāļĢāļāļĨāļāđāļĨāļāļāļ WSDL File āļāļāđāļŠāļāļāđāļāļĢāļāļ 4
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢāļāļĨāļāđāļāļāđāļĢāļĒāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāđāļāļĨ WSDL
15
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
5. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļāļēāļĢāđāļĢāļĒāļ url āļāļ http://localhost:8080/TaxWSDemo/TaxServiceService?WSDL āđāļĨāļ°āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 5
āļĢāļāļ 5 āđāļŠāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļ WSDL
6. āđāļāļĢāđāļāļĢāļĄ Web Service āļāļ°āļāļāļāļāļāļāļāļ GlassFish Server 3.1.2 āļŠāļēāļĄāļēāļĢāļāļāđāļāļāļēāļāļāļēāļĢāļāļĨāļāļāļ§āļēāļ
GlassFish Server 3.1.2 āđāļāđāļāļ Services āđāļĨāļ°āđāļĨāļāļ View Admin Console āļāļāđāļŠāļāļāđāļāļĢāļāļ 6
āļŦāļĢāļāđāļāļĒāļāļēāļĢāđāļāļ Web Browser āđāļĨāļ°āđāļĢāļĒāļ url āļ http://localhost:4848 āđāļāļĒāļĄ user āđāļāļ admin
āđāļĨāļ° password āđāļāļ adminadmin
āļĢāļāļ 6 āđāļŠāļāļāļāļēāļĢāđāļĢāļĒāļāļ Admin Console
16
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 3: Axis2 Web Services
āđāļāļāļāļāļŦāļāļāđāļāļāļāļēāļĢāļāļāļāļ Axis2 Web Services āļāļ Tomcat Web Server āđāļĨāļ§āļāļāļĨāļāļāļāļāļāļē Web Service āđāļāļĒāđāļāđāļāļĢāđāļāļĢāļĄ NetBeans
āļāļēāļĢāļāļāļāļ Axis2 āļāļ Tomcat
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļāđāļĄāļāļĨ Axis2 āđāļāļāļāļēāđāļŦ Tomcat āđāļāļ Web Service Provider āļāļāļēāļāļēāļāļ āļēāļĒāđāļ Axis2 Framework āđāļāļĒ Axis2 āļĄāļāļāļāđāļŦāļāļ JAX-WS API āđāļāđāļāļāļ§āļē Axis2 āļĄ WS-Security āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļāļēāļāļēāļāđāļāđāļĢāļ§āļāļ§āļē āļāļāļāļēāļĢāļāļāļāļēāļĄāļāļāļāļāļāļāļāļ
1. āļāļēāļāļēāļĢāļāļēāļ§āļāđāļāļĨ axis2.war āļāļēāļ http://ws.apache.org/axis2/ 2. āļāļāļĨāļāļāđāļāļĨ axis2.war āļ āļēāļĒāđāļāđāļāđāļāđāļĢāļāļāļāļĢāļāļāļ webapps āļāļāļĒāđāļ CATALINA_BASE āļāļāļ Tomcat 3. āļāļĢāļāļāđāļĄāļāļĢāļēāļāđāļāđāļĢāļāļāļāļĢāļāļāļ Catalina Base āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļŦāļēāđāļāđāļāļĒāđāļāļāđāļāļĢāđāļāļĢāļĄ NetBeans
āđāļĨāļāļāļŦāļāļēāļāļēāļ Services āļāļĒāļēāļĒāđāļŦāļāļ Servers āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļāļāļēāļŠāļ Properties āļāļāļ Apache Tomcat āđāļāļĒāđāļāļāļ°āļĨāļāļ Server āļāļ°āđāļŠāļāļāđāļāđāļĢāļāļāļāļĢāļāļāļ Catalina Base āļāļāļĢāļāļ 1
āļĢāļāļ 1 āļāļēāļĢāļŦāļēāļāļēāđāļŦāļāļāđāļāđāļĢāļāļāļāļĢāļāļāļ Catalina Base
4. āļāļ°āđāļāđāļāđāļĢāļāļāļāļĢāļ āļēāļĒāđāļ webapps āļāļāļĢāļāļ 2
17
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āđāļŠāļāļāđāļāļĢāļāļŠāļĢāļēāļāđāļāđāļĢāļāļāļāļĢāļāļāļ webapps āļ āļēāļĒāļŦāļĨāļāļāļēāļāļāļāļĨāļāļāđāļāļĨ axis2.war
5. āļāļēāļāļēāļĢ Start/Restart Tomcat āđāļĨāļ§āļāļāļŠāļāļ Axis2 āđāļāļĒāļāļēāļĢāđāļĨāļāļ url āļāļāļ http://localhost:8084/axis2/ āļāļ°āđāļāļāļĨāļĨāļāļāļāļāļĢāļāļ 3 āđāļāļĒāļ āļēāļĒāđāļ Services āļāļ°āļĄāđāļ§āļāđāļāļāļĢāļ§āļŠāļāļ§āļāļĒāļēāļāļāļ Version āļĢāļāļāļĒ
āļĢāļāļ 3 āļŦāļāļēāļāļāļāļāļ Tomcat Axis2
18
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āđāļāļĒāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļŠāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāļāđāļāļĒāđāļāđāļāļĢāđāļāļĢāļĄāđāļāļ Soap UI āđāļāļĒāļāļēāļāļāļāļāļ WSDL āļ http://localhost:8084/axis2/services/Version?wsdl
āļāļēāļĢāļāļāļāļ Axis2 Plugin āļŠāļēāļŦāļĢāļ NetBeans
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļ Axis2 Plugin āđāļāļāļāļēāđāļŦ NetBeans āļŠāļēāļĄāļēāļĢāļāļāļāļāļē Axis2 Web Services āđāļāđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āđāļāđāļāļĢāđāļāļĢāļĄ NetBeans āđāļĨāļāļāđāļĄāļ Tools > Plugins
2. āđāļāđāļāļāļ°āļĨāļāļ Plugins āđāļĨāļāļāđāļāļ Downloaded āđāļĨāļ§āļāļāļāļĄ Add Plugins āđāļĨāļ§āđāļĨāļāļāđāļāļāđāļāļĨ org-netbeans-modules-websvc-axis2.nbm āļāļāđāļāļāļēāļāļēāļĢāļāļēāļ§āļāđāļŦāļĨāļāļĄāļēāļāļāļāļŦāļāļēāļ
3. āļāļāļāļĄ Install āđāļĨāļ§āļāļāļāļĄ Next āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢāļĒāļāļĄāļĢāļāđāļāļāļāđāļ āđāļĨāļ°āļāļāļāļĄ install āļāļāļāļĢāļ
4. āđāļĄāļāļāļēāļāļēāļĢāļāļāļāļāđāļŠāļĢāļāļŠāļāđāļĨāļ§ āđāļŦāđāļĨāļāļ Restart IDE Now āđāļāļ restart āđāļāļĢāđāļāļĢāļĄ NetBeans āļāļāļĄāļēāđāļŦāļĄ āđāļĨāļ§āļāļāļāļĄ Finish āđāļāļĢāđāļāļĢāļĄ NetBeans āđāļĨāļāļāļāļēāļŠāļ Tools > Plugin
5. āļāļēāļāļāļāļāļ°āļāļāļāļāļēāļāļēāļĢ Config Tomcat āđāļāļāđāļŦāļŠāļēāļĄāļēāļĢāļ deploy Axis2 Web Service āđāļāđāļāļĒāļāļāđāļāļĄāļ āđāļāļĒāđāļŦāđāļĨāļāļāļāļēāļŠāļ Tools > Options
6. āđāļāđāļāļāļ°āļĨāļāļ Options āđāļĨāļāļāđāļāļ Axis2 āđāļĨāļ§āļāļēāļŦāļāļāļāļē Axis2 .aar Files āđāļāļāļāļēāđāļŦāļāļāļāđāļĢāļēāļāļāļāļ axis2.war āļĨāļāđāļ āđāļĨāļ°āļāļēāļŦāļāļāļāļē Axis URL āđāļāļ http://localhost:8084/axis2/
7. āļāļēāļŦāļāļ username āđāļĨāļ° password āļāļāļTomcat Manager āđāļŦāļāļāļāļāļ āļāļāļāļ§āļāļĒāļēāļāđāļāļĢāļāļ 4 āđāļĨāļ§āļāļāļāļĄ OK [āļāļāļĄāļĨāļāļāļ Tomcat Users āļŠāļēāļĄāļēāļĢāļāļāļāļŦāļēāđāļāļāļēāļāđāļāļĨ CATALINA_BASE/conf/tomcat-users.xml]
19
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 4 āļāļēāļĢ Config āļāļēāļŠāļēāļŦāļĢāļ Tomcat Axis2
āļāļēāļĢāļāļāļāļē Axis2 Web Service
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļē Axis2 Web Service āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project.. 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java āđāļĨāļ° Java Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ Axis2Demo āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ Director
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļāđāļāļĨāđāļ§ āđāļĨāļ§āļāļ Finish 4. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Axis2Demo āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other 5. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āđāļāļ Web Services āđāļĨāļ° Axis2 Service from Java
āđāļĨāļ§āļāļ Next
20
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āđāļĨāļāļāļāļāļ Create Empty Web Service āđāļĨāļ§āļāļ Next 7. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļ āļāļēāļŦāļāļāļāļ Class Name āđāļāļ TaxServices āđāļĨāļ° Package āđāļāļ ws āđāļĨāļ§āļāļ
Finish 8. āļāļĢāļāļāļĢāļ source code āđāļāļāđāļāļĄāđāļĄāļāļāļāļāļāļ calculateTax āļāļāļ
package ws;
public class TaxServices {
public double calculateTax(double income) {
return 0.1 * income;
}
}
9. āļāļēāļāļēāļĢ Deploy Web Services āđāļāļĒāļāļēāļĢāļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Axis Web Services āļāļāļĒāļ āļēāļĒāđāļāđāļŦāļāļ Axis2Demo āđāļĨāļ§āđāļĨāļāļāļāļēāļŠāļ Deploy to Server āļāļāļĢāļāļ 5
āļĢāļāļ 5 āđāļŠāļāļāļāļēāļĢ Deploy Axis Web Services to Server
10. āļāļāļŠāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāđāļāđāļāļĒāļĢāļāđāļāļĢāđāļāļĢāļĄ Web Browser āđāļĨāļ°āļāļĄāļ URL: http://localhost:8084/axis2/ āļāļēāļāļāļāļāļĨāļ Services āļāļ°āđāļŦāļāđāļ§āļāđāļāļāļĢāļ§āļŠāļāļāļ TaxServices āļāļĒ āļāļāļĢāļāļ 6
21
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 6 āđāļŠāļāļ TaxServices āļ āļēāļĒāđāļ Services
11. āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļŠāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāļāđāļāļĒāđāļāđāļāļĢāđāļāļĢāļĄāđāļāļ Soap UI āđāļāļĒāļāļēāļāļāļāļāļ WSDL āļ http://localhost:8084/axis2/services/TaxServices?wsdl āđāļ
12. āđāļāļĒāļŦāļĨāļāļāļēāļāļāļēāļĢāļāļāđāļāļĨāļāļĨāļāļ Request1 āđāļĨāļ°āđāļŠāļāļē income āđāļŠāļĢāļāđāļĨāļ§ āļāļ°āļāļāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļ port āļāļēāļ 8080 āđāļāļ 8084 āļāļāļāļāļēāļĢāļĢāļ āļāļāđāļŠāļāļāđāļāļĢāļāļ 7 āđāļĨāļ° 8
āļĢāļāļ 7 āđāļŠāļāļāļāļēāļĢāđāļĨāļāļ edit current.. āđāļāļāđāļāļĨāļĒāļ Port āļāļāļ axis2
āļĢāļāļ 8 āđāļŠāļāļāļāļēāļĢāđāļāļĨāļĒāļ Port āļāļāļ axis2 āļāļēāļ 8080 āđāļāļ 8084 āļāļāļāļāļēāļĢāļĢāļ
22
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 4: āļāļēāļĢāđāļāļāļĄāļāļāļāļ MySQL Database
āđāļāļāļāļāļŦāļāļāđāļāļāļāļēāļĢāđāļĢāļĄāļāļāđāļāļāļēāļ Database Tool āđāļāļāđāļāļāļĄāļāļāļāļ Table test āđāļāļāļēāļāļāļāļĄāļĨ MySQL āļŠāļēāļŦāļĢāļāđāļāļāļāļ§āļāļ§āļĒāđāļŦāļāļēāļāļēāļāđāļāđāļĢāļ§āļāļ āđāļāļāļāļāļāļāļēāļāļ° create table āļāļāļāļāđāļāļĒāļ SQL āđāļ Tool āļāļĄ GUI āļĄāļēāļāļ§āļĒ
āļāļēāđāļŦāļĨāļāļāļāļāļāļāļĨāļēāļ āđāļĨāļ° āļŠāļ°āļāļ§āļāđāļāļāļēāļĢāļāļēāļāļēāļāļĄāļēāļāļāļ āļāļāļāļāļēāļĢāļāļēāđāļāļāļāļāļŦāļāļāļāļ°āļāļāļāļĄāļāļēāļĢ download āđāļĨāļ°āļāļāļāļāđāļāļĢāđāļāļĢāļĄ MySQL āđāļĨāļ° MySQL Workbench āđāļāļĒāļŠāļēāļĄāļēāļĢāļāļāļēāļāļēāļĢ download āđāļāļāļēāļāđāļ§āļ http://dev.mysql.com/
āļāļēāļĢāđāļāļāļĄāļāļ MySQL āđāļāļĒāđāļāļĢāđāļāļĢāļĄ MySQL Workbench
1. āđāļŦāđāļāļāđāļāļĢāđāļāļĢāļĄ MySQL Workbench āļāļāļĢāļāļ 1 āļāļēāļāļāļāļāļēāļāļēāļĄāļāļāļāļāļāļāļāļ
āļĢāļāļ 1 āļāļēāļĢāđāļĢāļĒāļāđāļāļāļēāļ Program MySQL Workbench
2. āļāļāđāļāļĨāļāļĨāļāļ Connection Name āđāļŠ Password āļāļāļēāļŦāļāļāđāļ§āđāļāļāļāļāļāļāļāļāđāļāļĢāđāļāļĢāļĄ MySQLāļāļāļāļ°āļĄāļāļēāđāļāļ root āļāļāļĢāļāļ 2
āļĢāļāļ 2 āļāļēāļĢāđāļŠāļāļāļāļēāļĢāđāļāļāļĄāļāļ Connection āđāļāļāđāļāļēāđāļāļāļāļāļēāļĢ Database
23
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāļēāļ books
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ Table āļāļāļ books āđāļāļĒāđāļŦāļāļĒāļ āļēāļĒāđāļ Schema āļāļāļ test āđāļāļĒ Table āļāļāļēāļŦāļāļāđāļŦāļĄ Column āļāļēāļāđ āļāļāļāļēāļĢāļēāļāļ 1
āļāļēāļĢāļēāļāļ 1 Table books
āļāļColumn āļāļāļ āļāļāļēāļ Primary Key Index
isbn varchar 20 Y Y
title varchar 70 - -
author varchar 50 - -
price float - - -
āđāļĢāļēāļāļ°āđāļāđāļāļĢāđāļāļĢāļĄ MySQL WorkBench āđāļāļāļēāļĢāļāļāļ°āļŠāļĢāļēāļ TableāļāđāļāļĒāļĄāļāļāļāļāļāļāļēāļāđ āļāļāļ
1. āļāļĨāļāļ icon āļāļAdd Table... āđāļĨāļ§āđāļŠāļāļtable āđāļĨāļ° āļāļ field āļāļēāļĄāļāļēāļĢāļēāļāļ 1 āļāļāļĢāļāļ 3 āđāļĨāļ§āļāļāļāļĄ Apply
24
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āļāļēāļĢāđāļĨāļāļāļāļēāļŠāļāļŠāļĢāļēāļāļāļēāļĢāļēāļ
2. āļŦāļĢāļāđāļāļāļēāļŠāļ SQL Statement āļāđāļ āđāļāļĒāļāļēāđāļāđāļŠāļāļŦāļāļēāļāļēāļ Query1 āđāļĨāļ§ āļāļ icon āļŠāļēāļĒāļāļēāļŠāđāļŦāļĨāļāļāđāļāļāļĢāļ
CREATE TABLE BOOKS (
ISBN VARCHAR(20) NOT NULL ,
TITLE VARCHAR(70) NULL ,
AUTHOR VARCHAR(50) NULL , PRICE FLOAT NULL , PRIMARY KEY (ISBN) );
3. āđāļāļ Tables books āļāļ°āđāļŦāļ Column āļāļēāļāđ āļāļāļĢāļāļ 4
25
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 4 āļāļĨāļĨāļāļāļāļēāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāļēāļ
āļāļēāļĢāđāļāļāļēāļŠāļ SQL āđāļ MySQL WorkBench
āļ āļēāļĒāļŦāļĨāļāļāļēāļāļāļĄāļāļēāļĢāļŠāļĢāļēāļ Table āļāļāļ books āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļŠāļ SQL āđāļāļāļāļāļ°āļāļāļāļāļāļāļāļēāļāļāļāļĄāļĨ āđāļāļāļāļāļ°āđāļŠāļāļāļāļēāļĢāđāļāļĄāļāļāļĄāļĨāļĨāļāđāļ Table āđāļāļĒāļĄāļāļāļāļāļāļāļēāļāđāļāļāļ
1. āļāļāđāļāļĨāļāļĨāļāļ Table books āļāļēāļāļāļ§āļē āļāļ°āđāļ SQL Editor āđāļŦāļāļāļāļāļēāļŠāļ SQL āđāļāļ INSERT INTO books VALUES ('123', 'JAVA', 'Numnonda', 2500.00);
INSERT INTO books VALUES ('456', 'SOA', 'Numnonda', 3000.00) ;
26
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āđāļĨāļ§ āļāļĨāļāļ icon āļŠāļēāļĒāļāļēāļŠāđāļŦāļĨāļāļ āļāļāļĢāļāļ 5 āļŦāļĢāļāļāļCtrl+Shift+Enter āđāļāļāļĢāļāļāļēāļŠāļ SQL āļāļāļŦāļĄāļ
āļĢāļāļ 5 āļāļēāļĢ ExecuteāļāļēāļŠāļāđāļāļĄāļāļāļĄāļĨāđāļāļāļēāļĢāļēāļ
2. āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļāļĄāļĨāļāļāļāļāđāļāļēāđāļāđāļ āđāļāļĒāļāļēāļĢāļāļĨāļāļāļ§āļēāļ Table āļāļāļ books āđāđāļĨāļ§āļĨāļāļ Select Rows â Limit 1000 āļāļāļĢāļāļ 6
āļĢāļāļ 6 āļāļēāļĢāđāļĢāļĒāļāļāļāļāļĄāļĨāđāļ Table āļāļ books
27
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
3. āđāļĄāļāļāļāļāļ Database āđāļĨāļ§āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļ NetBeans āđāļāļāđāļāļāļĄāļāļāļāļ Database āđāļāđāļāļĒāļŠāļēāļŦāļĢāļ Netbeans 7.3 āđāļŦāđāļĨāļāļāļāđāļāļ Services āļāļ°āđāļŦāļ MySQL Driver āļāļĄāļĄāļēāđāļŦāđāļĨāļ§ āļāļāļāļēāļāļĒāļēāļĒāđāļāļ Databases > Drivers āļāļ°āđāļŦāļ Driver āļāļāļ MySQL āđāļŦāļāļēāļāļēāļĢāļāļĨāļāļāļ§āļē āđāļĨāļ§āđāļĨāļāļ Connect Using
4. āđāļŦāļāļēāļāļēāļĢāļĢāļ°āļāļāļēāļāļāļ Host: āđāļĨāļ° Port: āđāļāļ localhost āđāļĨāļ° 3306 (āļāļĢāļāļāđāļĄāđāļāđāļāļĨāļĒāļāđāļāļĨāļ port āļāļāļ āļāļāļāļ) āļāļēāļĄāļĨāļēāļāļ
5. āļāļēāļāļāļāđāļŦāļĢāļ°āļāļāļēāļāļāļāļĄāļĨāļāļāļāļāļāļēāļĢāļāļāļāļ (āđāļāļāļāļĢāļ°āļ test) 6. āļŠāļēāļŦāļĢāļ User Name: āđāļĨāļ° Password: āđāļŦāđāļŠāļāļēāļāļēāļĄāļāļāļēāļŦāļāļāđāļ§āđāļāļāļāļāļāļāļāļāđāļāļĢāđāļāļĢāļĄ MySQL
āļāļāđāļāļāļāļāļ°āļĄāļāļēāđāļāļ root āđāļĨāļ° root āđāļāļĒāđāļāļāļ°āļĨāļāļāļāļ°āđāļŠāļāļāļāļĨāđāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 7
āļĢāļāļ 7 āđāļŠāļāļāļāļēāļĢāļāļēāļŦāļāļāļāļēāđāļŦāļāļ Database Connection
28
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļ OK āļāļēāļāļāļāđāļāļŦāļāļēāļāļēāļ Runtime āļāļēāļāļĒāļēāļĒāđāļāļ Database āļāļ°āđāļŦāļ Connection āđāļŦāļĄāļāļāđāļŠāļāļāđāļāļĢāļāļ 8
āļĢāļāļ 8 āđāļŠāļāļ Connection āđāļāļĒāļ test Database
5. āļāļēāļāļĒāļēāļĒāđāļāļ jdbc:mysql://localhost:3306/test āļāļ°āđāļŦāļāļĢāļēāļĒāļāļēāļĢ test > Tables > books āļāļĨāļāļāļ§āļēāđāļĨāļ§āđāļĨāļāļ View Data... āļāļāđāļŠāļāļāđāļāļĢāļāļ 9
āļĢāļāļ 9 āđāļŠāļāļāļāļēāļĢāđāļĨāļāļāđāļāļāđāļŠāļāļāļāļāļĄāļĨāđāļāļāļēāļĢāļēāļ books
6. āļāļ°āđāļŦāļāļāļāļĄāļĨāļāļāļĒāđāļāļāļēāļĢāļēāļ books āļāļāđāļŠāļāļāđāļāļĢāļāļ 10
āļĢāļāļ 10 āđāļŠāļāļāļāļāļĄāļĨāđāļāļāļēāļĢāļēāļ Books
29
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 5: Java Web Services from Session Bean (1)
āđāļāļāļāļāļŦāļāđāļāļāļāļāđāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Enterprise Java Bean (EJB) āđāļāļĒāļāļ°āđāļāļāļāļēāļĢāļāļāļāļē āđāļāļĢāđāļāļĢāļĄāļāļ GlassFish Server 3.1.2 āđāļāļāļāļāļāļāļāļāļāļēāļāļāļāļĄāļĨ MySQL āđāļāļĢāđāļāļĢāļĄ EJB āļāļ Application Server āļāļ°āļāļĢāļ°āļāļāļāļāļ§āļĒ Entity Class āļāđāļāļāļĄāđāļĒāļāļāļāļāļēāļĢāļēāļāļāļāļ books āđāļĨāļ° Session Bean āđāļāļāđāļāļāđāļāļĢāđāļāļĢāļĄ āļāļŠāļēāļĄāļēāļĢāļāđāļĢāļĒāļāđāļ Entity Class āđāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļĄ āđāļāđāļ āđāļĨāļ° āļĨāļāļāļāļĄāļĨāļāļāļāļāļēāļĢāļēāļ books āđāļ
āļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ
1. āļŠāļĢāļēāļ Enterprise Application Project 2. āļāļāļāļē Entity Class 3. āļāļāļāļē Session Bean 4. āļāļāļāļē Web Application 5. āļāļāļāļē Java Web Services āļāļēāļ Session Bean
āļŠāļēāļĄāļēāļĢāļāļāļāļ°āļĢāļāđāļāļĢāđāļāļĢāļĄāļāļĄāļāļēāļĢāļāļāļāļāļāļ MySQL Database āđāļ āđāļŦāļāļēāļāļēāļĢāļāļāļēāđāļŦāļāļāļāļāļ GlassFish āļāļēāļāđāļ NetBeans āļāļāļ
1. āļāļĨāļāļ tab Services āđāļ NetBeans 2. āļāļĨāļāļāļ§āļēāļ GlassFish āļāļāļĒāđāļ Servers āđāļĨāļ§āđāļĨāļāļ Properties āļāļāđāļŠāļāļāđāļāļĢāļāļ 1
āļĢāļāļ 1 āđāļŠāļāļāļāļēāļĢāļŦāļēāļāļēāđāļŦāļāļāļāļāļ GlassFish
3. āļāļēāļāļāļāđāļŦāļāļāļēāđāļŦāļāļāļāļāļ domain āđāļ GlassFish Server āļāļēāļ Domains Folder: āļāļāđāļŠāļāļāđāļāļĢāļāļ 2
30
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āđāļŠāļāļāļāļēāđāļŦāļāļāļāļāļ Domain āđāļ GlassFish
4. āđāļāļĒāļāļāļēāđāļŦāļāļāļāļāļ Domain āđāļ GlassFish āļāļēāļāļāļāđāļŦāļāļēāđāļāļĨ mysql-connector-java-5.1.19-bin.jar (MySQL Driver) āđāļāđāļŠāđāļ§āđāļ folder lib āļāļāđāļŠāļāļāđāļāļĢāļāļ 3
āļĢāļāļ 3 āđāļŠāļāļāļāļēāļĢāđāļŠ MySQL Driver āļ āļēāļĒāđāļ Domain āļāļāļ GlassFish
5. Restart GlassFish āđāļāļĒāļāļĨāļāļāļ§āļēāļāļĢāļ GlassFish āļāļāļĒāđāļ NetBeans āđāļĨāļ§āđāļĨāļāļ Restart āļāļāđāļŠāļāļāđāļāļĢāļāļ 4
31
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢ Restart GlassFish Server
āļāļēāļĢāļŠāļĢāļēāļ Enterprise Application Project
āđāļĢāļēāļāļ°āļāļēāļŦāļāļāđāļŦāđāļāļĢāđāļāļĢāļĄāļāđāļāļāđāļāļĢāđāļāļĄ Enterprise Application āļāļāļĄāļāļ EJB Module āđāļĨāļ° Web Module āļāļāļāļāļāđāļĢāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ Project āđāļŦāļĄāļāļāļĄāļēāđāļ NetBeans āļāļāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File => New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java EE āđāļĨāļ°āđāļĨāļāļ Enterprise āđāļāļ Enterprise
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ BookApp āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ folder āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļ
project āđāļ§ āļāļ Next 4. āļāļēāļāļāļāđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āđāļāļĒāļāļēāļŦāļāļ Jave EE Version: āđāļāļ Java EE 6
āđāļĨāļ°āđāļŦāđāļĨāļāļāļāļāļ Create EJB Module: āđāļĨāļ° Create Web Application Module: āļāļāđāļŠāļāļāđāļāļĢāļāļ 5
32
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 5 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļ Enterprise Application
5. āļāļ Finish
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Entity Class
āđāļāļĢāđāļāļĢāļĄ EJB 3.0 āļāļ°āđāļāļāļĨāļēāļŠāļāļĢāļ°āđāļ āļ Entity āđāļāļāđāļāļāļāļāļāđāļāļāļāļŠāļāļāļāļĨāļāļāļāļāļāļēāļĢāļēāļāđāļāļāļēāļāļāļāļĄāļĨ āđāļāļāļāđāļĢāļēāļāļ°āļŠāļĢāļēāļ Entity Class āļāļāļ Books.java āļāļēāļāļāļēāļĢāļēāļāļāļāļ books āļāļāļĄāļāļēāļĢāļŠāļĢāļēāļāļĄāļēāļāļāļāđāļĨāļ§ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļĄāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BookApp-ejb āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other... 2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Entity
Classes from Database āđāļĨāļ§āļāļ Next 3. āđāļāđāļāļāļ°āļĨāļāļ New Entity Classes from Database āđāļŦāđāļĨāļāļ Data Source: āđāļāļ New Data SourceâĶ
āđāļāļĒāđāļŠāļāļ JNDI Name: jdbc/test āđāļĨāļ°āđāļĨāļāļāđāļāļāļĄāļāļāđāļāļĒāļāļāļēāļāļāļāļĄāļĨ test āļāļāđāļŠāļāļāđāļāļĢāļāļ 6
33
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 6 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Data Source
4. āļāļ OK āļāļēāļāļāļāļāļ Add All >> āđāļāļāđāļĨāļāļāļāļēāļĢāļēāļāļāļāļāļāļāļēāļĢāļāļēāļĄāļēāļŠāļĢāļēāļ Entity Class āļāļāļāļ°āđāļ Selected Tables: āđāļāļ books āļāļ Next āļāļāđāļŠāļāļāđāļāļĢāļāļ 7
34
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 7 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Entity Class āļāļēāļ Data Source
5. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ entity āđāļĨāļ°āđāļŦāļāļĢāļ§āļāļŠāļāļāļ§āļē Crate Persistence Unit āđāļāļāļāđāļĨāļāļāđāļ§ āļāļ Persistence Unit āļāļ°āđāļāļāļāļ§āļāļēāļŦāļāļāđāļŦ EJB Container āļāļāļ Application Server āļĢāđāļāļ§āļē Entity Class āļāļ°āļāļāļāļ§āļāļāļĄāļāļ§āļĒ Entity Manager āļāļ§āđāļ āđāļĨāļ°āđāļāļāļāļ§āļāļēāļŦāļāļ Data Source āļāļāļ°āđāļāļāļ Entity Manager āļ
6. āđāļĄāļāļēāđāļāļāļāļāļāđāļāļĨāļĒāļāļāļēāđāļāđ āļāļēāļāļāļāļāļ Next āļāļāđāļŠāļāļāđāļāļĢāļāļ 8
35
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 8 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Entity Class
7. āđāļĄāļāļāļ Finish āđāļāļĢāđāļāļĢāļĄāļāļ°āļŠāļĢāļēāļāđāļāļĨāļāļāļ persistence.xml āđāļ package: Configuration Files āđāļĨāļ°āļŠāļĢāļēāļāđāļāļĨāļāļāļ Books.java āđāļ package: entity
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Session Bean
āđāļāļĢāđāļāļĢāļĄ EJB āļāļ°āđāļ Session Bean āđāļāļāļēāļĢāļāļāļāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļāđ āļ āļēāļĒāļāļāļ EJB Container āđāļāļĒāđāļāļĢāđāļāļĢāļĄāđāļŦāļĨāļēāļāļāļāļ°āļāļāļāļāļāļ Entity Class āđāļāļĒāļāļēāļ Session Bean āđāļāļāļāļāļŦāļāļāļāļ°āļŠāļĢāļēāļ Session Bean āļāļāļ BooksFacade.java āļāļĄ Business method āđāļāļāļēāļĢāļŠāļĢāļēāļ āđāļāđāļ āļĨāļ āđāļĨāļ°āđāļĢāļĒāļāļāļāļāļĄāļĨāļāļāļāļāļēāļĢāļēāļāļāļāļ books āđāļāļĒāđāļ Entity Class āļāļāļ Books.java āđāļĨāļ° EntityManager āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BookApp-ejb āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > OtherâĶ 2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Session
Beans for Entity Classes āđāļĨāļ§āļāļ Next 3. āļāļēāļāļāļāļāļ Add All >> āđāļĨāļ§āļāļ Next 4. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ sb āđāļĨāļ°āđāļĨāļāļ local āļāļāđāļŠāļāļāđāļāļĢāļāļ 9 āđāļĨāļ§āļāļ Finish
36
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 9 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Session Bean
5. āđāļāļĢāđāļāļĢāļĄāļāļ°āļŠāļĢāļēāļāđāļāļĨāļāļāļ BooksFacade.java āđāļĨāļ° BooksFacadeLocal.java āđāļ package āļāļāļ sb
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Application
āđāļāļĢāđāļāļĢāļĄ EJB āļāļ°āđāļāļāļŠāļ§āļāļāļāļ Business Logic āđāļāļēāļāļ āļāļēāļĢāļāļāļāļēāļŠāļ§āļāļāļāļ Presentation āļāļ°āļāļāļāđāļāđāļāļĢāđāļāļĢāļĄ Web Application āļŦāļĢāļ Java SE āđāļāļāļāļāļŦāļāļāļāļ°āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Application āđāļāļāđāļŦāļāđāļāļāļāļ isbn āļāļāļāļŦāļāļāļŠāļāđāļāļŦāļāļēāđāļ§āļ findBook.html āđāļĨāļ§āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļĢāļĒāļāđāļāļĢāđāļāļĢāļĄ Servlet āļāļāļ ShowBook.java āđāļāļāđāļŠāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāļŦāļāļāļŠāļāļāļāļāļĨāļēāļ§āļāļāļāļĄāļē āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ findBook.html
āđāļāļĢāđāļāļĢāļĄ findBook.html āđāļāļāđāļ§āļāđāļāļāļāđāļāđāļŠāļāļāļāļāļĢāļĄāļŠāļēāļŦāļĢāļāđāļŦāļāđāļāļāļāļ isbn āļāļāļāļŦāļāļāļŠāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BookApp-war āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > OtherâĶ 2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Web āđāļĨāļāļ File Types: āđāļāļ HTML āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ HTML File Name: āđāļāļ findBook āđāļĨāļ§āļāļ Finish 4. āđāļāļĒāļ source code āļāļāļāđāļāļĨ findBook.html āļāļēāļĄ Listing āļ 1 āđāļāļĒāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļĨāļēāļ icon āļāļĢāļ°āđāļ āļ
HTML Forms āļāļāļĒāđāļāļŦāļāļēāļāļēāļ Palette āđāļāļāļŠāļēāļĄāļēāļĢāļāđāļŦāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāđāļāļāļēāļĒāļāļ
37
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Listing 1 āđāļāļĢāđāļāļĢāļĄ findBook.html <html> <head> <title></title> </head> <body> <form action="ShowBook" method="POST"> <h2>Search Book from ISBN </h2> Enter ISBN <input type="text" name="isbn" value="" /> <input type="submit" value="Find" /> </form> </body> </html>
2. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ ShowBook.java
āđāļāļĢāđāļāļĢāļĄ ShowBook.java āđāļāļāđāļāļĢāđāļāļĢāļĄ Java Servlet āļāļāļ°āļāļēāļāļŦāļĄāļēāļĒāđāļĨāļ ISBN āļāļāđāļāļāļāļāļĄāļēāļāļēāļāļŦāļāļē findBook.html āđāļĨāļ°āļāļ°āđāļĢāļĒāļāđāļĄāļāļāļ find() āļāļāļ session bean āļāļāļ BooksFacade āđāļāļāđāļŠāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāļŦāļāļāļŠāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BookApp-war āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other... 2. āđāļāđāļāļāļ°āļĨāļāļ New FileāđāļŦāđāļĨāļāļ Categories āļāļāļ Web āđāļĨāļāļ File Types: āđāļāļ Servlet āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ File Name: āđāļāļ ShowBook āđāļĨāļ° Package: āđāļāļ servlets āļāļ Next āđāļĨāļ§āļāļ Finish 4. āđāļāļŦāļāļēāļāļēāļ Editor āđāļŦāļāļĨāļāļāļ§āļēāļ āļēāļĒāđāļāđāļĄāļāļāļ processRequest āđāļĨāļ§āđāļĨāļāļ Insert CodeâĶ > Call
Enterprise BeanâĶ 5. āđāļāđāļāļāļ°āļĨāļāļ Call Enterprise Bean āđāļĨāļāļ BooksFacade āļāļāļĒāđāļ BookApp-ejb āđāļĨāļ§āļāļ OK 6. āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļāļĄ Source code āđāļāļāļēāļĢāđāļĢāļĒāļ EJB āļāļāļ
@EJB
private BooksFacadeLocal booksFacade;
7. āđāļŦāļāļĢāļāļāļĢāļ Source code āđāļāđāļĄāļāļāļ processRequest āļāļāļ
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ShowBook</title>");
38
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
out.println("</head>");
out.println("<body>");
String isbn = request.getParameter("isbn");
Books book = booksFacade.find(isbn);
out.println("Title: " + book.getTitle()+ "<BR>");
out.println("Author: " + book.getAuthor() + "<BR>");
out.println("Price: " + book.getPrice() + "<BR>");
out.println("</body>");
out.println("</html>");
out.close();
}
9. āļāļĨāļāļāļ§āļēāđāļĨāļ§āđāļĨāļāļ Fix Imports āđāļāļāļāļēāļāļēāļĢ import āļāļĨāļēāļŠāļāļēāļāđ āđāļĨāļ§ Save āđāļāļĢāđāļāļĢāļĄ
āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ
1. āļāļēāļāļēāļĢāļāļĨāļāļāļ§āļēāļāļĢāļ BookApp āđāļāļāļāļēāļāļēāļĢ Clean and Build 2. Run āđāļāļĢāđāļāļĢāļĄ BookApp (āđāļĄāđāļ BookApp-ejb āļŦāļĢāļ BookApp-war) 3. āđāļĨāļāļ URL āļāļāļ Web Browser āđāļāļ http://localhost:8080/BookApp-war/findBook.html
āđāļŦāđāļĢāļēāļāļāļĨāļāļāđāļŠāļāļāļĄāļĨ 4. āđāļĄāļāļāļāļāļĄ Find āđāļāļĢāđāļāļĢāļĄāļāļāļ°āđāļŠāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāļŦāļāļāļŠāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 10
āļĢāļāļ 10 āđāļŠāļāļāļāļ§āļāļĒāļēāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāļĢāļāđāļāļĢāđāļāļĢāļĄ
āļāļēāļĢāļāļāļāļē Java Web Services āļāļēāļ Session Bean
1. āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļāļĄāļāļāļāļāļēāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļāļ Stateless Session Bean āđāļāđāļāļ Web Services āđāļāđāļāļĒāļāļēāļĢāđāļāđāļāđāļāļĨ BooksFacade.java āļāļāļĒāđāļāđāļŦāļāļ BookApp-ejb āļāļāļ
39
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
@WebService
@Stateless
public class BooksFacade extends AbstractFacade<Books> implements BooksFacadeLocal {
@PersistenceContext(unitName = "BookApp-ejbPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public BooksFacade() {
super(Books.class);
}
@WebMethod
public Books findBookDetailsByIsbn(String isbn) {
Query query = em.createNamedQuery("Books.findByIsbn").setParameter("isbn", isbn);
return (Books) query.getSingleResult();
}
}
2. āļāļĨāļāļāļ§āļēāđāļĨāļ§āđāļĨāļāļ Fix Imports āđāļāļāļāļēāļāļēāļĢ import āļāļĨāļēāļŠāļāļēāļāđ (javax.jws.WebService, javax.jws.WebMethod āđāļĨāļ° javax.persistence.Query) āđāļĨāļ§ Save āđāļāļĢāđāļāļĢāļĄ
3. āļĨāļāļāļāļāļŠāļāļāđāļĢāļĒāļāđāļ Web Service āļāļēāļāđāļ NetBeans (āđāļāļĒāļāļēāļĢāđāļ Test Web Service āđāļĨāļ°āđāļāļĒāļ code) āđāļĨāļ°āđāļāļĒāđāļ Soap UI
4. āđāļŦāļāļāļĨāļāļāđāļāļĄāđāļĄāļāļāļāļāļāļāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāđāļāļ Web Services āđāļāļ findBookDetailsByTitle
40
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 6: Java Web Services from Session Bean (2)
āđāļāļāļāļāļŦāļāđāļāļāļāļāđāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Services āļŠāļēāļŦāļĢāļ Java EE āļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļēāļāļ Server āļāļĢāļāļāļ Java EE āđāļāļĒāļāļāļāļēāļŠāļ JAX-WS āļāļāđāļāļāļĢāļāļāļāļ°āđāļŠāļāļāļāļāļāļāļāļāļēāļĢāđāļ NetBeans āļŠāļĢāļēāļ Web Services Method āļāļāļ findEmployeeDetails āļāļēāļ Session Bean āđāļāļĒ Service āļāļāļ°āđāļāļāļāļēāļĢāļāļāļŦāļēāļāļāļĄāļĨāļāļāļ employee āļāļēāļ table āļāļāļ employees āđāļĨāļ° departments āđāļāļāļēāļāļāļāļĄāļĨ MySQL āļāļāļĄāļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļē āđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āļŠāļĢāļēāļ Table āļāļāļ employees āđāļĨāļ° departments
2. āļŠāļĢāļēāļ EJB Module
3. āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Entity Class
4. āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Session Bean
5. āļŠāļĢāļēāļ Web Application
1. āļāļēāļĢāļŠāļĢāļēāļ Table āļāļāļ employees āđāļĨāļ° departments
āļāļāļāļāļāđāļĢāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ table āđāļāļĒāđāļāđāļāļĢāđāļāļĢāļĄ NetBeans āđāļŦāļāļēāļāļēāļĢāļāļāļĨāļāļ script āļāļāđāļāļ āđāļĨāļ§āđāļŠāđāļ SQL Command Editor āļāļāļ NetBeans āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢ Run SQL āļāļāđāļŠāļāļāđāļāļĢāļāļ 1
create table `test`.DEPARTMENTS ( DEPARTMENT_ID INT not null primary key, DEPARTMENT_NAME VARCHAR(30) not null ); insert into departments values(90,'Executive'); create table `test`.EMPLOYEES ( EMPLOYEE_ID INT not null primary key, FIRST_NAME VARCHAR(20), LAST_NAME VARCHAR(25) not null, DEPARTMENT_ID INT, FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON UPDATE CASCADE ); insert into employees values(100,'Steven','King',90); insert into employees values(101,'Neena','Kochhar',90);
41
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 1 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Run SQL āđāļāļāļŠāļĢāļēāļāļāļēāļĢāļēāļ
āđāļāļĒāđāļĄāļāļāļĢāļ§āļāļŠāļāļāļāđāļ tables āļāļāļ test āļāļ°āļāļ table āļāļāļ employees āđāļĨāļ° departments āļāļāđāļŠāļāļāđāļāļĢāļāļ 2
āļĢāļāļ 2 āđāļŠāļāļāļāļēāļĢāļēāļāļāļāļāļŠāļĢāļēāļāļāļāļĄāļē
āļāļēāļĢāļŠāļĢāļēāļ EJB Module
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java EE āđāļĨāļ°āđāļĨāļāļ Enterprise āđāļāļ EJB
Module āļāļāđāļŠāļāļāđāļāļĢāļāļ 3 āđāļĨāļ§āļāļ Next
42
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ EJB Module
3. āļāļēāļŦāļāļ Project Name āđāļāļ EmployeeWS āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ folder āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļāđāļāļĨāđāļ§ āđāļĨāļ§āļāļ Next
4. āđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āļāļēāļŦāļāļ Jave EE 6 āđāļĨāļ§āļāļ Finish
āļāļēāļĢāļāļāļāļē Employees and Departments Entity Classes
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ EmployeeWS āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other 2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Entity Classes
from Database āđāļĨāļ§āļāļ Next 3. āđāļāđāļāļāļ°āļĨāļāļ New Entity Classes from Database āđāļŦāđāļĨāļāļ Data Source: āđāļāļ jdbc/test
āđāļāļāđāļĨāļāļāļāļēāļĢāđāļāļāļĄāļāļāđāļāļĒāļāļāļēāļĢāļēāļ test āđāļāļāļēāļāļāļāļĄāļĨ MySQL
43
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļāļāļāđāļŦāđāļĨāļāļāđāļāļāļāļēāļĢāļēāļ EMPLOYEES āđāļĨāļ§āļāļ Add > āđāļĨāļ°āļāļāļāļēāļĢāđāļĨāļāļ Include Related Tables āđāļ§āļāļēāļĢāļēāļ EMPLOYEES āđāļĨāļ° DEPARTMENTS āļāļ°āļāļāļĒāļēāļĒāļĄāļēāļāļĒāđāļ Selected Tables: āļāļāđāļŠāļāļāđāļāļĢāļāļ 4 āđāļĨāļ§āļāļ Next
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Entity Class āļŠāļēāļŦāļĢāļ EMPLOYEES āđāļĨāļ° DEPARTMENTS
5. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ entity āļāļāđāļŠāļāļāđāļāļĢāļāļ 5 āļāļēāļāļāļāļāļ Next āđāļĨāļ° Finish
44
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 5 āđāļŠāļāļāļāļēāļĢāļĢāļ°āļ Package āļŠāļēāļŦāļĢāļ Entity Classs āļāļŠāļĢāļēāļāļāļāļĄāļē
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Session Bean
āđāļāļĢāđāļāļĢāļĄNetBeans āļāļ°āļĄ Wizard āđāļāļāļŠāļĢāļēāļ Session Bean āļāļēāļ Entity Class āđāļāļāļŠāļĢāļēāļ Business method āđāļāļāļēāļĢāļŠāļĢāļēāļ āđāļāđāļ āļĨāļ āđāļĨāļ°āđāļĢāļĒāļāļāļāļāļĄāļĨāļāļāļ tableāļāļŠāļāļāļāļĨāļāļāļāļ Entity Class āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ EmployeeWS āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other... 2. āđāļāđāļāļāļ°āļĨāļāļ New FileāđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Session
Beans for Entity Classes āđāļĨāļ§āļāļ Next 3. āđāļāđāļāļāļ°āļĨāļāļ New Session Beans for Entity Classes āļāļ Add All >> āđāļĨāļ§āļāļāļāļēāļĢāđāļĨāļāļ Include
Referenced Class āđāļ§ āļāļāđāļŠāļāļāđāļāļĢāļāļ 6 āļāļēāļāļāļāļāļ Next
45
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 6 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Session Beans For Entity Classes
4. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ sb āđāļĨāļ°āđāļĨāļāļ local āļāļāđāļŠāļāļāđāļāļĢāļāļ 7 āđāļĨāļ§āļāļ Finish
āļĢāļāļ 7 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ Session Bean
46
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļāđāļĢāļēāļāļ°āđāļ Entity Class āļāļāļ Employees, Departments āđāļĨāļ° Session Bean āļāļāļ AbstractFacade, EmployeesFacade, EmployeesFacadeLocal āđāļāļĒāđāļĄāļāļāļēāļāļēāļĢ Clean and Build āđāļāļĢāđāļāļāđāļĨāļ§ āļāļ°āļĄāđāļāļĢāļāļŠāļĢāļēāļāļāļāļāđāļāļĢāđāļāļ āļāļāđāļŠāļāļāđāļāļĢāļāļ 8
āļĢāļāļ 8 āđāļŠāļāļāđāļāļĢāļāļŠāļĢāļēāļāļāļāļāđāļāļĢāđāļāļ EmployeeWS āļāļāļāļŠāļĢāļēāļāļāļ
āļāļēāļĢāļāļāļāļē Web Service Methods: findEmployeeDetails
āļāļāļāļāļāļāļāļ°āļŠāļĢāļēāļ Web Services Method āļāļāļ findEmployeeDetails āđāļ Session Bean āļāļāļ EmployeesFacade.java āļāļāļāļāļēāļāļēāļāđāļāļāļāļāļŦāļ Enterprise Java Bean āđāļāļĒ Services āļāļāļ°āļāļāļāļē first_name, last_name āđāļĨāļ° department_name āļāļāļ employee āđāļāļĒāļāļēāļĢāļāļāļŦāļēāļāļēāļ employee_id āļāļāļāļāđāļāļēāļĄāļē āļāļāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļāļĨ EmployeesFacade.java āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Insert CodeâĶ > Add Business MethodâĶāļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢāđāļŠāļāļāļĄāļĨāļāļāđāļŠāļāļāđāļāļĢāļāļ 3
47
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļāļāļēāļĢāđāļāļĄāđāļĄāļāļāļāđāļ Session Bean
2. āđāļāļĄ source code āđāļāļĒāđāļāļĄāļāļēāļŠāļ annotation āđāļāļāļāļĢāļ°āļāļēāļĻāđāļŦ session bean āļāđāļāļ Web Service āđāļĨāļ°āđāļĄāļāļāļ findEmployeeDetails āđāļāļ Web Services Method āđāļāļĒāļĄāļāļēāļŠāļāļāļāļ
@WebService
@Stateless
public class EmployeesFacade extends AbstractFacade<Employees> implements EmployeesFacadeLocal {
@PersistenceContext(unitName = "EmployeeWSPU")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
48
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
}
public EmployeesFacade() {
super(Employees.class);
}
@WebMethod
public List<String> findEmployeeDetails(int employee_id) {
ArrayList<String> result = new ArrayList<String>();
Employees employee = em.find(Employees.class, employee_id);
result.add("First name: " + employee.getFirstName());
result.add("Last name: " + employee.getLastName());
Departments department = employee.getDepartmentId();
result.add("Department name: " + department.getDepartmentName());
return result;
}
}
2. āļāļĨāļāļāļ§āļēāđāļĨāļāļ Fix Imports āļāļ OK āđāļĨāļ§āļāļāļāļĄ Save 3. āļāļēāļāļēāļĢ Clean and Build āđāļĨāļ° Deploy Project 4. āļāļēāļāļāļāđāļŦāļāļĨāļāļāļ§āļēāļ EmployeeFacade āđāļ Web Services āđāļĨāļ§āđāļĨāļāļ Test Web Service 5. āļāļ WSDL File āđāļāļŦāļāļē Web Browser āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢ copy URL āļāļāļ WSDL File āđāļ§ āđāļāļ
http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL
49
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Application āđāļāļāđāļĢāļĒāļāđāļ Web Service
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļē Web Application āļāļ Apache Tomcat āđāļāļāđāļĢāļĒāļāđāļ Web Service āļāļāļ findEmployeeDetails āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project.. 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Web āđāļĨāļ° Projects āđāļāļ Web Application
āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ EmployeeWSClient āļāļēāļāļāļāđāļĨāļāļ Server āđāļāļ Apache Tomcat
7.0.14.0 āļāļēāļŦāļāļ Jave EE Version: āđāļāļ Java EE 6 āđāļĨāļ§āļāļ Finish 4. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ EmployeeWSClient āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other.. 5. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Web Services āđāļĨāļāļ File Types: āđāļāļ Web
Service Client āđāļĨāļ§āļāļ Next 6. āđāļāđāļāļāļ°āļĨāļāļ New Web Service Client āđāļĨāļāļ WSDL URL: āđāļĨāļ°āđāļŠāļāļē
http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL 7. āļāļ Finish āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļŠāļāļ Web Service Reference āđāļāļĒāļĄ Service āļāļ EmployeesFacade 8. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ EmployeeWSClient āđāļĨāļ§āđāļĨāļāļ New > Servlet.. 9. āļāļēāļŦāļāļ Servlet Name: āđāļāļ EmployeeServlet āđāļŠāđāļ Package: servlets āļāļ Next 10. āļāļēāļŦāļāļ URL Pattern(s): āđāļāļ /findEmployee āđāļĨāļ§āļāļ Finish 11. āđāļāļŦāļāļēāļāļēāļ Projects āļĨāļēāļāđāļŦāļāļ findEmployeeDetails āļĨāļāđāļāđāļāļĨ EmployeeServlet.java āļāļāļāļŦāļāļēāļāļēāļ
Editor āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļāļĄ source code āđāļŦāļāļāđāļāļĄāļ āđāļŦāļāļĢāļāļāļĢāļ source code āđāļāļŠāļ§āļāļāđāļĢāļĒāļāđāļ Web Service āļāļāļ
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String id = request.getParameter("id");
int employee_id = Integer.parseInt(id);
List<String> result = findEmployeeDetails(employee_id);
50
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
for (String s : result) {
out.print(s + "<BR>");
}
} finally {
out.close();
}
}
private static java.util.List<java.lang.String> findEmployeeDetails(int arg0) {
sb.EmployeesFacadeService service = new sb.EmployeesFacadeService();
sb.EmployeesFacade port = service.getEmployeesFacadePort();
return port.findEmployeeDetails(arg0);
}
12. āļāļāļāļĄ Save
āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ
1. āļāļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđāļāļĢāđāļāļ EmployeeWSClient 2. Run āđāļāļĢāđāļāļĢāļĄ EmployeeServlet āđāļāļĒāđāļŦāđāļŠāļāļēāļāļāļ URI āđāļāļ /findEmployee?id=100 āļāļāđāļŠāļāļāđāļāļĢāļāļ
4 āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 5
51
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢāļāļēāļŦāļāļāļāļē id
āļĢāļāļ 5 āđāļŠāļāļāļāļĨāļĨāļāļāļāļāļ employee id=100
3. āļāļāļĨāļāļāđāļāļĨāļĒāļ URL āļāļāļ Web Browser āđāļāļ http://localhost:8084/EmployeeWSClient/findEmployee?id=101 āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 6
52
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 6 āđāļŠāļāļāđāļŠāļāļāļāļĨāļĨāļāļāļāļāļ employee id=101
4. āļāļēāļāļāļēāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ findEmployee.html āđāļāļāļĢāļāļāļē employee id āļāļēāļāļāđāļ āđāļāļĒāļāļēāļŦāļāļāđāļŦ findEmployee.html āđāļĢāļĒāļāđāļ EmployeeServlet āļāļāļāļ°āđāļĢāļĒāļāđāļ Web Service āđāļāļāđāļŠāļāļāļāļĨāļĨāļāļāļāļāļ
53
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 7: RESTful Web Services āđāļāļāļāļāļŦāļāđāļāļāļāļāđāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ RESTful Web Services āđāļāļĒāđāļāļāļāļāļēāļŠāļ JAX-RS āđāļāļāļŠāļĢāļēāļ Web Services āļāļāļ°āđāļĢāļĒāļāļāļāļāļĄāļĨāļāļēāļāļāļēāļāļāļāļĄāļĨ MySQL āļāļēāļāļāļāļāļēāļŠāļ Java Persistence API (JPA) āļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ
1. āļŠāļĢāļēāļ Web Application Project 2. āļāļāļāļē Entity Class 3. āļāļāļāļē RESTful Web Service āļāļēāļ Entity Class 4. āļāļāļŠāļāļ RESTful Web Service āļāļēāļ Entity Class
1. āļāļēāļĢāļŠāļĢāļēāļ Web Application Project
āđāļĢāļēāļāļ°āļāļēāļŦāļāļāđāļŦāđāļāļĢāđāļāļĢāļĄāļāđāļāļāđāļāļĢāđāļāļĄ Web Application āļāļāļāļāļāđāļĢāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ Project āđāļŦāļĄāļāļāļĄāļēāđāļ NetBeans āļāļāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java Web āđāļĨāļ°āđāļĨāļāļ Project āđāļāļ Web
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ RestfulWS āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ Directory
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļ Project āđāļ§ āļāļ Next 4. āļāļēāļāļāļāđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āđāļĨāļ° Java EE 6 Web āđāļĨāļ§āļāļ Finish
2. āļāļēāļĢāļāļāļāļē Entity Class
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ Entity Class āļāļāļ Employees.java āļāļāļāļ°āđāļāļāļāļāļāđāļāļāļāļŠāļāļāļāļĨāļāļāļāļāļāļēāļĢāļēāļāļāļāļ employees āđāļ Oracle āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ RestfulWS āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other 2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Entity
Classes from Database āđāļĨāļ§āļāļ Next 3. āđāļāđāļāļāļ°āļĨāļāļ New Entity Classes from Database āđāļŦāđāļĨāļāļ Data Source: āđāļāļ jdbc/test
54
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļ OK āļāļēāļāļāļāđāļĨāļāļāđāļāļāļēāļ° books āđāļĨāļ§āļāļ Add > 5. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ entity āđāļĨāļ°āļāļ Finish
3. āļāļēāļĢāļāļāļāļē Restful Web Service āļāļēāļ Entity Class
āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļē Restful Web Services āđāļāļāđāļŦāļŠāļēāļĄāļēāļĢāļāļāļāļāļāļāļāļāļēāļāļāļāļĄāļĨāđāļāļĒāļāļēāļ Entity Class āļāļāļāļāļēāļāļāđāļ āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ RestfulWS āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other 2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Web Services āđāļĨāļāļ File Types: āđāļāļ RESTful
Web Services from Entity Classes āđāļĨāļ§āļāļ Next
4. āđāļāđāļāļāļ°āļĨāļāļ New RESTful Web Services from Entity Class āļāļ Add All >> āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 1 āđāļĨāļ§āļāļ Next āļāļēāļāļāļāļāļ Finish
āļĢāļāļ 1 āļāļēāļĢāđāļĨāļāļ Entity Class āļŠāļēāļŦāļĢāļ RESTful Web Service
55
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļĢāļāļāļŠāļāļ RESTful Web Service āļāļēāļ Entity Class āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļŠāļāļ RESTful Web Services āļāļāļāļāļēāļāļāđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ RestfulWS āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ Test Restful Web Services
2. āđāļāļĢāđāļāļĢāļĄ Browser āļāļ°āđāļŠāļāļ uri āļāļāļ RESTful Web Services āđāļŦāļāļĨāļāļāđāļŦāļāļ entity.books āđāļĨāļ°āļāļĨāļāļāļĄ Test āļāļ°āđāļāļāļĨāļĨāļāļāļāļāļĢāļāļ 2
āļĢāļāļ 2 āđāļŠāļāļāļāļĨāļĨāļāļāļāļāļāļŦāļāļāļŠāļāļāļāļŦāļĄāļāļāļĄāļāļĒ
56
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
3. āđāļŦāļāļĨāļāļ {id} āđāļĨāļ°āļāļāļĨāļāļāļāļāļāļāļāļĄāļĨ id āđāļāļ 111 āđāļĨāļ§āļāļāļāļĄ Test āļāļ°āđāļāļāļĨāļĨāļāļāļāļ§āļāļĒāļēāļāļāļāļĢāļāļ 3
āļĢāļāļ 3 āđāļŠāļāļāļāļĨāļĨāļāļāļāļāļāļŦāļāļāļŠāļāļāļĄ id (isbn) āđāļāļēāļāļ 111
4. āļāļāļĨāļāļāđāļāļĨāļĒāļ methodāđāļāļ DELETE āđāļāļāļāļāļĨāļāļāļāļēāļāļēāļĢāļĨāļāļāļāļĄāļĨāļāļāļāļāļēāļāļāļēāļĢāļēāļ books
57
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 8: Google Map Web Services
āđāļāļāļāļāļŦāļāđāļāļāļāļāđāļāļāļāļ§āļāļĒāļēāļāļāļēāļĢāļāļāļāļē Web Services āđāļĨāļ°āđāļ Web Application āđāļĢāļĒāļāđāļāļāđāļŠāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāļāđāļāļāļāļāļĒāđāļāļāļēāļāļāļāļĄāļĨ āļāļāļĄāļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āļŠāļĢāļēāļāļāļēāļāļāļāļĄāļĨāđāļĢāļāļāļĒāļēāļāļēāļĨ
2. āļŠāļĢāļēāļ Enterprise Application Project
3. āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Entity Class
4. āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean)
5. āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ HospitalSelector.java
6. āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ DisplayLocation.java
1. āļāļēāļĢāļŠāļĢāļēāļāļāļēāļāļāļāļĄāļĨāđāļĢāļāļāļĒāļēāļāļēāļĨ āļāļāļāļāļāđāļĢāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ table āđāļĨāļ°āđāļāļĢāļĒāļĄāļāļāļĄāļĨāđāļāļāđāļāđāļāđāļāļāļāļāļŦāļ āđāļāļĒāđāļāđāļāļĢāđāļāļĢāļĄ NetBeans āđāļāļāļŠāļĢāļēāļ Table āļāļāļ bkk_hospital āđāļāļāļēāļāļāļāļĄāļĨ Oracle āđāļāļĒāđāļŦāļāļēāļāļēāļĢāļĢāļāđāļāļĨ bkk_hospital.sql āđāļāļāļŠāļĢāļēāļāļāļēāļĢāļēāļāđāļĨāļ°āđāļŠāļāļāļĄāļĨāļĨāļāđāļāļāļēāļĢāļēāļāļāļāļ
CREATE TABLE `test`.`bkk_hospital` (
`hospital_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(60) NOT NULL,
`address` VARCHAR(100) NOT NULL,
`city` VARCHAR(30) NOT NULL,
`zipcode` VARCHAR(5) NOT NULL,
PRIMARY KEY(`hospital_id`)
) ENGINE = InnoDB;
58
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Siriraj Hospital', '2 Prannok road Siriraj Bangkoknoi', 'Bangkok', '10700');
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Vibhavadi Hospital', '51/3 Ngamwongwan Road Ladyao Jatujak', 'Bangkok', '10900');
INSERT INTO bkk_hospital(name,address,city,zipcode) VALUES('Rajavithi Hospital', 'Phaya Thai Road, Phaya Thai', 'Bangkok', '10400');
2. āļāļēāļĢāļŠāļĢāļēāļ Enterprise Application Project āđāļāļāļāļāļŦāļāļāļāļ°āļŠāļĢāļēāļ Project āļāđāļāļ Enterprise Application āđāļāļĒāļĄ Entity Class āļāļāļ BkkHospital āđāļāļāļāļē ORM (Obeject Relational Mapping) āļāļ table āļāļāļ bkk_hospital āđāļĨāļ°āļĄāđāļāļĢāđāļāļĢāļĄ Java Servlet āđāļāļāļēāļĢāđāļŠāļāļāļĢāļēāļĒāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāļāļāļĒāđāļāļāļēāļāļāļāļĄāļĨāđāļŦāļāđāļāđāļĨāļāļ āđāļāļāđāļŠāļāļāļāļēāđāļŦāļāļāļāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāļāļēāļāđāļ Google Map āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java EE āđāļĨāļ°āđāļĨāļāļ Projects āđāļāļ Enterprise
Application Project āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name: āđāļāļ BkkHospitalGoogleMap āđāļĨāļ§āđāļĨāļāļ Project Location: āđāļāļ Directory
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļ Project āđāļ§ āļāļēāļāļāļāđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āđāļĨāļ§āļāļ Finish 3. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Entity Class āļāļāļāļāļāļāļāļ°āđāļāļāļāļēāļĢāļŠāļĢāļēāļ Entity Class āļāļēāļ table āļāļāļ bkk_hospital āļāļāļĄāļāļēāļĢāļŠāļĢāļēāļāļĄāļēāļāļāļāđāļĨāļ§ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BkkHospitalGoogleMap āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other
2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Entity Classes from Database āđāļĨāļ§āļāļ Next
3. āđāļāđāļāļāļ°āļĨāļāļ New Entity Classes from Database āđāļŦāđāļĨāļāļ Data Source: jdbc/test 4. āđāļĨāļāļ bkk_hospital āļāļēāļāļāļāļāļ Add āđāļāļāđāļĨāļāļāđāļŦāđāļāļ Selected Tables: āđāļĨāļ§āļāļ Next 5. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ entity āđāļĨāļ§āļāļ Finish
59
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ BkkHospitalFacade (Session Bean) āđāļāļĢāđāļāļĢāļĄ BkkHospitalFacade āļāļ°āđāļāļ Session Bean āđāļāļāļŠāļĢāļēāļ Business method āđāļāļāļēāļĢāļŠāļĢāļēāļ āđāļāđāļ āļĨāļ āđāļĨāļ°āđāļĢāļĒāļāļāļāļāļĄāļĨāļāļāļ table āļāļŠāļāļāļāļĨāļāļāļāļ Entity Class āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BkkHospitalGoogleMap-ejb āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other
2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Persistence āđāļĨāļāļ File Types: āđāļāļ Session Beans for Entity Classes āđāļĨāļ§āļāļ Next
3. āđāļāđāļāļāļ°āļĨāļāļ New Session Beans for Entity Classes āļāļ Add All > > āđāļĨāļ§āļāļ Next 4. āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļāđāļŦāļĢāļ°āļ Package: āđāļāļ sb āļŠāļ§āļāļāļēāļāļāđ āđāļāļāļāļēāļĄāļāļāļāđāļ§ āđāļĨāļ§āļāļ Finish
5. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ HospitalSelector.java
āđāļāļĢāđāļāļĢāļĄ HospitalSelector.java āđāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ§āļē Servlet āđāļāļāđāļŠāļāļāļĢāļēāļĒāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāļāļāļāļāļāđāļāļ āļāļĒāđāļāļāļēāļāļāļāļĄāļĨ āđāļāļĒāļāļ°āđāļŠāļāļāđāļāļĢāļāļāļāļ radio āđāļāļāđāļŦāļāđāļāđāļĨāļāļ āđāļĨāļ°āđāļĄāļāļāđāļāđāļĨāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāđāļĨāļ§āđāļāļĢāđāļāļĢāļĄāļ āļāļ°āđāļĢāļĒāļāđāļāđāļāļĢāđāļāļĢāļĄ Servlet āļāļāļ DisplayLocation.java āđāļāļāđāļŠāļāļāļāļēāđāļŦāļāļāļāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāđāļāļĒāđāļ Google Map Web Services
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ HospitalSelector.java āļāļēāļĄāļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļē Java Servlet āļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BkkHospitalGoogleMap-war āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other
2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āļāļāļ Web āđāļĨāļāļ File Types: āđāļāļ Servlet āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Class Name: āđāļāļ HospitalSelector āđāļĨāļ° Package āđāļāļ controller āđāļĨāļ§āļāļ Finish 4. āđāļāļŦāļāļēāļāļēāļ Editor āļ āļēāļĒāđāļāđāļĄāļāļāļ processRequest āđāļŦāļĨāļ Comment āļāļāļŦāļĄāļāļāļāļĒāļ āļēāļĒāđāļāđāļāļĢāļāļāļŦāļĄāļēāļĒ
/* âĶ */ āļĢāļ°āļŦāļ§āļēāļāļāļēāļŠāļ try āđāļĨāļ° finally 5. āļāļĨāļāļāļ§āļēāļĢāļ°āļŦāļ§āļēāļāļāļēāļŠāļ try āđāļĨāļ° finally āđāļĨāļ§āđāļĨāļāļ Insert Code āļāļēāļāļāļāđāļŦāđāļĨāļāļ Call Enterprise Bean
āđāļĨāļ§āđāļĨāļāļ BkkHospitalFacade āļāļāļĒāđāļ BkkHospitalGoogleMap-ejb āđāļĨāļ§āļāļ OK 6. āđāļāļĄāđāļāļĄ source code āđāļŦāđāļāļāļāļāļ
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();
60
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
try { List<BkkHospital> hospitals = bkkHospitalFacade.findAll(); out.println("<h1> Hospital in Bangkok </h1>"); out.println("<form action='DisplayLocation'>"); for (BkkHospital hospital : hospitals) { out.println("<input type='radio' name='hospital_id' value='" + hospital.getHospitalId() + "' />" + hospital.getName() + ", " + hospital.getAddress() + ", " + hospital.getCity() + ", " + hospital.getZipcode() + "<br><br>"); } out.println("<input type='submit' value='Show Location' />"); out.println("</form>"); } finally { out.close(); }
7. āļāļēāļāļēāļĢāļāļĨāļāļāļ§āļēāđāļāđāļāļĢāđāļāļĢāļĄ āđāļĨāļ§āđāļĨāļāļ Fix Imports 8. Run āđāļāļĢāđāļāļĢāļĄ āđāļĨāļ°āļāļĄāļ URL āļāļāļ Web Browser āđāļāļ
http://localhost:8080/BkkHospitalGoogleMap-war/HospitalSelector āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 1
āļĢāļāļ 1 āđāļāļĢāđāļāļĢāļĄāđāļ§āļāđāļāļāđāļŦāļāđāļāđāļĨāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨ
61
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
6. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ DisplayLocation.java
āđāļāļĢāđāļāļĢāļĄ DisplayLocation.java āđāļāļāđāļāļĢāđāļāļĢāļĄ Servlet āļāđāļĢāļĒāļāđāļāđāļ§āļāđāļāļāļĢāļ§āļŠāļāļāļ Google Map āđāļāļāđāļŠāļāļāđāļāļāļāļāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāļāđāļĨāļāļāļāļēāļ HospitalSelector.java āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ BkkHospitalGoogleMap-war āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other
2. āđāļāđāļāļāļ°āļĨāļāļ New FileāđāļŦāđāļĨāļāļ Categories āļāļāļ Web āđāļĨāļāļ File Types: āđāļāļ Servlet āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Class Name: āđāļāļ DisplayLocation āđāļĨāļ°āđāļĨāļāļ Package āđāļāļ controller āđāļĨāļ§āļāļ Finish 4. āđāļāļŦāļāļēāļāļēāļ Editor āļāļĨāļāļāļ§āļēāļ āļēāļĒāđāļāđāļĄāļāļāļ processRequest() āđāļĨāļ§āđāļĨāļāļāļāļēāļŠāļ Insert Code.. > Call
Enterprise Bean ...āđāļĨāļ§āđāļĨāļāļ BkkHospitalFacade āļāļāļĒāđāļ BkkHospitalGoogleMap-ejb 5. āđāļĨāļāļāļŦāļāļēāļāļēāļ Services āđāļĨāļ§āļāļĒāļēāļĒāđāļŦāļāļ Web Services > Google > Map Service 6. āļĨāļēāļāđāļāļāļĢāļ§āļŠ getGoogleMap āļĄāļēāđāļŠāđāļ§āđāļāļŦāļāļēāļāļēāļ Editor āļāđāļŠāļāļ source code āļāļāļāđāļāļĨ
DisplayLocation.java āđāļĨāļ§āđāļāđāļ source code āđāļāđāļĄāļāļāļ processRequest() āļāļāļ
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
Object id = (Object) new Integer(request.getParameter("hospital_id"));
BkkHospital hospital = bkkHospitalFacade.find(id);
String address = hospital.getName() + ", " + hospital.getCity();
java.lang.Integer zoom = 15;
String iframe = "false";
out.println("<h1>Google Map for " + hospital.getName() + "</h1>");
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
out.println(result.getDataAsString());
} finally {
out.close(); }
62
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āđāļāļĢāđāļāļĢāļĄāļāļāļ°āđāļĢāļĒāļāđāļāđāļ§āļāđāļāļāļĢāļ§āļŠāļāļāļ Google Map āļāļāđāļĢāļēāļāļ°āļāļāļāļāļēāļāļēāļĢāļĨāļāļāļ°āđāļāļĒāļāļ url āļāļāļ http://code.google.com/apis/maps/signup.html āđāļāļĒāļāļēāļŦāļāļāļāļē My web site URL āđāļāļ http://localhost:8080 āđāļĨāļ§āļāļāļāļĄ Generate API Key
8. āļāļēāļāļēāļĢāļāļāļāļāļāļē API Key āļāđāļāđāļāđāļŠāđāļāđāļāļĨāļāļāļ googlemapservices.properties āļāļāļĒāļ āļēāļĒāđāļāđāļŦāļāļ BkkHospitalGoogleMap-war > Source Packages > org.netbeans.saas.google āļāļāļāļ§āļāļĒāļēāļāđāļāļ
api_key=ABQIAAAAMB8Fi4WQk4tMcbmiA9JGFhTwM0brOpm-All5BF6PoaKBxRWWERSQ1U63ApJ18ThqyosJ6592jq20Bg
āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ
1. āļāļĨāļāļāļ§āļēāļ BkkHospitalGoogleMap āđāļāļāļāļēāļāļēāļĢ Build āđāļĨāļ° Deploy 2. āļāļĨāļāļāļ§āļēāļ BkkHospitalGoogleMap āđāļāļāļāļēāļāļēāļĢ Run 3. āļāļĄāļ URL āļāļāļ Web Browser āđāļāļ http://localhost:8080/BkkHospitalGoogleMap-
war/HospitalSelector āđāļĨāļ°āđāļŦāđāļĨāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāđāļāļāļāļāļēāđāļŦāļāļāļāļēāļāđāļ Google Map āļāļāđāļŠāļāļāđāļāļĢāļāļ 2
63
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āļāļĨāļĨāļāļāđāļāļāļēāļĢāđāļŠāļāļāļāļēāđāļŦāļāļāļāļāļāđāļĢāļāļāļĒāļēāļāļēāļĨāļāļēāļāđāļ Google Map
64
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 9: āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļ§āļāđāļāļāļāļāļāļāļāļēāļāļāļāļĄāļĨ MongoDB
āđāļāļāļāļāļŦāļāļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Application āđāļāļĒāđāļ Java Servlet āđāļāļāđāļāļāļĄāļāļāļāļ āļāļēāļāļāļāļĄāļĨāļāđāļāļ NoSQL āļāļĒāļēāļ MongoDB āļāļāđāļāļāļāļēāļāļāļāļĄāļĨāļāđāļāļāļāļāļĄāļĨāđāļāļ Document āđāļāļĢāļāđāļāļāļāļāļ JSON āđāļĨāļ°āļĄāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāđāļāļāļāļāļĄāļĨāļāļāļēāļāđāļŦāļāđāļ
āļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ
1. āļāļāļāļ MongoDB 2. āļāļāļĨāļāļāđāļ MongoDB 3. āđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet āđāļāļāđāļāļāļĄāļāļāļāļ MongoDB
1. āļāļēāļĢāļāļāļāļ MongoDB
āđāļāļĢāđāļāļĢāļĄāļāļēāļāļāļāļĄāļĨ MongoDB āļŠāļēāļĄāļēāļĢāļāļāļēāļāļēāļāđāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļāļ Windows, Mac OS āļŦāļĢāļ Linux āļŠāļēāļŦāļĢāļāļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢ Windows āļŠāļēāļĄāļēāļĢāļāļāļāļāļāđāļāđāļāļĒāļāļēāļĢāļāļēāļ§āļāđāļŦāļĨāļāđāļāļĨ Binary āļāļēāļāđāļ§āļāđāļāļ http://www.mongodb.org/downloads āļāļāđāļĄāļāļāļēāļāļēāļĢāļāļēāļ§āļāđāļŦāļĨāļāđāļāļĨāļāļāļāļĨāļēāļ§āđāļĨāļ§ āđāļŦāļāļēāļāļēāļĢ unzip āđāļāļāđāļāļĨāđāļ§āđāļāđāļāđāļĢāļāļāļāļĢāļāļāļāļāļāļēāļĢ āđāļāļĒāđāļĢāļēāļāļ°āļĄāđāļāļĨāļāļēāļāđ āļāļāļĢāļāļ 1
65
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 1 āđāļāļĨāđāļāļāļēāļĢāļāļēāļāđ āļāļāļ MongoDB
āļāļāđāļāļĨāļāļŠāļēāļāļāļāļāļ
âĒ mongod.exe āļāđāļāļ Database Server âĒ mongo.exe āļāđāļāļāļŦāļāļēāļāļāļāļāļ admin
āđāļāļĒ Default MongoDB āļāļ°āđāļāļāļāļāļĄāļĨāđāļ§āļāđāļāđāļĢāļāļāļāļĢ \data\db āļāļāđāļĢāļēāļāļ°āļāļāļāđāļāļŠāļĢāļēāļāđāļāđāļĢāļāļāļāļĢāļāļāļāļĨāļēāļ§ āļ āļēāļĒāđāļ Drive C
2. āļāļēāļĢāļāļāļĨāļāļāđāļ MongoDB
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļĨāļāļāļāļēāļĢāđāļāļāļēāļ MongoDB āđāļāļĒāļāļēāļĢāđāļāļāđāļāļĢāđāļāļĢāļĄ Mongo.exe āļāļāļāļāļ°āđāļāļāđāļāļĢāđāļāļĢāļĄ command shell āļāļāļ administrator āđāļĨāļ°āđāļāļĒ Default āļāļāļ°āļāļēāļŦāļāļāđāļāļāļēāļāļāļāļĄāļĨāļāļāļ test āļāļāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ° āđāļŠāļāļāļāļēāļāļāļāļĄāļĨāļāđāļāļāļĒāđāļ āđāļāļĒāļāļēāļĢāļāļĄāļāļāļēāļŠāļ
> db
66
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļŠāļāļāļāļ°āđāļŠāļāļāļĢāļēāļĒāļāļāļāļēāļāļāļāļĄāļĨ (database) āļāļāļŦāļĄāļāļāļ
>show dbs
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļāļāļĄāļĨāđāļŦāļĄāļāļāļāļ§āļē mydatabase āđāļāļĒāđāļāļāļēāļŠāļ
>use mydatabase
āļāļēāļŠāļāļāļāļ°āđāļŠāļāļ Tables āļāļāļŦāļĄāļāđāļāļāļēāļāļāļāļĄāļĨāļāļ
>show collections
āđāļĨāļ°āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļĢāļĒāļāļāļāļēāļŠāļāđāļāļāļēāļĢāļāļ§āļĒāđāļŦāļĨāļāđāļāļĒ
>help
āļŠāļēāļŦāļĢāļāđāļāļāļ§āļāļĒāļēāļāļāđāļĢāļēāļāļ°āļāļēāļāļēāļĢāļāļāļĨāļāļāļŠāļĢāļēāļāļāļāļĄāļĨāļāļāļāļŦāļāļāļŠāļ āļŠāļāļāđāļĨāļĄāļāļāļ
> db.books.insert({isbn:"555123", author:"thanachart", title:"Introduction to MongoDB", price:1200})
āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļāļēāļāļēāļĢāđāļāļĄāļāļāļĄāļĨāđāļāđāļāļĒāļāļēāļŠāļāļāļāđāļāļ
> new_book = {isbn:"555124", author:"James Gosling", title: "Java SE", price: 1400}
> db.books.insert(new_book)
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļāļĄāļĨāļāļāļāļŦāļāļāļŠāļāļāļāļŦāļĄāļāđāļāļāļēāļāļāļēāļŠāļ
> db.books.find()
āļāļāļāļāļ°āđāļāļāļĨāļĨāļāļāļāļāļ
{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1200 }
{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "isbn" : "555124", "author" : "James Gosling", "title" : "Java SE", "price" : 1400 }
67
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļāļ id āļāļ°āđāļāļ index āđāļāļāļēāļĢāļĢāļ°āļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļāļāļĄāļĨ āļāļāļāļāļēāļāļāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āļāļāļŦāļēāļāļāļĄāļĨāļŠāļēāļŦāļĢāļ āļĢāļēāļĒāļāļēāļĢāđāļāđ āđāļāđāļāļ āļāļēāļĢāļāļāļŦāļēāļāļēāļĄāļāļāļāđāļāļ
> db.books.find({author:"thanachart"})
āļŦāļĢāļāļāļēāļāļāļāļāļāļēāļĢāļāļāļāļāļŦāļāļāļŠāļāļāļĄāļāļēāļ§āļē Mongo
> db.books.find({title:/Mongo/})
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ° update āļāļāļĄāļĨ āđāļāļāļāļāļāļāļēāļĢāđāļāļĨāļĒāļāļĢāļēāļāļēāļāļāļāļŦāļāļāļŠāļāļāđāļāļāđāļāļĒ thanachart āđāļāļ 1300 āđāļāļĒāđāļāļāļēāļŠāļ
> db.books.update({author:"thanachart"},{$set: {price:1300}})
āđāļĢāļēāļāļ°āļĨāļāļāļāļēāļāļēāļĢāđāļāļĄ comment āļāļāļāļŦāļāļāļŠāļāđāļāļāļĄāļāļāļēāļāļāļāļ Somchai āļāļēāļāļĄāļēāđāļŦāļāļ§āļēāļĄāđāļŦāļāļ§āļēāļŦāļāļāļŠāļāļāļāļ James Gosling āđāļāļ âgood reading bookâ āđāļāļĒāđāļĢāļēāļāļēāļāđāļāļāļēāļŠāļāļāļāļ
> new_comment = {reader:"Somchai", date: new Date(), text: "good reading book"}
> db.books.update({author:/James/},{$push: {comment:new_comment}})
āļāļāđāļĢāļēāļāļ°āđāļāļāļāļĄāļĨāļāđāļŦāļĄāđāļāļ
{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1300 }
{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "author" : "James Gosling", "comment" : [ { "reader" : "Somchai", "date" : ISODate("2013-02-16T16:45:07.309Z"), "text" : "good reading book" } ], "isbn" : "555124", "price" : 1400, "title" : "Java SE" }
3. āļāļēāļĢāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet āđāļāļāđāļāļāļĄāļāļāļāļ MongoDB
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāđāļāļāļĄāļāļāļāļāļāļēāļāļāļāļĄāļĨ MongoDB āđāļāļŦāļĨāļēāļĒāđāļāļ āđāļāđāļāļāļāļāļ°āđāļ MongoDB Driver āļāļŠāļēāļĄāļēāļĢāļāļāļ°āļāļēāļ§āļāđāļŦāļĨāļāļĄāļēāđāļāļāļēāļ https://github.com/mongodb/mongo-java-driver/downloads
68
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āđāļāļāļāļāļ°āļŠāļēāļāļāļāļēāļĢāđāļāļĄāļāļāļĄāļĨāļĨāļāđāļ MongoDB āđāļāļĒāđāļĢāļēāļāļ°āđāļŦāļĄ āđāļāļĢāđāļāļĢāļĄ addBook.html āđāļĨāļ° thankyou.html āļāļ Listing āļ 1 āđāļĨāļ° 2 āđāļĨāļ°āļāļēāļāļēāļĢāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ Servlet āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java Web āđāļĨāļ° Projects āđāļāļ Web
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ WebBaseDB āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ folder
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļ Project āđāļ§ āđāļĨāļ§āļāļ Next 4. āđāļĨāļāļ Server āđāļāļ Apache Tomcat āļāļēāļŦāļāļ Jave EE Version: āđāļāļ Java EE 6 Web āđāļĨāļ§āļāļ
Finish 5. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ WebBaseDB āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > HTML āļāļģāļŦāļāļ HTML File Name: āđāļāļ
addBook āđāļĨāļ§āļāļ Finish 6. āđāļāļĒāļ source code āļāļāļāđāļāļĨ addBook.html āļāļēāļĄ Listing āļ 1
Listing āļ 1 āđāļāļĢāđāļāļĢāļĄ addBook.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Add a new book</title> </head> <body><h1>Add a new book</h1><P> <form action="MongoDBServlet" method="POST"> ISBN : <input type="text" name="isbn" value="" size="15"/> <BR> Title : <input type="text" name="title" value="" size="50"/> <BR> Author : <input type="text" name="author" value="" size="50"/> <BR> Price : <input type="text" name="price" value="" size="10"/> <BR> <input type="submit" value="Add" /> </form> </body> </html>
7. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ WebBaseDB āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > HTML āļāļģāļŦāļāļ HTML File Name: āđāļāļ thankyou āđāļĨāļ§āļāļ Finish
8. āđāļāļĒāļ source code āļāļāļāđāļāļĨ thankyou.html āļāļēāļĄ Listing āļ 2
Listing āļ 2 āđāļāļĢāđāļāļĢāļĄ thankyou.html
<html> <head> <title>Thank you</title> </head> <body> <H1>Thank you for inserting data </H1> </body>
69
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
</html>
9. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ WebBaseDB āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New â Servlet
āļāļģāļŦāļāļ Java Package āđāļāļ controller, Class Name āđāļāļ MongoDBServlet āđāļĨāļ§āļāļ Finish 10. copy āđāļāļĨ mongo-2.10.1.jar āđāļāđāļ§āļāđāļāđāļĢāļāļāļāļĢ āđāļāļĒāđāļŦ Copy āđāļāļ§āļēāļāļ directory /lib āļāļāļ Apache
Tomcat (āļāļ Default āļāļĒāļ C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\) 11. āđāļāļŦāļāļēāļāļēāļ editor āđāļŦāđāļāđāļ source code āļāļāļāđāļāļĨ MongoDBServlet.java āđāļŦāđāļāļāđāļāļāļēāļĄ Listing āļ 3
Listing āļ 3 āđāļāļĢāđāļāļĢāļĄ MongoDBServlet.java
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.UnknownHostException;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
/**
* Servlet implementation class MongoDBServlet
*/
@WebServlet("/MongoDBServlet")
public class MongoDBServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Mongo m = null;
public void init() {
70
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
try {
m = new Mongo( "localhost" );
System.out.println("Connected");
} catch (Exception ex) {
System.out.println(ex);
}
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Add a new book</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1> Add a new book </h1>");
try {
String isbn = request.getParameter("isbn");
String author = request.getParameter("author");
String title = request.getParameter("title");
String priceStr = request.getParameter("price");
float price = Float.parseFloat(priceStr);
DB db = m.getDB( "test" );
BasicDBObject book = new BasicDBObject();
book.put("isbn", isbn);
book.put("author", author);
book.put("title", title);
book.put("price", price);
DBCollection coll = db.getCollection("books");
coll.insert(book);
RequestDispatcher obj = request.getRequestDispatcher("thankyou.html");
obj.forward(request, response);
} catch (UnknownHostException ex) {
out.println("Error " + ex);
return;
}
out.println("</body>");
71
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
4 āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ
1. āļāļģāļāļēāļĢ Deploy āđāļāļĢāđāļāļĢāļĄ WebBaseDB 2. āđāļĢāļĒāļāđāļāļāļēāļāļŦāļāļē addBook.html āđāļĨāļ§āļāļāļŠāļāļāļāļĢāļāļāļāļāļĄāļĨ 3. āđāļāļāđāļāļĢāđāļāļĢāļĄ admin āļāļāļ MongoDB āđāļĨāļ§āđāļĢāļĒāļāļāļēāļŠāļ db.books.find() āļāļ°āđāļŦāļāļāļāļĄāļĨāđāļŦāļĄāļāļāļāļāđāļāļēāļĄāļē
72
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 10: Developing a Simple Synchronous BPEL Program
āđāļāļāļāļāļŦāļāļāđāļāļāļāļēāļĢāļāļāļāđāļāļāđāļĨāļ°āļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļĢāļ°āđāļ āļ BPEL āđāļāļāđāļŠāļāļāļāļ§āļāļĒāļēāļāļāļēāļĢāđāļāļĒāļ Business Process āđāļāļ Synchronous āđāļāļĒāļāļ°āļĄāļāļēāļĢāđāļ NetBeans āļāļāđāļāļāļāļĢāđāļāļĢāđāļāļĢāļĄāļāļĢāļ°āđāļ āļ IDE āđāļāļāļēāļĢāļāļāļāđāļāļāđāļāļĢāđāļāļĢāļĄāđāļāļāļŠāļĢāļēāļāđāļāļĨ WSDL āđāļĨāļ°āđāļāļĨ BPEL āđāļĨāļ°āđāļ GlassFish āļāļāđāļāļ Open Source Application Server āļāļĄāļēāļāļĢāļāļĄāļāļ Open ESB āđāļāļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ āđāļāļĒāđāļāļĢāđāļāļĢāļĄ BPEL Process āļāļāļ°āļāļāļāļēāļāļāđāļāđāļāļāļāļāļŦāļāļ āđāļāļāļāļĢāļāļĢāļĢāļĄāđāļāļāļāļēāļāļēāļĢāļāļāļĨāļāļāļāļāļāļ§āļēāļĄ āļāļāļĄāļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļ
1. āļāļāļāļēāđāļāļĢāđāļāļ HelloBPEL 2. āļāļāļāļēāđāļāļĨ WSDL 3. āļāļāļāļē BPEL Process 4. āļāļāļāļēāđāļāļĢāđāļāļ Composite Application
1. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ HelloBPEL āđāļāļāļāļāļŦāļāļāļāļ°āļāļēāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļāļŠāļēāļŦāļĢāļ Service Oriented Architecture āļāļāļĄāļēāđāļŦāļĄ āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ BPEL Module
āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ HelloBPEL āđāļĨāļ§āļāļ Finish
2. āļāļēāļĢāļāļāļāļēāđāļāļĨ WSDL āļāļāļāļāļāļāļāđāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄāđāļ§āļāđāļāļāļĢāļ§āļŠāļāļāļ°āđāļāđāļāđāļāļĢāđāļāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āļāļĒāļēāļĒāđāļŦāļāļ HelloBPEL āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Process Files āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > WSDL Document
2. āđāļāđāļāļāļ°āļĨāļāļ New WSDL DocumentāļāļēāļŦāļāļ File Name: āđāļāļ HelloSample āđāļĨāļāļ WSDL Types: āđāļāļ Concrete WSDL Document āđāļĨāļ°āđāļĨāļāļ Type: āđāļāļ RPC Literal āļāļāđāļŠāļāļāđāļāļĢāļāļ 1 āļāļēāļāļāļāļāļ Next āđāļāļāđāļāļŦāļāļēāļāļāđāļ
73
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 1 āđāļŠāļāļāļāļēāļĢāļŠāļĢāļēāļ WSDL Document āđāļāļāđāļāļ SOAP
3. āđāļāļŠāļ§āļāļāļāļ Input: āļāļēāļŦāļāļ Message Part Name āđāļāļ inputType (āđāļĄāļāđāļŠāļāļāļĄāļĨāđāļŠāļĢāļāđāļĨāļ§ āļāļāļāļāļ Enter āļŦāļāļāļāļĢāļāđāļŠāļĄāļ) āđāļĨāļ°āļŠāļ§āļāļāļāļOutput: āļāļēāļŦāļāļ Message Part Name āđāļāļ resultType āļāļāļāļ°āđāļāđāļāļāļ°āļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 2
74
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāļāļēāļŦāļāļāļāļēāđāļŦāļāļ WSDL Document
4. āļāļ Next > āđāļĨāļ§āļāļ Finish āļāļ°āđāļāđāļāļĨ HelloSample.wsdl āļāļāļĢāļāļ 3
75
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļāļāđāļāļĨ HelloSample.wsdl
3. āļāļēāļĢāļāļāļāļē BPEL Process āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ BPEL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āļāļāļ°āđāļāđāļāđāļāļĢāđāļāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ 1) āļāļēāļĢāđāļāļĄ partner link
āļāļāđāļāļĨāļāļĨāļāļāđāļāļĨ helloBPEL.bpel āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ HelloSample.wsdl āđāļāļŦāļāļēāļāļēāļ Project āļĄāļēāđāļ§āļ āļēāļĒāđāļāļŦāļāļēāļāļēāļ design āļāļāđāļŠāļāļāđāļāļĢāļāļ 4
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢāđāļāļĄ PartnerLink āđāļāļēāđāļāđāļ helloBPEL.bpel
76
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
2) āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Receive
1. āđāļāđāļāļĨ HelloBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Receive āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āļĄāļēāđāļ§āļāļĢāļāļāļĨāļāļāļāļĢāļāļĢāļĢāļĄāļ§āļēāļāđāļāļĨāļē
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Receive āļāļāļ Receive1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļĨāļāļāđāļāļāļāļ Edit āļāļēāđāļŦāļāļāļāļāļāļĢāļāļĢāļĢāļĄ Receive1
3. āđāļāđāļāļāļ°āļĨāļāļ Receive1 [Receive] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ start āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ PartnerLink1
4. āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create.. āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ inputVar āđāļĨāļ§āļāļ OK āļāļ°āđāļāđāļāļāļ°āļĨāļāļāļāļāļĢāļāļ 5
āļĢāļāļ 5 āđāļŠāļāļāļāļēāļĢāļāļēāļŦāļāļāļāļēāđāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Receive
5. āļāļ OK āļāļ°āđāļ HelloBPEL.bpel āļāļāļĢāļāļ 6
77
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 6 āđāļŠāļāļāļāļēāļĢāļĢāļāļāļēāđāļāļēāļĄāļēāļāļēāļ PartnerLink1
3) āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Reply
1. āđāļāđāļāļĨ HelloBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Reply āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĨāļāļāļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ Process End
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Reply āļāļāļ Reply1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļĨāļāđāļāļāļāļ Edit āļāļāļāļāļĢāļāļĢāļĢāļĄ Reply1
3. āđāļāđāļāļāļ°āļĨāļāļ Reply1 [Reply] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ end āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ PartnerLink1
4. āđāļāļāļāļ Output Variable: āļāļāļāļĄ Create.. āđāļĄāļāđāļāļāļ°āļĨāļāļ New Output Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ outputVar āđāļĨāļ§āļāļ OK
4) āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Assign
1. āđāļāđāļāļĨ HelloBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļāļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ end
2. āđāļāļŦāļāļēāļāļēāļ Editor āļāļāđāļāļĨāļāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign1 āđāļāļāđāļāļĒāļāđāļāļ Mapper āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢāđāļĒāļāđāļŦāļāļ inputType āļāļāļ inputVar āđāļāļŦāļāļēāļāļēāļāļāļēāļāļāļēāļĒāđāļāļēāļāļāđāļŦāļāļ resultType āļāļāļ outputVar āđāļāļŦāļāļēāļāļēāļāļāļēāļāļāļ§āļē (āđāļāļāļāļēāļĢāļāļāļāļāļāļēāļāļēāļāļāļāļāļāđāļāļĒāļāđāļāļēāļāļāļ) āļāļāļĢāļāļ 7
78
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 7 āđāļŠāļāļāļāļēāļĢāļāļēāļŦāļāļāļāļēāļāļāļ inputType āđāļāļĒāļ resultType
3. āđāļĄāļāđāļĨāļāļāļāļĨāļāļĄāļēāļāđāļāļ Design āļāļ°āđāļ BPEL Process āļāļāđāļŠāļāļāđāļāļĢāļāļ 8
āļĢāļāļ 8 āđāļŠāļāļ BPEL Process āļāļāļ helloBPEL.pbel
4. āļāļāļāļĄ Save
79
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ Composite Application āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļ Composite Application āđāļāļāļĢāļ SampleBPEL āļāļ BPEL Engine āļāđāļāļĄāļēāļāļĢāļāļēāļ JBI āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File => New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ Composite
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ HelloApplication āđāļĨāļ§āļāļ Finish 4. āđāļŦāļĨāļēāļāđāļāļĢāđāļāļ HelloBPEL āļāļāļĒāđāļāļŦāļāļēāļāļēāļ Project āļĄāļēāđāļŠāđāļ JBI Modules āļāļāļĒāđāļāļŦāļāļēāļāļēāļ Design
āļāļāđāļŠāļāļāđāļāļĢāļāļ 9
āļĢāļāļ 9 āđāļŠāļāļāđāļāļĄ JBI Modules āđāļ HelloApplication
5. āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢāļāļĨāļāļāļ§āļēāļ HelloApplication āđāļĨāļ§āđāļĨāļāļ Clean and Build āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 10
āļĢāļāļ 10 āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢ Clean and Build āđāļāļĢāđāļāļ HelloApplication
80
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ
1. āļāļĨāļāļāļ§āļēāļāđāļāļĢāđāļāļ HelloApplication āđāļĨāļ§āđāļĨāļāļ Deploy 2. āđāļāļŦāļāļēāļāļēāļ Project āđāļĨāļāļāđāļŦāļāļ HelloApplication > Test āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ New Test Case 3. āđāļāđāļāļāļ°āļĨāļāļ New Test Case āđāļŦāļāļēāļŦāļāļ Test Case Name: āđāļāļ TestCase1 āđāļĨāļ§āļāļ Next 4. āđāļāļŦāļāļēāļāļāđāļāđāļŦāđāļĨāļāļāđāļāļĨ WSDL āđāļāļ HelloSample.wsdl āļāļāļĒāđāļ HelloBPEL āđāļĨāļ§āļāļ Next 5. āđāļāļŦāļāļēāļāļāđāļāđāļŦāđāļĨāļāļ HelloSampleOperation āđāļĨāļ§āļāļ Finish 6. āļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāđāļāļĨ Input.xml āđāļŦāđāļ source code āļŠāļ§āļ inputType āļāļāļ
<inputType>Hello Thana</inputType>
7. āđāļĨāļāļāđāļŦāļāļ TestCase1 āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Run 8. āļāļ°āđāļŦāļāļāļĨāļĨāļāļāļāļĢāļēāļāļāđāļāđāļāļĨ Output.xml āļāļāđāļŠāļāļāđāļ Listing āļ 1 [āļŦāļĄāļēāļĒāđāļŦāļāļāļēāļĢāđāļŠāļāļāļāļĨāļāđāļāļ Failed
āđāļāļāļāļāđāļāļāļāļāļēāļāļĄāļāļēāļĢāļāļēāļāļĨāļĨāļāļāļāđāļāđāļāđāļāļĢāļĒāļāđāļāļĒāļāļāļāđāļāļĨ Output.xml āļāļāļāļēāđāļĄāļāļĢāļāļāļ āļāļāļ°āđāļŠāļāļāļāļĨāļĨāļāļāđāļāļ Failed āļāļāļāļāļāļēāļĢāļĢāļāļāļĢāļāđāļĢāļ āļāļāļĒāļāđāļĄāļĄāļāļāļĄāļĨāđāļ Output.xml āđāļŦāđāļāļĢāļĒāļāđāļāļĒāļ āļāļāđāļāļāļĨāļĨāļāļāđāļāļ Failed āđāļāļāļēāđāļĢāļēāđāļĨāļāļ Run āđāļāļāļĢāļāļāļāđāļ āđāļāļĒāļāđāļĄāđāļāđāļāļĨāļĒāļāļāļēāđāļ Input.xml āļāļ°āļāļēāđāļŦāđāļāļāļĨāļĨāļāļāļāļĢāļāļāļāļāļāļĄāļĨāđāļ Output.xml āļāļāļ°āđāļĄāđāļŠāļāļāļāļĨāđāļāļ Failed āļāļāļāļāđāļ āļāļāđāļŠāļāļāļāļ§āļāļĒāļēāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāļĢāļāđāļāļĢāļāļ 11
āļĢāļāļ 11 āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāļĢāļ TestCase1
81
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Listing āļ 1 āļāļĨāļĨāļāļāļāļāļĒāđāļāđāļāļĨ Output.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:HelloSampleOperationResponse
xmlns:m="http://j2ee.netbeans.org/wsdl/HelloBPEL/HelloSample"> <resultType>Hello Thana</resultType> </m:HelloSampleOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
82
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 11: BPEL for Writing to File
āđāļāļāļāļāļŦāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļ Business Process āđāļāļāđāļāļĒāļāļāļāļĄāļĨāļāđāļāļĢāļāļāđāļāļāļēāļāļĨāļāđāļāļĨ āđāļāļĒāđāļāđāļāļĢāđāļāļĢāļĄ BPEL āļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ
1. āļāļāļāļēāđāļāļĢāđāļāļ FileBPEL 2. āļāļāļāļēāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļ SOAPBinding 3. āļāļāļāļēāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļ FileBinding 4. āļāļāļāļē BPEL Process 5. āļāļāļāļēāđāļāļĢāđāļāļ Composite Application 6. āļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ TestCase 7. āļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ Web Application
1. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ FileBPEL āđāļāļāļāļāļŦāļāļāļāļ°āļāļēāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļāļŠāļēāļŦāļĢāļ Service Oriented Architecture āļāļāļĄāļēāđāļŦāļĄ āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ BPEL Module
āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ FileBPEL āđāļĨāļ§āļāļ Finish
2. āļāļēāļĢāļāļāļāļēāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļ SOAPBinding āļāļāļāļāļāļāļāđāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļ SOAPBinding āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āļāļāļ°āļāļāļāļēāļāļ āđāļāļāđāļŦāļŠāļēāļĄāļēāļĢāļāđāļĢāļĒāļāđāļāđāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāđāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Process Files āđāļĨāļāļ New > WSDL Document 2. āđāļāđāļāļāļ°āļĨāļāļ New WSDL Document āļāļēāļŦāļāļ File Name: āđāļāļ DataIO āļāļēāļŦāļāļ WSDL Type: āđāļāļ
Concrete WSDL Document āđāļĨāļ°āļāļēāļŦāļāļ Binding āđāļāļ SOAP āđāļĨāļ° Types āđāļāļ RPC Literal āļāļāđāļŠāļāļāđāļāļĢāļāļ 1 āđāļĨāļ§āļāļ Next
83
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 1 āđāļŠāļāļāļāļēāļĢāļāļēāļŦāļāļāļāļē WSDL Document
3. āđāļāļŦāļāļēāļāļāđāļ āļŠāļēāļŦāļĢāļāļŠāļ§āļāļāļāļ Input: āļāļēāļŦāļāļ Message Part Name āđāļāļ id āļāļ Add āđāļĨāļ§āđāļāļĄ input āļŠāļēāļŦāļĢāļ firstName, lastName, salary (int) āđāļĨāļ°āļŠāļēāļŦāļĢāļāļŠāļ§āļāļāļāļOutput: āļāļēāļŦāļāļ Message Part Name āđāļāļ result āļāļāđāļŠāļāļāđāļāļĢāļāļ 2 āļāļēāļāļāļāļāļ Next āđāļĨāļ§āļāļ Finish
84
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 2 āđāļŠāļāļāļāļēāļĢāđāļŠāļāļē Input āđāļĨāļ° Output Messages
3. āļāļēāļĢāļāļāļāļēāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļ FileBinding
āļāļāļāļāļāļāļāđāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļ FileBinding āđāļāļāđāļāļĒāļāļĨāļāđāļāļĨ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Process Files āđāļŦāđāļĨāļāļ New > WSDL Document 2. āđāļāđāļāļāļ°āļĨāļāļ New WSDL Document āļāļēāļŦāļāļ File Name: āđāļāļ FileResult āđāļŦāđāļĨāļāļ WSDL Type:
āđāļāļ Concrete WSDL Document Binding āđāļāļ FILE āđāļĨāļ° Types āđāļāļ Write āļāļāđāļŠāļāļāđāļāļĢāļāļ 3 āļāļēāļāļāļāļāļ Next
85
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļāļāļēāļĢāđāļŠāļāļēāļŠāļēāļŦāļĢāļ New WSDL Document
3. āđāļāļŦāļāļēāļāļāđāļ āļāļēāļŦāļāļāļāļē Path: āđāļāļ C:\SOA\output āđāļāļĒāļāļ Browse āđāļāļāđāļĨāļāļ Path: (āļāļ°āļāļāļāļāļēāļāļēāļĢāļŠāļĢāļēāļ folder āļāļāļāļĄāļēāļāļāļ) āđāļĨāļ°āđāļĨāļāļ File Exists: āđāļāļ Append to Existing File āļāļāđāļŠāļāļāđāļāļĢāļāļ 4 āļāļēāļāļāļāļāļ Finish
86
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 4 āđāļŠāļāļāļāļēāļĢāļāļēāļŦāļāļāļāļēāļŠāļēāļŦāļĢāļāļāļēāļĢāđāļāļĒāļāđāļāļĨ
4. āļāļēāļĢāļāļāļāļē BPEL Process āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ BPEL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āļāļāļ°āđāļāđāļāđāļāļĢāđāļāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ 4.1 āļāļēāļĢāđāļāļĄ partner link
1. āļāļāđāļāļĨāļāļĨāļāļāđāļāļĨ fileBPEL.bpel āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ DataIO.wsdl āđāļāļŦāļāļēāļāļēāļ Project āļĄāļēāđāļ§āđāļāđāļāļāđāļāļēāļāļēāļāļāļēāļĒāļĄāļāļ āļēāļĒāđāļāļŦāļāļēāļāļēāļ design
2. āļāļāđāļāļĨāļāļĨāļāļāļĢāļāļāļāļāļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđāļāļĨāļĒāļāļāļāđāļāļ DataIOPartnerLink 3. āļĨāļēāļāđāļāļāļāļ FileResult.wsdl āđāļāļŦāļāļēāļāļēāļ Project āļĄāļēāđāļ§āđāļāđāļāļāđāļāļēāļāļēāļāļāļ§āļēāļĄāļāļ āļēāļĒāđāļāļŦāļāļēāļāļēāļ
design 4. āļāļāđāļāļĨāļāļĨāļāļāļĢāļāļāļāļāļ§āļēāļĄ PartnerLink1 āđāļĨāļ°āđāļāļĨāļĒāļāļāļāđāļāļ FilePartnerLink
87
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 5
āļĢāļāļ 5 āđāļŠāļāļāļāļēāđāļŦāļāļāļāļāļ DataIOPartnerLink āđāļĨāļ° FilePartnerLink āđāļāđāļāļĨ fileBPEL.bpel
4.2 āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Receive
1. āđāļāđāļāļĨ fileBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Receive āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āļāļĢāļāļāļĨāļāļāļāļĢāļāļĢāļĢāļĄāļ§āļēāļāđāļāļĨāļē
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Receive āļāļāļ Receive1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Receive1
3. āđāļāđāļāļāļ°āļĨāļāļ Receive1 [Receive] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ start āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ DataIOPartnerLink
4. āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ inData āđāļĨāļ§āļāļ OK
4.3 āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Reply
1. āđāļāđāļāļĨ fileBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Reply āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļŦāļĨāļāļāļēāļāļāļĢāļāļĢāļĢāļĄ start
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Reply āļāļāļ Reply1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Reply1 3. āđāļāđāļāļāļ°āļĨāļāļ Reply1 [Reply] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ end āđāļĨāļ°āđāļĨāļāļ Partner
Link: āđāļāļ DataIOPartnerLink
88
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āđāļāļāļāļ Output Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Output Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ outData āđāļĨāļ§āļāļ OK
4.4 āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Invoke āļŠāļēāļŦāļĢāļ write
āđāļāđāļāļĨ fileBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Invoke āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ start āļāļāļāļĢāļāļĢāļĢāļĄ end
āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Invoke āļāļāļ Invoke1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Invoke1 āđāļāđāļāļāļ°āļĨāļāļ Invoke1 [Invoke] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ invokeWriteToFile
āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ FilePartnerLink āđāļĨāļ° Operation: āđāļāļ write āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name:
āđāļāļ inFile āđāļĨāļ§āļāļ OK 4.5 āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Assign
1. āđāļāđāļāļĨ fileBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ invokeWriteToFile
2. āļāļāđāļāļĨāļāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign1 āđāļāļŦāļāļēāļāļēāļ BPEL Mapper āļāļēāļāļēāļĢāđāļāļāļĄāđāļĒāļāļāļāļĄāļĨāđāļāđāļŦāļāļ inData āļāļēāļāļāļēāļāļāļēāļĒāļĄāļ āđāļāļĒāđāļĨāļāļ String > Concat āļāļēāļāļāļāđāļāļāļĄāđāļĒāļ
1. firstName āđāļāļēāđāļāļ String āļāļāļāļ 1 2. â â āđāļāļ String āļāļāļāļ 2 (āđāļāļĒāļāļēāļĢāļāļāļāļĄ Space Bar āļāļāļāļĒāļāļāļĢāļ) 3. lastName āđāļāļēāđāļāļ String āļāļāļāļ 3 4. â => â āđāļāļ String āļāļāļāļ 4 5. salary āđāļāļēāđāļāļ String āļāļāļāļ 5 6. āļāļēāļāļāļāđāļāļāļĄāđāļĒāļ return String āđāļāļĒāļ part1 āđāļ inFile āļāļēāļāļāļēāļāļāļ§āļēāļĄāļ āļāļāđāļŠāļāļāđāļāļĢāļāļ 6
89
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 6 āđāļŠāļāļ Business Rule āļĢāļ°āļŦāļ§āļēāļ start āđāļĨāļ° invokeWriteToFile
āļŦāļĄāļēāļĒāđāļŦāļ āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļāļĄāļāļēāļāļ§āļāđāļāļ§āđāļāđāļāļĒāļāļēāļĢāļĨāļēāļāđāļāļēāđāļāļ āļāļāļ Concat āļāļēāļāļ§āļāđāļāļ§āļāļāļ°āļāļāđāļāļĄāđāļŦāļāļāļ
3. āđāļāđāļāļĨ fileBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ invokeWriteToFile āļāļāļāļĢāļāļĢāļĢāļĄ end
4. āđāļāļŦāļāļēāļāļēāļ Editor āđāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign2 āđāļāļŦāļāļēāļāļēāļ BPEL Mapper āđāļĨāļāļ String > String Literal āđāļĨāļ§āļāļēāļŦāļāļāļāļēāđāļāļ Success āđāļāļāļĄāđāļĒāļāļāļĨāļāļĢāļ°āļŦāļ§āļēāļ string literal āļāļ result āļāļāļĒāđāļ outData āļāļāđāļŠāļāļāđāļāļĢāļāļ 7
āļĢāļāļ 7 āđāļŠāļāļBusiness Rule āļĢāļ°āļŦāļ§āļēāļ invokeWriteToFile āđāļĨāļ° end
5. āđāļĢāļēāļāļ°āđāļāđāļāļĢāđāļāļĢāļĄ BPEL āļāļāđāļŠāļāļāđāļāļĢāļāļ 8
90
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 8 āđāļŠāļāļ BPEL Process āļāļāļāļāļāļĢāļ°āļāļ
6. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ FileBPEL āđāļĨāļāļ Clean and Build
5. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ Composite Application āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļ Composite Application āđāļāļāļāļĢāļ FileBPEL āļāļ BPEL Engine āļāđāļāļĄāļēāļāļĢāļāļēāļ JBI āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ Composite
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ FileCompositeApp āđāļĨāļ§āļāļ Finish 4. āđāļŦāļĨāļēāļāđāļāļĢāđāļāļ FileBPEL āļāļāļĒāđāļāļŦāļāļēāļāļēāļ Project āļĄāļēāđāļŠāđāļ JBI Modules āļāļāļĒāđāļāļŦāļāļēāļāļēāļ Design 5. āļāļĨāļāļāļ§āļēāļ FileCompositeApp āđāļĨāļāļ Clean and Build āļāļ°āđāļŦāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 9
91
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 9 āđāļŠāļāļ Service Assembly āļāļāļ FileCompositeApp
6. āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ TestCase
1. āļāļēāļāļēāļĢ Deploy āđāļāļĢāđāļāļ FileCompositeApp 2. āđāļāļŦāļāļēāļāļēāļ Project āđāļĨāļāļāđāļŦāļāļ FileCompositeApp > Test āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ New Test Case 3. āđāļāđāļāļāļ°āļĨāļāļ New Test Case āđāļŦāļāļēāļŦāļāļ Test Case Name: āđāļāļ TestCase1 āđāļĨāļ§āļāļ Next 4. āļŦāļāļēāļāļāđāļāđāļ FileBPEL āđāļŦāđāļĨāļāļāđāļāļĨ WSDL āđāļāļ DataIO.wsdl āđāļĨāļ§āļāļ Next 5. āđāļāļŦāļāļēāļāļāđāļāđāļŦāđāļĨāļāļ DataIOOperation āđāļĨāļ§āļāļ Finish 6. āļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāđāļāļĨ Input.xml āđāļŦāđāļ source code āļāļāļ
<id>1234</id> <firstName>Somjai</firstName> <lastName>Jaidee</lastName> <salary>38000</salary>
7. āļāļāļāļĄ Save āđāļĨāļāļāđāļŦāļāļ TestCase1 āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Run 8. āļāļ°āđāļŦāļāļāļĨāļĨāļāļāļāļĢāļēāļāļāđāļāđāļāļĨ Output.xml āļāļāđāļŠāļāļāđāļāļĢāļāļ 10
āļĢāļāļ 10 āđāļŠāļāļāļāļĨāļĨāļāļāļāđāļāļāļēāļāļāļēāļĢāļĢāļ TestCase1
9. āđāļĨāļ°āļāļ°āđāļāđāļāļĨ output.xml āđāļāđāļāđāļĢāļāļāļāļĢ c:\SOA\output āļāļāļĄāļāļāļĄāļĨāļāļāļ
Somjai Jaidee => 38000
92
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļēāļ Web Application
āļāļēāļāļēāļĢāļāļāļŦāļēāļāļēāđāļŦāļāļ url āļāļāļ soap:address āļāļēāļĄāļāļāļāļāļāļāļāļ 1. āđāļ Service Assembly āļāļāļ FileCompositeApp āđāļŦāļāļĨāļāļāļ§āļēāļ DataIOPort āđāļĨāļāļ Clone WSDL to
edit āļāļāđāļŠāļāļāđāļāļĢāļāļ 11
āļĢāļāļ 11 āđāļŠāļāļāļāļēāļĢāđāļĨāļāļ Clone WSDL Port to edit āļāļāļ DataIOPort
2. āļāļēāļāļāļāđāļŦāļāļĨāļāļāļ§āļēāļ DataIOPort āļāļāļāļĢāļāđāļĨāļ§āđāļĨāļāļ Properties 3. āđāļāļŦāļāļēāļāļēāļ Properties āđāļŦāļāļēāļāļēāļĢ copy āļāļēāļāļāļ Location āđāļ soap:address 4. Location āļāļāļ soap:address āļāļ°āļĄāļāļēāđāļāļāļāļ§āđāļāļĢāļāļāļ ${HttpDefaultPort} āļāļāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļēāļāļāļ
${HttpDefaultPort} āđāļāļāļēāļāļāļēāļĢāđāļĨāļāļāļāđāļāļ Services āđāļŦāļāļ Servers > GlassFish Server 3.1.2 > JBI > Binding Components > sun-http-binding āļāļĨāļāļāļ§āļēāđāļĨāļ§āđāļĨāļāļ properties āļāļ°āđāļŦāļ Default HTTP Port Number āļāļāļāļ°āļĄāļāļēāđāļāļ 9080
5. āļāļāļŠāļāļāđāļāļĒāđāļāļ Web Browser āđāļĨāļ§ paste āļāļēāļ copy āđāļ§ āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļ URL
āđāļŦāđāļāļāļāļāļ http://localhost:9080/DataIOService/DataIOPort?WSDL
āļāļāļāļēāđāļāļĢāđāļāļĢāļĄ Web Application āđāļāļāđāļŦāļāđāļāļāļāļāļāļēāļāļāļĄāļĨāļāļēāļāđ āļāļēāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļāļēāļĢāđāļāļĒāļāļāļāļĄāļĨāļĨāļāđāļāļĨ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ Java Web āđāļĨāļ° Web Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ FileBPUI āđāļĨāļ§āđāļĨāļāļ Project Location āđāļāļ folder
āļāđāļĢāļēāļāļāļāļāļēāļĢāļāļ°āđāļāļProject āđāļ§ 4. āļāļēāļāļāļāđāļĨāļāļ Server āđāļāļ GlassFish Server 3.1.2 āļāļēāļŦāļāļ Jave EE Version: āđāļāļ Java EE 6
āđāļĨāļ§āļāļ Finish 5. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ FileBPUI āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other āđāļŦāđāļĨāļāļ Categories āđāļāļ Web
Services āđāļĨāļ° File Types āđāļāļ Web Service Client āđāļĨāļ§āļāļ Next 6. āđāļāđāļāļāļ°āļĨāļāļ New Web Service Client āđāļŦāđāļĨāļāļ WSDL URL: āđāļĨāļ§āđāļŠ URL āđāļāļ
http://localhost:9080/DataIOService/DataIOPort?WSDL (āļāļ§āļĢāļāļ°āļāļēāļāļēāļĢ copy āļĄāļēāļāļēāļ
Web Browser āđāļĄāļāļ§āļĢāļāļāļ°āļāļĄāļāđāļāļ)
93
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ FileBPUI āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > HTML 8. āļāļēāļŦāļāļ HTML File Name: āđāļāļ employeeInput āđāļĨāļ§āļāļ Finish 9. āđāļāļĄāđāļāļĄ source code āļāļāļāđāļāļĨ employeeInput.html āļāļāļ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="EmployeeServlet" method="post"> ID: <input name="id" /><br> Firstname: <input name="firstname"/><br> Lastname: <input name="lastname"/><br> Salary: <input name="salary"/><br><br> <input type="submit" value="Insert" /> </form> </body> </html>
10. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ FileBPUI āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Servlet 11. āļāļēāļāļāļāđāļŦāļāļēāļŦāļāļāļāļāđāļāļ EmployeeServlet āđāļĨāļ° Package: āđāļāļ controller āđāļĨāļ§āļāļ Finish 12. āļ āļēāļĒāđāļāđāļĄāļāļāļ processRequest āđāļāđāļāļĨ EmployeeServlet.java āđāļŦāļĨāļ Comment
āļāļāļŦāļĄāļāļāļāļĒāļ āļēāļĒāđāļāđāļāļĢāļāļāļŦāļĄāļēāļĒ /* âĶ */ āļĢāļ°āļŦāļ§āļēāļāļāļēāļŠāļ try āđāļĨāļ° finally 13. āļāļĨāļāļāļ§āļēāļĢāļ°āļŦāļ§āļēāļāļāļēāļŠāļ try āđāļĨāļ° finally āđāļĨāļ§āđāļĨāļāļ Insert Code āļāļēāļāļāļāđāļŦāđāļĨāļāļ Call Web Service
Operation āđāļŦāđāļĨāļāļāđāļāļ DataIOOperation āđāļĨāļ§āļāļ OK 14. āļāļēāļāļāļāđāļŦāļāļēāļāļēāļĢāļāļĢāļāļāļĢāļ Source code āļāļāļāđāļāļĨ EmployeeServlet.java āļāļāļ (āđāļŠāļāļāđāļāļāļēāļ°āđāļĄāļāļāļ
processRequest)
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { // Call Web Service Operation org.netbeans.j2ee.wsdl.filebpel.dataio.DataIOPortType port =
service.getDataIOPort();
// TODO initialize WS operation arguments here java.lang.String id = request.getParameter("id"); java.lang.String firstname = request.getParameter("firstname"); java.lang.String lastname = request.getParameter("lastname"); String tmp = request.getParameter("salary"); int salary = Integer.parseInt(tmp); // TODO process result here java.lang.String result = port.dataIOOperation(id, firstname,
lastname, salary); out.println("Result = "+result);
94
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
} catch (Exception ex) { out.println(ex); } finally { out.close(); } }
15. āļāļĨāļāļāļ§āļēāļ FileBPUI āđāļĨāļ§āđāļĨāļāļ Clean and Build 16. āļāļĨāļāļāļ§āļēāļ employeeInput.html āđāļĨāļ§āđāļĨāļāļ Run File 17. āļŦāļĨāļāļāļēāļāđāļŠāļāļāļĄāļĨ āļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 12
āļĢāļāļ 12 āđāļŠāļāļāļāļēāļĢāđāļŠāļāļāļĄāļĨ āđāļĨāļ°āļāļĨāļĨāļāļāļāđāļ
18. āđāļĨāļ°āđāļāļĨ output.xml āđāļāđāļāđāļĢāļāļāļāļĢ c:\SOA\output āļāļ°āļĄāļāļāļĄāļĨāļāļāļ
Somjai Jaidee => 38000 Nipa Jingjai => 738000
95
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
Exercise 12 Simple BPEL Invoking Web Services
āđāļāļāļāļāļŦāļāļāđāļāļāļāļēāļĢāđāļāļĒāļ Business Process āđāļāļāđāļĢāļĒāļāđāļ Internal Web Service āļāļāļāļāļēāļāļāļĄāļēāđāļāļ āđāļĨāļ° External Web Service āļāļāļāļāļāļāđ āļāļĄāļāļĒ āđāļāļĢāđāļāļĢāļĄ Web Service āļāļāļ°āļāļāļāļēāļāļāļāļ TaxService āļāļĄāđāļāđāļāļāļĢāđāļĢāļāļāļāļāļ calculateTax āđāļĨāļ° External Web Service āļāļāđāļāļāļĢāļ§āļŠāļāļēāļāļ§āļāļāļāļĢāļēāđāļĨāļāđāļāļĨāļĒāļāļāļāļĒāļ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl
āļāļāļāļāļāđāļāļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļĢāļĄ
1. āļāļāļāļē Web Services 2. āļāļāļāļēāđāļāļĢāđāļāļ WSBPEL 3. āļāļāļāļēāđāļāļĨ WSDL 4. āļāļāļāļē Business Process āļŠāļēāļŦāļĢāļāđāļĢāļĒāļ Web Service 5. āļāļāļāļēāđāļāļĢāđāļāļ Composite Application 6. āļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ TestCase 7. āļāļāļāļēāđāļāļĢāđāļāļ ExternalWSBPEL 8. āļāļģāļŦāļāļ External WSDL Document 9. āļāļāļāļēāđāļāļĨ Client WSDL āđāļŦāļĄ 10. āļāļāļāļē Business Process āđāļŦāļĄāđāļāļāđāļĢāļĒāļ External Web Service 11. āļāļāļāļēāđāļāļĢāđāļāļ Composite Application āļŠāļēāļŦāļĢāļāđāļĢāļĒāļ Business Process āđāļŦāļĄ āđāļĨāļ°āļāļēāļāļēāļĢāļāļāļŠāļāļ
āļāļēāļĢāļāļāļāļē Web Services
āļāļāļāļāļāļāļēāļĢāļāļāļāļē Web Service āļāļāļ°āđāļāļāļāļēāļĢāļāļāļāļē calculateTax Web Service āđāļāļāđāļāļĒāļ§āļāļāđāļ āđāļāļāļāļāļŦāļāļāļāļēāļāļĄāļē āđāļāļĒāļĄ source code āļāļāļ
@WebService public class TaxService {
@WebMethod public double calculateTax(@WebParam(name = "income") double income) {
return 0.1 * income; } }
96
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ WSBPEL
āđāļāļāļāļāļŦāļāļāļāļ°āļāļēāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļāļŠāļēāļŦāļĢāļ Service Oriented Architecture āļāļāļĄāļēāđāļŦāļĄ āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ BPEL Module āđāļĨāļ§āļāļ
Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ WSBPEL āđāļĨāļ§āļāļ Finish
āļāļēāļĢāļāļāļāļēāđāļāļĨ WSDL
āļāļāļāļāļāļāļāđāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āļāļāļ°āļāļāļāļēāļāļ āđāļāļāđāļŦāļŠāļēāļĄāļēāļĢāļāđāļĢāļĒāļāđāļāđāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāđāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āļāļĒāļēāļĒāđāļŦāļāļ WSBPEL āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Process Files āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > WSDL Document
2. āđāļāđāļāļāļ°āļĨāļāļ New WSDL Document āļāļēāļŦāļāļ File Name: āđāļāļ WebProcessWSDL āļāļēāļŦāļāļ WSDL Type: āđāļāļ Concrete WSDL Document āđāļĨāļ°āļāļēāļŦāļāļ Binding āđāļāļ SOAP āđāļĨāļ° Types āđāļāļ RPC Literal āđāļĨāļ§āļāļ Next
3. āđāļāļŦāļāļēāļāļāđāļ āļŠāļēāļŦāļĢāļāļŠāļ§āļāļāļāļ Input: āļāļēāļŦāļāļ Message Part Name āđāļāļ inputData (āđāļĄāļāđāļŠāļāļēāđāļŠāļĢāļāđāļĨāļ§ āļāļāļāļāļāļāļĄ Enter āļāļ§āļĒāđāļŠāļĄāļ āļĄāļāļ°āļāļāļāļēāļāļ°āļāļĨāļāđāļāđāļāļ part1 āđāļŦāļĄāļāļāđāļāļĄ) āđāļĨāļ°āļŠāļēāļŦāļĢāļāļŠāļ§āļāļāļāļOutput: āļāļēāļŦāļāļ Message Part Name āđāļāļ outputData āļāļ Next āđāļĨāļ§āļāļ Finish
āļāļēāļĢāļāļāļāļē Business Process
āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ BPEL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āļāļāļ°āđāļāđāļāđāļāļĢāđāļāļ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
āļāļēāļĢāđāļāļĄ partner link
āļāļāļāļāļāļāļāļ°āļāļēāļāļēāļĢāļāļēāļŦāļāļ partner link āļŠāļēāļŦāļĢāļ Web Services āļŠāļāļāļāļāļāļ TaxService āđāļĨāļ° WebProcessWSDL āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
97
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
1. āļāļāđāļāļĨāļāļĨāļāļāđāļāļĨ WSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ WebProcessWSDL.wsdl āđāļāļŦāļāļēāļāļēāļ Projects āļĄāļēāđāļ§āļ āļēāļĒāđāļāļŦāļāļēāļāļēāļ design (āđāļāļĒāđāļŦāļĨāļēāļāđāļāļāđāļāļāđāļāļēāđ āđāļĨāļ°āđāļŠāđāļ ) āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļŠāļāļāđāļāļāļ°āļĨāļāļ PartnerLink1 [Partner Link] â Property Editor āđāļŦāļāļēāļŦāļāļāļāļē Name: āđāļāļ ClientPartnerLink āđāļĨāļ§āļāļ OK
2. āđāļāļŦāļāļēāļāļēāļ Projects āļāļĒāļēāļĒāđāļŦāļāļ TaxWSDemo > Web Services āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ TaxService āđāļĨāļ§āđāļĨāļāļāļāļēāļŠāļ Generate and Copy WSDL ...
3. āđāļāđāļāļāļ°āļĨāļāļ Generate and Copy WSDL āđāļŦāđāļĨāļāļāđāļāđāļĢāļāļāļāļĢ src āļ āļēāļĒāđāļ WSBPEL āļāļāđāļŠāļāļāđāļāļĢāļāļ 1 āļāļēāļāļāļāļāļ OK
āļĢāļāļ 1 āđāļŠāļāļāđāļāļāļ°āļĨāļāļ Generate and Copy WSDL
4. āļĨāļēāļ TaxService.wsdl āđāļāđāļ§āļāļēāļāļāļēāļāļāļ§āļēāļāļāļāļŦāļāļēāļāļēāļ design āđāļāļĒāļāļēāļŦāļāļ Name: āđāļāļ TaxPartnerLink āļāļāļāļ°āđāļāļāļĨāļĨāļāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 2
āļĢāļāļ 2 āđāļŠāļāļ PartnerLink āļāļāļŦāļĄāļāļāļāļ WSBPEL
98
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Receive
1. āđāļāđāļāļĨ WSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Receive āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āļāļĢāļāļāļĨāļāļāļāļĢāļāļĢāļĢāļĄāļ§āļēāļāđāļāļĨāļē
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Receive āļāļāļ Receive1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Receive1
3. āđāļāđāļāļāļ°āļĨāļāļ Receive1 [Receive] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ start āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ ClientPartnerLink
4. āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ inData āđāļĨāļ§āļāļ OK
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Reply
1. āđāļāđāļāļĨ WSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Reply āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļāļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ Process End
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Reply āļāļāļ Reply1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Reply1 3. āđāļāđāļāļāļ°āļĨāļāļ Reply1 [Reply] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ end āđāļĨāļ°āđāļĨāļāļ Partner
Link: āđāļāļ ClientPartnerLink 4. āđāļāļāļāļ Output Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Output Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ
Name: āđāļāļ outData āđāļĨāļ§āļāļ OK
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Invoke āļŠāļēāļŦāļĢāļ calcualteTax
1. āđāļāđāļāļĨ WSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Invoke āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ end
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Invoke āļāļāļ Invoke1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Invoke1
3. āđāļāđāļāļāļ°āļĨāļāļ Invoke1 [Invoke] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ invokeWS āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ TaxPartnerLink
4. āđāļāļāļāļ Operation: āđāļĨāļāļ calculateTax 5. āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create.. āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ
Name: āđāļāļ TaxIn āđāļĨāļ§āļāļ OK 6. āđāļāļāļāļ Output Variable: āļāļāļāļĄ Create.. āđāļĄāļāđāļāļāļ°āļĨāļāļ New Output Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ
Name: āđāļāļ TaxOut āđāļĨāļ§āļāļ OK āļāļ°āđāļ BPEL Process āļāļāđāļŠāļāļāđāļāļĢāļāļ 3
99
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 3 āđāļŠāļāļ BPEL Process āđāļāļāļēāļĢāđāļĢāļĒāļāđāļāđāļāļāļĢāđāļĢāļāļ calculateTax
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Assign
1. āđāļāđāļāļĨ WSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ invokeWS
2. āđāļāļŦāļāļēāļāļēāļ Editor āđāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign1 āđāļāļŦāļāļēāļāļēāļ BPEL Mapper āļāļēāļāļēāļĢāđāļĒāļāđāļŦāļāļ inputData āđāļāļŠāļ§āļ inData āļāļēāļāļāļēāļāļāļēāļĒāđāļāļēāļāļāđāļŦāļāļ income āđāļāļŠāļ§āļ TaxIn āļāļēāļāļāļēāļāļāļ§āļē āļāļāđāļŠāļāļāđāļāļĢāļāļ 4
āļĢāļāļ 4 āđāļŠāļāļ Business Rule āļĢāļ°āļŦāļ§āļēāļ start āđāļĨāļ° invokeWS
3. āđāļāđāļāļĨ WSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ invokeWS āļāļāļāļĢāļāļĢāļĢāļĄ end
100
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āđāļāļŦāļāļēāļāļēāļ Editor āđāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign2 āđāļāļŦāļāļēāļāļēāļ BPEL Mapper āļāļēāļāļēāļĢāđāļĒāļāđāļŦāļāļ return āđāļāļŠāļ§āļ TaxOut āđāļāļŦāļāļēāļāļēāļāļāļēāļāļāļēāļĒāđāļāļēāļāļāđāļŦāļāļ outputData āđāļāļŠāļ§āļ outData āđāļāļŦāļāļēāļāļēāļāļāļēāļāļāļ§āļē āļāļāđāļŠāļāļāđāļāļĢāļāļ 5
āļĢāļāļ 5 āđāļŠāļāļ Business Rule āļĢāļ°āļŦāļ§āļēāļ invokeWS āđāļĨāļ° end
5. āđāļĢāļēāļāļ°āđāļāđāļāļĢāđāļāļĢāļĄ BPEL āļāļāđāļŠāļāļāđāļāļĢāļāļ 6
āļĢāļāļ 6 āđāļŠāļāļ BPEL Process āļāļāļāļāļāļĢāļ°āļāļ
6. āļāļāļāļĄ Save āđāļĨāļ° Clean and Build
101
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ Composite Application
āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļ Composite Application āđāļāļāļāļĢāļ WSBPEL āļāļ BPEL Engine āļāđāļāļĄāļēāļāļĢāļāļēāļ JBI āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ Composite
Application āđāļĨāļ§āļāļ Next 3. āļāļģāļŦāļāļ Project Name āđāļāļ WSCompositeApp āđāļĨāļ§āļāļ Finish 4. āđāļāļŦāļāļēāļāļēāļ Project āđāļĨāļāļāđāļŦāļāļ WSCompositeApp āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Add JBI Module 5. āđāļŦāđāļĨāļāļāđāļāļĢāđāļāļ WSBPEL āđāļĨāļ§āļāļāļāļĄ Add Project JAR Files 6. āđāļāļĢāđāļĢāļĄ NetBeans āļāļ°āđāļāļĄāđāļŦāļāļ WSBPEL.jar āļ āļēāļĒāđāļ WSCompositeApp > JBI Module 7. āļāļģāļāļēāļĢ Clean and Build āđāļāļĢāđāļāļ WSCompositeApp 8. āļāļāđāļāļĨāļāļĨāļāļ Service Assemblyāļāļ°āđāļŦāļ CASA Editor āļāļāđāļŠāļāļāđāļāļĢāļāļ 7 āļāļ WSBPEL āļāđāļāļ BPEL
module āļāļ°āļāļāđāļĢāļĒāļāđāļāļĒ SOAP request āđāļāđāļĄāđāļŦāļTaxPartnerLink āđāļĢāļĒāļāđāļ Web Service āđāļ
āļĢāļāļ 7 āđāļŠāļāļ CASA Editor āļāļāļ WSBPEL
9. āđāļāļāļĢāļ°āļ Web Service āļāļāļ°āđāļĢāļĒāļāđāļāđāļŦāļĨāļēāļāđāļāļāļāļ soap āļāļāļĒāđāļ palette āļĄāļēāđāļ§āđāļāļŠāļ§āļ WSDL Ports āļāļāļ CASA Editor āđāļĨāļ°āļāļģāļāļēāļĢāđāļāļāļĄāđāļĒāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 8
102
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 8 āđāļŠāļāļāļāļēāļĢāđāļāļāļĄāđāļĒāļāļāļēāļ WSBPELāđāļāļĒāļ SOAP
10. āļĢāļ°āļ endpoint āļāļāļ WSDL port āđāļāļĒāļāļēāļĢāļāļĨāļāļāļ§āļēāļ casaPort1 āđāļĨāļ§āđāļĨāļāļ Properties āđāļĨāļ§āļāļēāļŦāļāļāļāļē Location āđāļāļ http://localhost:8080/TaxWSDemo/TaxService āđāļĨāļ° Endpoint Name āđāļāļ TaxService
11. Save āđāļĨāļ°āļāļģāļāļēāļĢ Deploy āđāļāļĢāđāļāļ WSCompositeApp
āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ TestCase
1. āđāļāļŦāļāļēāļāļēāļ Project āđāļĨāļāļāđāļŦāļāļ WSCompositeApp > Test āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ New Test Case 2. āđāļāđāļāļāļ°āļĨāļāļ New Test Case āđāļŦāļāļēāļŦāļāļ Test Case Name: āđāļāļ TestCase1 āđāļĨāļ§āļāļ Next 3. āļŦāļāļēāļāļāđāļāđāļ WSBPEL āđāļŦāđāļĨāļāļāđāļāļĨ WSDL āđāļāļ WebProcessWSDL.wsdl āđāļĨāļ§āļāļ Next 4. āđāļāļŦāļāļēāļāļāđāļāđāļŦāđāļĨāļāļ WebProcessWSDLOperation āđāļĨāļ§āļāļ Finish 5. āļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāđāļāļĨ Input.xml āđāļŦāđāļ source code āļŠāļ§āļ inputData āļāļāļ
<inputData>400000</inputData>
6. āļāļāļāļĄ Save āđāļĨāļāļāđāļŦāļāļ TestCase1 āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Run 7. āļāļ°āđāļŦāļāļāļĨāļĨāļāļāļāļĢāļēāļāļāđāļāđāļāļĨ Output.xml āļāļāļ
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:WebProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/WebProcessWSDL"> <outputData xmlns="">33500.0</outputData> </m:WebProcessWSDLOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
103
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļŦāļĄāļēāļĒāđāļŦāļ
āļāļĢāļāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļāđāļ āđāļŦāđāļāļ GlassFish Server 3.1.2 > JBI > Service Assemblies āļāļāđāļŠāļāļāđāļāļĢāļāļ 9 āđāļĨāļ§āļāļģāļāļēāļĢ Undeploy āđāļāļĢāđāļāļāļāļāđ āļāļāļāļāļāļŦāļĄāļ āđāļŦāđāļŦāļĨāļāđāļāļāļēāļ°āđāļāļĢāđāļāļ WSCompositeApp āđāļĨāļ§āļĨāļāļāļĢāļāđāļŦāļĄāļāļāļāļĢāļ
āļĢāļāļ 9 āļāļēāļĢ Updeploy āđāļāļĢāđāļāļāļāļāđ āļāļāļĒāđāļ Service Assemblies āļāļāļāļāļāļŦāļĄāļ
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ ExternalWSBPEL
āđāļāļāļāļāļŦāļāļāļāļ°āļāļēāļāļēāļĢāļŠāļĢāļēāļāđāļāļĢāđāļāļāļŠāļēāļŦāļĢāļ Service Oriented Architecture āļāļāļĄāļēāđāļŦāļĄ āđāļāļĒāļāļ°āļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
4. āđāļĨāļāļāđāļĄāļ File > New Project 5. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ BPEL Module āđāļĨāļ§āļāļ
Next 6. āļāļēāļŦāļāļ Project Name āđāļāļ ExternalWSBPEL āđāļĨāļ§āļāļ Finish
104
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļāļāļāļē External WSDL
āļāļāļāļāļāļāļāđāļāļāļ°āđāļāļāļāļēāļĢāļāļāļĨāļāļāđāļĢāļĒāļāđāļ External Web Service āļŠāļēāļŦāļĢāļāļāļēāļĢāļāļēāļāļ§āļāļāļāļĢāļēāđāļĨāļāđāļāļĨāļĒāļ āđāļāļĒāļāļāļāļāļāđāļĢāļāļāļ°āļāļāļāļĢāļ°āļ WSDL āļāļāļ External Web Service āļāļāļāļĨāļēāļ§ āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āļāļĒāļēāļĒāđāļŦāļāļ ExternalWSBPEL āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Process Files āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > Other..
2. āđāļāđāļāļāļ°āļĨāļāļ New File āđāļŦāđāļĨāļāļ Categories āđāļāļ XML āđāļĨāļ° Projects āđāļāļ External WSDL Document(s) āđāļĨāļ§āļāļ Next
3. āđāļāļŦāļāļēāļāļāđāļ āđāļĨāļāļ Form URL: āđāļĨāļ§āļāļēāļŦāļāļāļāļēāđāļāļ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl āđāļĨāļ§āļāļ Finish
4. āđāļāļĢāđāļāļ ExternalWSBPEL āļāļ°āđāļŠāļāļāđāļŦāļāļ www.webservicex.com āļāļĄ CurrencyConvertor.asmx.wsdl āļāļāļĄāļē
5. External WSDL āļāđāļĢāļĒāļāļĄāļēāļāļ°āļĄāđāļāļĢāļāļŠāļĢāļēāļāļāļāļĢāļāļ 10 āđāļāđāļāļāļāļāļēāļ WSDL āļāļāļ°āđāļĄāļŠāļēāļĄāļēāļĢāļāļāļāļ° compile āđāļ NetBeans 7.1 āđāļ āđāļāļāļāļāļēāļāļĄ Port Types, Bindings āđāļĨāļ° Services āļāđāļāļ HttpGet āđāļĨāļ° HttpPost āļāļĒ āđāļŦāļāļģāļāļēāļĢāļĨāļāļŠāļ§āļāđāļŦāļĨāļēāļāļāļāļāļ āđāļāļĒāļāļĨāļāļāļ§āļēāļāđāļŦāļāļāļāđāļāļĒāļ§āļāļāļāđāļĨāļ§āđāļĨāļāļāļāļēāļŠāļ Delete āļāļāđāļŦāļĨāļāđāļāļĢāļāļŠāļĢāļēāļāļāļāļ WSDL āļāļāļĢāļāļ 11
āļĢāļāļ 10 WSDL āļāļāļēāļāļēāļĢāđāļĢāļĒāļāļĄāļē
105
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 11 WSDL āļāļāļāļāļāļ
āļāļēāļĢāļāļāļāļēāđāļāļĨ Client WSDL āđāļŦāļĄ
āļāļāļāļāļāļāļāđāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ WSDL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āļāļāļ°āļāļāļāļēāļāļ āļĄāļēāđāļŦāļĄāđāļāļāđāļŦāļŠāļēāļĄāļēāļĢāļāđāļĢāļĒāļāđāļāđāļāļāđāļ§āļāđāļāļāļĢāļ§āļŠāđāļ āđāļāļĒāđāļāļāļĢāļāļāļ°āļāļēāļŦāļāļāđāļŦāļĄ input parameter āļŠāļāļāļāļ§āļāļ fromCurrency āđāļĨāļ° toCurrency āđāļāļĒāļĄ output parameter āļāļ result āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
1. āđāļĨāļāļāļŦāļāļēāļāļēāļ Projects āļāļĒāļēāļĒāđāļŦāļāļ WSBPEL āđāļĨāļ§āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ Process Files āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > WSDL Document
2. āđāļāđāļāļāļ°āļĨāļāļ New WSDL Document āļāļēāļŦāļāļ File Name: āđāļāļ ExternalWSProcessWSDL āļāļēāļŦāļāļ WSDL Type: āđāļāļ Concrete WSDL Document āđāļĨāļ°āļāļēāļŦāļāļ Binding āđāļāļ SOAP āđāļĨāļ° Types āđāļāļ RPC Literal āđāļĨāļ§āļāļ Next
3. āđāļāļŦāļāļēāļāļāđāļ āļŠāļēāļŦāļĢāļāļŠāļ§āļāļāļāļ Input: āļāļēāļŦāļāļ Message Part Name āđāļāļ fromCurrency āđāļŦāđāļāļāļāļāļ xsd:String āđāļĨāļ° toCurrency āđāļŦāđāļāļāļāļāļ xsd:String āđāļĨāļ°āļŠāļēāļŦāļĢāļāļŠāļ§āļāļāļāļ Output: āļāļēāļŦāļāļ Message Part Name āđāļāļ result āđāļŦāđāļāļāļāļāļ xsd:String āļāļāļĢāļāļ 12 āļāļ Next āđāļĨāļ§āļāļ Finish
106
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 12 āļāļēāļĢāļāļēāļŦāļāļāļāļē WSDL Document
āļāļēāļĢāļāļāļāļē Business Process āđāļŦāļĄāđāļāļāđāļĢāļĒāļ External Web Service
āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļāđāļāļĨ BPEL āļŠāļēāļŦāļĢāļāļāļĒāļēāļĄ Business Process āđāļŦāļĄāļāļāļ°āđāļāđāļāļāļēāļĢāđāļĢāļĒāļ External Web Service āđāļāļĒāļĄāļāļāļāļāļāļāļēāļĢāļāļāļāļēāļāļāļ
107
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļŠāļĢāļēāļ BPEL Process
1. āļāļĨāļāļāļ§āļēāļāđāļŦāļāļ WSBPEL āļāļēāļāļāļāđāļĨāļāļāļāļēāļŠāļ New > BPEL Process.. 2. āđāļāđāļāļāļ°āļĨāļāļ New BPEL Process āļāļģāļŦāļāļ Project Name āđāļāļ ExternalWSBPEL āđāļĨāļ§āļāļ Finish
āļāļēāļĢāđāļāļĄ partner link
āļāļāļāļāļāļāļāļ°āļāļēāļāļēāļĢāļāļēāļŦāļāļ partner link āļŠāļēāļŦāļĢāļ Web Services āļŠāļāļāļāļāļāļ ExternalWSProcessWSDL āđāļĨāļ° CurrencyConvertor.asmx.wsdl āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āļāļāđāļāļĨāļāļĨāļāļāđāļāļĨ ExternalWSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ ExternalWSProcessWSDL.wsdl āđāļāļŦāļāļēāļāļēāļ Projects āļĄāļēāđāļ§āļ āļēāļĒāđāļāļŦāļāļēāļāļēāļ design āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļŠāļāļāđāļāļāļ°āļĨāļāļ PartnerLink1 [Partner Link] â Property Editor āđāļŦāļāļēāļŦāļāļāļāļē Name: āđāļāļ ClientPartnerLink āđāļĨāļ§āļāļ OK
2. āļĨāļēāļ CurrencyConvertor.asmx.wsdlāđāļāļŦāļāļēāļāļēāļ Projects āđāļāđāļ§āļāļēāļāļāļēāļāļāļ§āļēāļāļāļāļŦāļāļēāļāļēāļ design āđāļāļĒāļāļēāļŦāļāļ Name: āđāļāļ ExternalWSPartnerLink
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Receive
1. āđāļāđāļāļĨ ExternalWSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Receive āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āļāļĢāļāļāļĨāļāļāļāļĢāļāļĢāļĢāļĄāļ§āļēāļāđāļāļĨāļē
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Receive āļāļāļ Receive1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Receive1
3. āđāļāđāļāļāļ°āļĨāļāļ Receive1 [Receive] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ start āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ ClientPartnerLink
4. āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ inData āđāļĨāļ§āļāļ OK
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Reply
1. āđāļāđāļāļĨ ExternalWSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Reply āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļāļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ Process End
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Reply āļāļāļ Reply1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Reply1 3. āđāļāđāļāļāļ°āļĨāļāļ Reply1 [Reply] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ end āđāļĨāļ°āđāļĨāļāļ Partner
Link: āđāļāļ ClientPartnerLink 4. āđāļāļāļāļ Output Variable: āļāļāļāļĄ Create āđāļĄāļāđāļāļāļ°āļĨāļāļ New Output Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ
Name: āđāļāļ outData āđāļĨāļ§āļāļ OK
108
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Invoke āļŠāļēāļŦāļĢāļ calcualteTax
1. āđāļāđāļāļĨ ExternalWSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Invoke āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ end
2. āđāļāļĢāđāļāļĢāļĄāļāļ°āļāļēāļŦāļāļāļāļĢāļāļĢāļĢāļĄ Invoke āļāļāļ Invoke1 āđāļāļŦāļāļēāļāļēāļ Design āđāļŦāļāļāđāļāļĨāļāļĨāļāļāļĢāļāļĢāļĢāļĄ Invoke1
3. āđāļāđāļāļāļ°āļĨāļāļ Invoke1 [Invoke] - â Property Editor āđāļŦāļāļēāļŦāļāļ Name: āđāļāļ invokeWS āđāļĨāļ°āđāļĨāļāļ Partner Link: āđāļāļ ExternalWSPartnerLink
4. āđāļāļāļāļ Operation: āđāļĨāļāļ conversionRate 5. āđāļāļāļāļ Input Variable: āļāļāļāļĄ Create.. āđāļĄāļāđāļāļāļ°āļĨāļāļ New Input Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ
Name: āđāļāļ ConversionRateIn āđāļĨāļ§āļāļ OK 6. āđāļāļāļāļ Output Variable: āļāļāļāļĄ Create.. āđāļĄāļāđāļāļāļ°āļĨāļāļ New Output Variable āđāļŠāļāļāļāļ āđāļŦāļāļēāļŦāļāļ
Name: āđāļāļ ConversionRateOut āđāļĨāļ§āļāļ OK
āļāļēāļĢāđāļāļĄāļāļĢāļāļĢāļĢāļĄ Assign
1. āđāļāđāļāļĨ ExternalWSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ start āļāļāļāļĢāļāļĢāļĢāļĄ invokeWS
2. āđāļāļŦāļāļēāļāļēāļ Editor āđāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign1 āđāļāļŦāļāļēāļāļēāļ BPEL Mapper āļāļēāļāļēāļĢāđāļĒāļāđāļŦāļāļ fromCurrency āđāļāļŠāļ§āļ inData āļāļēāļāļāļēāļāļāļēāļĒāđāļāļēāļāļāđāļŦāļāļ FromCurrency āđāļāļŠāļ§āļ ConversionRateIn āļāļēāļāļāļēāļāļāļ§āļē āđāļĨāļ° toCurrency āđāļāļŠāļ§āļ inData āļāļēāļāļāļēāļāļāļēāļĒāđāļāļēāļāļāđāļŦāļāļ ToCurrency āđāļāļŠāļ§āļ ConversionRateIn āļāļēāļāļāļēāļāļāļ§āļē āļāļāđāļŠāļāļāđāļāļĢāļāļ 13
āļĢāļāļ 13 āđāļŠāļāļ Business Rule āļĢāļ°āļŦāļ§āļēāļ start āđāļĨāļ° invokeWS
3. āđāļāđāļāļĨ ExtrenalWSBPEL.bpel āđāļĨāļāļāđāļāļ Design āđāļĨāļ§āļĨāļēāļāđāļāļāļāļ Assign āđāļāļŦāļāļēāļāļēāļ Palette āļĄāļēāđāļ§āđāļāļŦāļāļēāļāļēāļ design āļĢāļ°āļŦāļ§āļēāļ āļāļĢāļāļĢāļĢāļĄ invokeWS āļāļāļāļĢāļāļĢāļĢāļĄ end
109
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
4. āđāļāļŦāļāļēāļāļēāļ Editor āđāļĨāļāļāļāļĢāļāļĢāļĢāļĄ Assign2 āđāļāļŦāļāļēāļāļēāļ BPEL Mapper āļāļģāļāļēāļĢāđāļĒāļāđāļŦāļāļ ConversionRateResult āđāļāļŠāļ§āļ ConversionRateOut āđāļāļŦāļāļēāļāļēāļāļāļēāļāļāļēāļĒāđāļāļēāļāļāđāļŦāļāļ result āđāļāļŠāļ§āļ outData āđāļāļŦāļāļēāļāļēāļāļāļēāļāļāļ§āļē āļāļāđāļŠāļāļāđāļāļĢāļāļ 14
āļĢāļāļ 14 āđāļŠāļāļ Business Rule āļĢāļ°āļŦāļ§āļēāļ invokeWS āđāļĨāļ° end
5. āđāļĢāļēāļāļ°āđāļāđāļāļĢāđāļāļĢāļĄ BPEL āļāļāđāļŠāļāļāđāļāļĢāļāļ 15
āļĢāļāļ 15 āđāļŠāļāļ BPEL Process āļāļāļāļāļāļĢāļ°āļāļ
6. āļāļāļāļĄ Save āđāļĨāļ° Clean and Build
110
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļāļēāļĢāļāļāļāļēāđāļāļĢāđāļāļ Composite Application
āļāļāļāļāļāļāđāļāļāļāļēāļĢāļŠāļĢāļēāļ Composite Application āđāļāļāļāļĢāļ ExternalWSBPEL āļāļ BPEL Engine āļāđāļāļĄāļēāļāļĢāļāļēāļ JBI āđāļāļĒāļĄāļāļāļāļāļāļāļāļ
1. āđāļĨāļāļāđāļĄāļ File > New Project 2. āđāļāđāļāļāļ°āļĨāļāļ New Project āđāļŦāđāļĨāļāļ Categories āđāļāļ SOA āđāļĨāļ° Projects āđāļāļ Composite
Application āđāļĨāļ§āļāļ Next 3. āļāļēāļŦāļāļ Project Name āđāļāļ ExternalWSCompositeApp āđāļĨāļ§āļāļ Finish 4. āđāļāļŦāļāļēāļāļēāļ Project āđāļĨāļāļāđāļŦāļāļ ExternalWSCompositeApp āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Add JBI Module 5. āđāļŦāđāļĨāļāļāđāļāļĢāđāļāļ ExternalWSBPEL āđāļĨāļ§āļāļāļāļĄ Add Project JAR Files 6. āđāļāļĢāđāļĢāļĄ NetBeans āļāļ°āđāļāļĄāđāļŦāļāļ WSBPEL.jar āļ āļēāļĒāđāļ WSCompositeApp > JBI Module 7. āļāļģāļāļēāļĢ Clean and Build āđāļāļĢāđāļāļ WSCompositeApp 8. āļāļāđāļāļĨāļāļĨāļāļ Service Assembly āļāļ°āđāļŦāļ CASA Editor āļāļāđāļŠāļāļāđāļāļĢāļāļ 16 āļāļ WSBPEL āļāđāļāļ
BPEL module āļāļ°āļāļāđāļĢāļĒāļāđāļāļĒ SOAP request āđāļāđāļĄāđāļŦāļTaxPartnerLink āđāļĢāļĒāļāđāļ Web Service āđāļ
āļĢāļāļ 16 āđāļŠāļāļ CASA Editor āļāļāļ WSBPEL
9. āđāļāļāļĢāļ°āļ Web Service āļāļāļ°āđāļĢāļĒāļāđāļāđāļŦāļĨāļēāļāđāļāļāļāļ soap12 āļāļāļĒāđāļ palette āļĄāļēāđāļ§āđāļāļŠāļ§āļ WSDL Ports āļāļāļ CASA Editor āđāļĨāļ°āļāļģāļāļēāļĢāđāļāļāļĄāđāļĒāļāļāļāđāļŠāļāļāđāļāļĢāļāļ 17
111
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
āļĢāļāļ 17 āđāļŠāļāļāļāļēāļĢāđāļāļāļĄāđāļĒāļāļāļēāļ ExternalWSBPELāđāļāļĒāļ SOAP12
10. āļĢāļ°āļ endpoint āļāļāļ WSDL port āđāļāļĒāļāļēāļĢāļāļĨāļāļāļ§āļēāļ casaPort1 āđāļĨāļ§āđāļĨāļāļ Properties āđāļĨāļ§āļāļēāļŦāļāļāļāļē Location āđāļāļ http://www.webservicex.com/CurrencyConvertor.asmx āđāļĨāļ° Endpoint Name āđāļāļ CurrencyConvertor
āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāļāļēāļ TestCase
1. āļāļģāļāļēāļĢ Deploy āđāļāļĢāđāļāļ ExternalWSCompositeApp 2. āđāļāļŦāļāļēāļāļēāļ Project āđāļĨāļāļāđāļŦāļāļ ExternalWSCompositeApp > Test āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ New Test
Case 3. āđāļāđāļāļāļ°āļĨāļāļ New Test Case āđāļŦāļāļēāļŦāļāļ Test Case Name: āđāļāļ TestCase1 āđāļĨāļ§āļāļ Next 4. āļŦāļāļēāļāļāđāļāđāļ WSBPEL āđāļŦāđāļĨāļāļāđāļāļĨ WSDL āđāļāļ ExternalWSProcessWSDL.wsdl āđāļĨāļ§āļāļ Next 5. āđāļāļŦāļāļēāļāļāđāļāđāļŦāđāļĨāļāļ ExternalWSProcessWSDLOperation āđāļĨāļ§āļāļ Finish 6. āļŦāļāļēāļāļēāļ Editor āļāļ°āđāļŠāļāļāđāļāļĨ Input.xml āđāļŦāđāļ source code āļāļāļ
<fromCurrency>USD</fromCurrency>
<toCurrency>THB</toCurrency>
112
Java Web Services and SOA Exercises Thanachart Numnonda and Thanisa Kruawaisayawan
7. āļāļāļāļĄ Save āđāļĨāļāļāđāļŦāļāļ TestCase1 āđāļĨāļ§āļāļĨāļāļāļ§āļēāđāļĨāļāļ Run 8. āļāļ°āđāļŦāļāļāļĨāļĨāļāļāļāļĢāļēāļāļāđāļāđāļāļĨ Output.xml āļāļāļ
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <m:ExternalWSProcessWSDLOperationResponse xmlns:m="http://j2ee.netbeans.org/wsdl/WSBPEL/ExternalWSProcessWSDL"> <result xmlns:msgns="http://www.webserviceX.NET/" xmlns="">31.49</result> </m:ExternalWSProcessWSDLOperationResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>