I. Introduction

Cet article entre dans le cadre de l'interopérabilité entre .NET et J2EE. En effet, les états jasper ne s'éditent, généralement, qu'à partir des applications java via les API de JasperReports. Toutefois, on peut bénéficier de cette API côté serveur et donc dans une application java pour éditer l'état à partir d'une application .NET en utilisant les web services qui assurent une communication multi-plateforme.

Les exemples proposés seront écrits en java, pour la partie web service, et en vb.net pour l'application qui consommera ce web service.

Cet article vous aidera à accomplir cette tâche.

II. Création du service web

2.1. Présentation

Je ne vais pas rentrer dans les détails pour créer un web service en java. Vous pouvez vous référer au tutoriel disponible ici. Il décrit parfaitement comment créer un web service en utilisant AXIS. Quant aux explications des différentes méthodes pour éditer un état jasper à partir d'une application java, vous pouvez toujours vous référer à mon tutoriel déjà publié ici.

2.2. Création du service web

Notre service web ne contiendra qu'une seule classe avec une seule méthode, celle qui permet de se connecter à la base de données et générer un tableau de bytes binaires contenant les données du fichier pdf à créer à partir du fichier jasper.

Cette classe se présente comme suit :

Code1 - Visualisation PDF
Sélectionnez
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

import com.mysql.jdbc.Driver;

public class InitPageBean {

	private static final long serialVersionUID = -3581065399788581255L;

	/** La fonction pour la la visualisation PDF * */

	public byte[] viewReportPDF() throws SQLException, JRException, IOException {
		String reportId = "Person";
		Driver mDriver = new Driver();
		DriverManager.registerDriver(mDriver);
		Connection connection = DriverManager.getConnection(
				"jdbc:mysql://localhost/mytest",
				"root",
				"root");
		File file = new File("C:\\reports");
		JasperPrint jasperPrint = JasperFillManager.fillReport(
				new FileInputStream(new File(file, reportId + ".jasper")),
				null, connection);
		byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
		return bytes;
	}
	
}

}

Mon fichier jasper est nommé Person, il est sous : C:\reports. Je ne reviens pas sur la manière dont ce fichier a été créé mais vous pouvez vous référer au tutoriel ici pour comprendre les étapes de création d'un tel fichier.

La méthode viewReportPDF() se contentera juste de nous retourner un tableau de bytes à partir de notre fichier jasper.

2.3. Déploiement du fichier java

On peut créer un dossier testJasper sous TOMCAT_HOME/webapps/axis/ et copier la source java précédemment créée sans compilation. Après l'avoir copiée, on doit renommer le fichier InitPageBean.java en InitPageBean.jws. On aura donc une arborescence qui ressemble à : TOMCAT_HOME/webapps/axis/testJasper/InitPageBean.jws.

Sur l'article expliquant l'utilisation des web services sous AXIS on trouve bien qu'il y a deux manières pour déployer un web service. Pour moi j'ai choisi la plus simple, qu'est la modification de l'extension du fichier java en fichier jws.

2.4. Test du service web

Après avoir déployé le service web, on doit vérifier si tout est dans l'ordre.

Pour ce faire, démarrer TOMCAT et taper dans votre navigateur: http://localhost:8080/axis/testJasper/InitPageBean.jws.

Vous devez avoir une page qui ressemble à :

Image non disponible

En cliquant sur le lien Click to see the WSDL, une page s'affiche comme suit :

