Édition d'un état jasper à partir d'une application ASP.NET en utilisant un web service java

Faisel Chabli

Cet article a pour objectif de vous présenter comment éditer un état jasper à partir d'une application ASP.NET en utilisant un web service java. ♪

- Titre : Édition d'un état jasper à partir d'une application ASP.NET en utilisant un web service java

- Auteur : Faisel Chabli

- Parution : 30 mai 2008

- Licence : Copyright ® 2020 JauB. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Création du service web

- II-A. Présentation

- II-B. Création du service web

- II-C. Déploiement du fichier java

- II-D. Test du service web

- III. Création de la partie client

- III-A. Ajouter la référence web

- III-B. L'appel du service web

- III-C. Exécution du projet

- IV. Télécharger

- V. Conclusion

- VI. Remerciements

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 multiplateforme.

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

II-A - 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.

II-B - 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

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 de nous retourner un tableau de bytes à partir de notre fichier jasper.

II-C - 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.

II-D - 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 à :

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

Code1- InitPageBean.xml

<?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

III-A - 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 :

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

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

Enfin, il faut cliquer sur le bouton Add reference.

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

III-B - 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 ancienne et y ajouter un bouton. Dans mon cas, ma page ressemble tout simplement à :

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

Code1 - Visualisation PDF

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 bytes 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

III-C - 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 :

IV - Télécharger

Les codes source sont disponibles en téléchargement dans l'archive suivant : 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 jasper à partir d'une application JSF, j'apporterai les mises à jour nécessaires à cet article.

VI - Remerciements

Mes remerciements à :

- nicopyright(c) pour sa lecture attentive de cet article

- vbrabant pour ses remarques.

- diogene pour ses corrections orthographiques.