Szoftverfejlesztés J2EE platformon - Labor: Web Service

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 22., 12:40-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|J2EELaborWS}} __TOC__ ==Web Service laborok más tárgyakból== * Integrált információs rendszerek — Visual St…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.



Web Service laborok más tárgyakból

Devizaváltó Web Service implementálása

  • New Project / Enterprise Application
    • Name: WSLabor EJB es Web Application Module is kell
  • New Project / Web Application
    • Name: WSLaborService
    • Add to Enterprise Application: WSLabor
  • WSLaborService / Source Packages / New Java Class...
    • Name: RateDescriptor
    • Package: ws.labor
  • WSLaborService / Source Packages / New Java Class...
    • Name: Converter
    • Package: ws.labor

RateDescriptor bean

package ws.labor;

public class RateDescriptor {
	 private String from;
	 private String to;
				
	 public RateDescriptor() {
	 }
	 
	 public RateDescriptor(String from, String to) {
		  this.setFrom(from);
		  this.setTo(to);
	 }

	 // getterek es setterek generalasa:
	 // context menuben Refactor / Encapsulate Fields...
	 public String getFrom() {
		  return from;
	 }

	 public void setFrom(String from) {
		  this.from = from;
	 }

	 public String getTo() {
		  return to;
	 }

	 public void setTo(String to) {
		  this.to = to;
	 }

	 // Ctrl+I: felsorolja az override-olhato metodusokat
	 public boolean equals(Object obj) {
		  if (!(obj instanceof RateDescriptor)) return false;
		  if (this==obj) return true;
		  RateDescriptor d = (RateDescriptor) obj;
		  return from.equals(d.from) && to.equals(d.to);
	 }

	 public String toString() {
		  return from + " -> " + to;
	 }

	 public int hashCode() {
		  return from.hashCode() ^ to.hashCode();
	 }
}

Converter service

package ws.labor;

import java.util.HashMap;
import java.util.Map;
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService()
public class Converter {
	 
	 Map<RateDescriptor, Double> rates = new HashMap<RateDescriptor, Double>();
	 
	 public Converter() {
		  rates.put(new RateDescriptor("HUF", "EUR"), 260.0);
		  rates.put(new RateDescriptor("HUF", "USD"), 210.0);
	 }
	 
	 @WebMethod
	 public Double getRate1(RateDescriptor d) {
		  return rates.get(d);
	 }
				
	 // Web Service nem tamogatja az overload-olt metodus neveket
	 @WebMethod
	 public Double getRate2(String from, String to) {
		  return rates.get(new RateDescriptor(from, to));
	 }
}

Deploy, majd a szerver logból másoljuk ki az url-t es írjuk utána, hogy =?wsdl=. =<xsd:schema>/<import>@schemaLocation= alatt vannak a metódus deklarációk.

Devizaváltó Web Service meghívása

  • WSLabor-war / Source Packages / New Servlet
    • name: Converter
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 Converter</title>");
	 out.println("</head>");
	 out.println("<body>");
	 out.println("<h1>Servlet Converter at " + request.getContextPath () + "</h1>");

	 out.println("<form method='post'>");
	 out.println("From: <input type='text' name='from'><br>");
	 out.println("To: <input type='text' name='to'><br>");
	 out.println("<input type='submit' value='Get Rate!'><br>");
	 out.println("</form>");

	 String from = request.getParameter("from");
	 String to = request.getParameter("to");

	 if (from!=null && to!=null) {

	 }

	 out.println("</body>");
	 out.println("</html>");
	 out.close();
}
  • WSLabor-war / New / Web Service Client
    • Project: Browse-zal valasszuk ki a Convertert
    • Package: ws.labor.client
  • WSLabor-war / Web Service References / ConverterService / ConverterService / ConverterPort / getRate2-t huzzuk at az =if (from!=null && to!=null) { }= blokk belsejebe.
  • Deploy
  • Ha nem megy, mert nem talalja a web service-t, Runtime / Servers / Sun AppServer / Applications / Web Applications / WSLaborService / Undeploy, majd deploy ujra.

Járatkereső Web Service implementálása EJB modulban

  • WSLabor-ejb-ben New Java Class
    • Name: AirLineBean
    • Package: ws.labor.ejb
public class AirLineBean {
	 private int id;
	 private String source, destination;
	 private double price;
	 private String currency;

	 // + default es parameterezett konstruktorok

	 // + getterek es setterek
}
  • Hozzunk letre egy Stateless Session beant ugyanabba a package-be TravelSession neven.

TravelSessionBean

package ws.labor.ejb;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;

@Stateless
@WebService()
public class TravelSessionBean implements ws.labor.ejb.TravelSessionLocal {
	 
	 List<AirLineBean> airlines = new ArrayList<AirLineBean>();
	 
	 public TravelSessionBean() {
		  airlines.add(new AirLineBean(1, "Budapest", "New York", 200000.0, "HUF"));
		  airlines.add(new AirLineBean(2, "Budapest", "New York", 180000.0, "HUF"));
		  airlines.add(new AirLineBean(3, "Budapest", "Parizs", 30000.0, "HUF"));
	 }

	 @WebMethod()
	 public AirLineBean[] searchAirLine(String source, String destination) {
		  List<AirLineBean> result = new ArrayList<AirLineBean>();
		  for (AirLineBean alb : airlines) {
				if ((source==null || alb.getSource().equals(source)) &&
						 (destination==null || alb.getDestination().equals(destination))) {
					 result.add(alb);
				}
		  }
		  return result.toArray(new AirLineBean[result.size()]);
	 }
}

Tesztelés

  • Runtime / Servers / Sun AppServer / View Admin Console
  • Web Services / TravelSessionBean / Test
  • Probaljuk ki ugy is, hogy a kiindulasi es a cel allomast is megadjuk es ugy is, hogy csak az egyiket.

Önálló feladat

  • Keszitsunk egy webes klienst a TravelSessionBean-hez
  • A kliens kerje le a talalatokat, es hivja meg a Converter service-t, ha nem stimmel a penznem.

-- Peti - 2006.11.08.