Code1- InitPageBean.xml
Sélectionnez
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost:8080/axis/testJasper/InitPageBean.jws" 
xmlns:apachesoap="http://xml.apache.org/xml-soap" 
xmlns:impl="http://localhost:8080/axis/testJasper/InitPageBean.jws" 
xmlns:intf="http://localhost:8080/axis/testJasper/InitPageBean.jws" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:tns1="http://engine.jasperreports.sf.net" 
xmlns:tns2="http://lang.java" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema targetNamespace="http://engine.jasperreports.sf.net" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://lang.java"/>
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="JRException">
    <sequence>
     <element name="cause" nillable="true" type="xsd:anyType"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>

   <wsdl:message name="viewReportPDFResponse">

      <wsdl:part name="viewReportPDFReturn" type="xsd:base64Binary"/>

   </wsdl:message>

   <wsdl:message name="JRException">

      <wsdl:part name="fault" type="tns1:JRException"/>

   </wsdl:message>

   <wsdl:message name="viewReportPDFRequest">

   </wsdl:message>

   <wsdl:portType name="InitPageBean">

      <wsdl:operation name="viewReportPDF">

         <wsdl:input message="impl:viewReportPDFRequest" name="viewReportPDFRequest"/>

         <wsdl:output message="impl:viewReportPDFResponse" name="viewReportPDFResponse"/>

         <wsdl:fault message="impl:JRException" name="JRException"/>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="InitPageBeanSoapBinding" type="impl:InitPageBean">

      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="viewReportPDF">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="viewReportPDFRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
			namespace="http://DefaultNamespace" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="viewReportPDFResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
			namespace="http://localhost:8080/axis/testJasper/InitPageBean.jws" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="JRException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" n
			ame="JRException" 
			namespace="http://localhost:8080/axis/testJasper/InitPageBean.jws" 
			use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="InitPageBeanService">

      <wsdl:port binding="impl:InitPageBeanSoapBinding" 
	  name="InitPageBean">

         <wsdlsoap:address location="http://localhost:8080/axis/testJasper/InitPageBean.jws"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>

Si ces deux affichages s'effectuent correctement c'est que notre service web a été bien déployé et est prêt pour être testé.

III. Création de la partie client

3.1. Ajouter la référence web

Notre service web a été déployé. Maintenant on peut y faire référence à partir de notre application ASP.NET en l'ajoutant en tant que référence web comme suit :

Image non disponible

Sur l'écran qui s'affiche on doit saisir l'adresse de notre service web comme suit :

Image non disponible

Ensuite, cliquer sur Go. Les différentes méthodes de notre service web s'affichent comme suit :

Image non disponible

Enfin, il faut cliquer sur le bouton Add reference.

Vous remarquez que le service web a été ajouté à votre projet.

Image non disponible

3.2. L'appel du service web

Maintenant que notre service web a été référencé, on peut y faire appel en utilisant ses différentes méthodes.

On peut ajouter une nouvelle forme au projet ou utiliser une anciene et y ajouter un bouton. Dans mon cas, ma page ressemble tout simplement à :

Image non disponible

Le code qui s'exécute lors du clique sur ce bouton est comme suit :

Code1 - Visualisation PDF
Sélectionnez
 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Clic
        Dim ws As New localhost.InitPageBeanService
        Try
        	'Déclaration d'un tableau de byte qui contiendra le résultat du retour de la méthode viewReportPDF du service web 
        	Dim b() As Byte
	        'Instanciaition du service web 
	        Dim ws As New localhost.InitPageBeanService
	        'récupération du résultat de la méthode du service web
	        b = ws.viewReportPDF()
	        'L'export du résultat dans un fichier result.pdf qui sera déposé sous C:\
	        Dim fs As New System.IO.FileStream("C:\result.pdf", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)
	        'L'écriture du contenu
	        fs.Write(b, 0, b.Length)
	        fs.Close()
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try
End Sub

3.3. Exécution du projet

En exécutant le projet et en cliquant sur le bouton Test Edition, un fichier result.pdf sera créé sous C:\.

Exemple d'exécution :

Image non disponible

IV. Télécharger

Les codes sources sont disponibles en téléchargement dans l'archive suivant : src jasper-asp.net.rar.

V. Conclusion

Cet article vous a montré comment éditer un état jasper, déployé sous un service web java, à partir d'une application ASP.NET. Je n'ai pas traité le cas de l'exportation dans un format Excel, Word mais c'est facile à faire. Je n'ai pas traité aussi le cas du passage de paramètres, mais, une fois mis à jour mon ancien article sur l'édition d'un état japser à partir d'une application JSF, j'apporterai les mises à jour nécessaires à cet article.

VI. Remerciements

Mes remerciements à :