| École franco-maghrébine 2003 | WebServices | 13-17 octobre 2003 |
|
tp2b |
type salle: nom, n°, bâtiment
type date: n° semaine, jour, am/pm
type cours: intitulé, responsable
Le WS ne comporte maintenant plus que deux paramètres.
Regarder le WSDL généré.
Tester le WS en écrivant un client du WS.
Le fichier WSDD est à modifier en conséquence.
Contenu du fichier tp2b/Horaire.java.
package tp2b;
public class Horaire {
private String nomJour;
private int numeroSemaine;
private String ampm;
public String getNomJour() {
return this.nomJour;
}
public void setNomJour(String nomJour) {
this.nomJour = nomJour;
}
public int getNumeroSemaine() {
return this.numeroSemaine;
}
public void setNumeroSemaine(int numeroSemaine) {
this.numeroSemaine = numeroSemaine;
}
public String getAmpm() {
return this.ampm;
}
public void setAmpm(String ampm) {
this.ampm = ampm;
}
}
Contenu du fichier tp2b/Cours.java.
package tp2b;
public class Cours {
private String intituleCours;
private String responsableCours;
public String getIntituleCours() {
return this.intituleCours;
}
public void setIntituleCours(String intituleCours) {
this.intituleCours = intituleCours;
}
public String getResponsableCours() {
return this.responsableCours;
}
public void setResponsableCours(String responsableCours) {
this.responsableCours = responsableCours;
}
}
Contenu du fichier tp2b/Salle.java.
package tp2b;
public class Salle {
private String nomSalle;
private int numeroSalle;
private String nomBatiment;
public String getNomSalle() {
return this.nomSalle;
}
public void setNomSalle(String nomSalle) {
this.nomSalle = nomSalle;
}
public int getNumeroSalle() {
return this.numeroSalle;
}
public void setNumeroSalle(int numeroSalle) {
this.numeroSalle = numeroSalle;
}
public String getNomBatiment() {
return this.nomBatiment;
}
public void setNomBatiment(String nomBatiment) {
this.nomBatiment = nomBatiment;
}
}
Contenu du fichier tp2b/InfoCours2.java.
package tp2b;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.*;
import java.util.*;
import tp2b.*;
public class InfoCours2 {
Node node;
String xpathexp;
XPath xpath;
public Cours infoCours(Salle salle, Horaire horaire) throws Exception {
int numeroSemaine;
String nomJour;
String ampm;
String nomSalle;
int numeroSalle;
String nomBatiment;
numeroSemaine = horaire.getNumeroSemaine();
nomJour = horaire.getNomJour();
ampm = horaire.getAmpm();
nomSalle = salle.getNomSalle();
numeroSalle = salle.getNumeroSalle();
nomBatiment = salle.getNomBatiment();
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new java.net.URL("http://localhost:8080/axis/planning.xml"));
Map uris = new HashMap();
uris.put( "planning", "http://in2p3.fr/WS/tp1" );
if ( nomSalle != null) {
xpathexp = "//planning:semaine[@planning:numerosemaine='"+ (new
Integer(numeroSemaine)).toString() +"' and planning:salle/planning:nom='"+ nomSalle
+"']/planning:jour[@planning:nomjour='"+nomJour+"']/planning:"+ampm+"/planning:cours";
//System.err.println(xpathexp);
xpath = document.createXPath( xpathexp );
xpath.setNamespaceURIs( uris );
node = xpath.selectSingleNode( document );
} else if (numeroSalle != 0) {
xpathexp = "//planning:semaine[@planning:numerosemaine='"+ (new
Integer(numeroSemaine)).toString() +"' and planning:salle/planning:numero='"+ (new
Integer(numeroSalle)).toString()
+"']/planning:jour[@planning:nomjour='"+nomJour+"']/planning:"+ampm+"/planning:cours";
//System.err.println(xpathexp);
xpath = document.createXPath( xpathexp );
xpath.setNamespaceURIs( uris );
node = xpath.selectSingleNode( document );
} else if (nomBatiment != null) {
return null;
}
if (node != null) {
System.err.println("node.getName() : " + node.getName());
xpathexp = "planning:intitule/text()";
//System.err.println(xpathexp);
xpath = node.createXPath( xpathexp );
xpath.setNamespaceURIs( uris );
String intitule = xpath.valueOf( node );
xpathexp = "planning:responsable/text()";
//System.err.println(xpathexp);
xpath = node.createXPath( xpathexp );
xpath.setNamespaceURIs( uris );
String responsable = xpath.valueOf( node );
Cours cours = new Cours();
cours.setIntituleCours(intitule);
cours.setResponsableCours(responsable);
return cours;
} else {
return null;
}
} catch (Exception e) {
throw e;
}
}
}
Contenu du fichier tp2b/deploy.wsdd.
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="InfoCours2" provider="java:RPC">
<parameter name="className" value="tp2b.InfoCours2"/>
<parameter name="allowedMethods" value="infoCours"/>
<beanMapping qname="myNS:Cours" xmlns:myNS="urn:InfoCours2" languageSpecificType="java:tp2b.Cours"/>
<beanMapping qname="myNS:Salle" xmlns:myNS="urn:InfoCours2" languageSpecificType="java:tp2b.Salle"/>
<beanMapping qname="myNS:Horaire" xmlns:myNS="urn:InfoCours2"
languageSpecificType="java:tp2b.Horaire"/>
</service>
</deployment>
Contenu du fichier tp2b/ClientInfoCours2.java.
package tp2b;
import org.apache.axis.client.*;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import tp2b.*;
public class ClientInfoCours2 {
public static void main(String [] args) {
try {
Salle salle = new Salle();
Horaire horaire = new Horaire();
salle.setNumeroSalle(0);
salle.setNomSalle("Bleuet");
salle.setNomBatiment(null);
horaire.setAmpm("am");
horaire.setNumeroSemaine(23);
horaire.setNomJour("lundi");
String endpointURL = "http://localhost:8080/axis/services/InfoCours2";
Service service = new Service();
Call call = (Call) service.createCall();
QName qn1 = new QName( "urn:InfoCours2", "Cours" );
call.registerTypeMapping(Cours.class, qn1,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Cours.class, qn1),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Cours.class,
qn1));
QName qn2 = new QName( "urn:InfoCours2", "Salle" );
call.registerTypeMapping(Salle.class, qn2,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Salle.class, qn2),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Salle.class,
qn2));
QName qn3 = new QName( "urn:InfoCours2", "Horaire" );
call.registerTypeMapping(Horaire.class, qn3,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Horaire.class,
qn3),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Horaire.class,
qn3));
call.setTargetEndpointAddress( new java.net.URL(endpointURL) );
call.setOperationName( new QName("InfoCours","infoCours") );
Cours cours = (Cours) call.invoke( new Object[] { salle, horaire } );
System.out.println("Resultat : " + cours.getIntituleCours() + " donne par " +
cours.getResponsableCours());
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
Ouvrir un invite de commandes dans tps.
javac tp2b/*.java java org.apache.axis.client.AdminClient tp2b\deploy.wsdd
Copier les fichiers "tp2b\InfoCours2.class","tp2b\Salle.class","tp2b\Horaire.class","tp2b\Cours.class" dans "C:\axis\webapps\axis\WEB-INF\classes\tp2b".
java tp2b.ClientInfoCours2
| École franco-maghrébine 2003 | WebServices | 13-17 octobre 2003 |