I would like ask your help for some solutions. I want to know how can I print report from jasperserver repository. I spent time googling for a period of time, but still cannot get it solve. I got this source, but it does not work. Can someone fix it? Any idears? Please help me.
1.Here is the source code:
package com.src.report;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ResourceDescriptor;
import com.jaspersoft.jasperserver.irplugin.JServer;
import com.jaspersoft.jasperserver.irplugin.wsclient.WSClient;
public class PrintService {
private static JServer server = null;
public static void ConnectionString(String webServiceUrl, String username, String password){
server = new JServer();
server.setUsername(username);
server.setPassword(password);
server.setUrl(webServiceUrl);
}
public static void runReports(String webServiceUrl, String username, String password) throws Exception{
ConnectionString(webServiceUrl, username, password);
WSClient client = new WSClient(server);
ResourceDescriptor resourceDescriptor = new ResourceDescriptor();
resourceDescriptor.setUriString ("/reports/samples/EmployeeAccounts");
Map<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("MY_PARAMETER_NAME", "myparametervalue");
JasperPrint printer = client.runReport(resourceDescriptor, parameterMap);
JasperViewer.viewReport(printer, false, Locale.ENGLISH);
}
public static void main(String[] args) throws Exception {
String webServiceUrl = "http://localhost:8080/jasperserver-pro/services/repository";
String username = "jasperadmin";
String password = "jasperadmin";
runReports(webServiceUrl, username, password);
}
}
2.And here is the error message:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/parsers/AbstractDOMParser
at com.jaspersoft.jasperserver.irplugin.wsclient.WSClient.<init>(WSClient.java:73)
at com.src.report.PrintService.runReports(PrintService.java:37)
at com.src.report.PrintService.main(PrintService.java:51)
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.AbstractDOMParser
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
u can make use of the rest api of jasper it is as simple as:
http://<host>:8080/jasperserver-pro/rest_v2/reports/pathofReport/reportID.format?j_username=username&j_password=password
As I googled for a period of time, I have found some solution related to my question above. My purpose here is not for reputation or anything else, but just wanna tell someone who get the same issue as I did.
My solution is here:
1/ Requirement Jar Files:
2/ Coding:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jaspersoft.src.jasperprint;
import net.sf.jasperreports.engine.JasperPrint;
import com.jaspersoft.jasperserver.irplugin.JServer;
import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
/**
*
* @author Administrator
*/
public class JasperPrintTest {
private static JServer server = null;
public JasperPrintTest(String webServiceUrl, String username, String password){
server = new JServer();
server.setUsername(username);
server.setPassword(password);
server.setUrl(webServiceUrl);
}
public List list(String uri) throws Exception{
ResourceDescriptor rd = new ResourceDescriptor();
rd.setWsType(ResourceDescriptor.TYPE_FOLDER);
rd.setUriString(uri);
return server.getWSClient().list(rd);
}
public ResourceDescriptor get(String uri) throws Exception{
return get(uri, null);
}
public ResourceDescriptor get(String uri, List arg) throws Exception{
ResourceDescriptor rd = new ResourceDescriptor();
rd.setWsType(ResourceDescriptor.TYPE_REPORTUNIT);
rd.setUriString(uri);
return server.getWSClient().get(rd, null,arg);
}
public JasperPrint runReports(String reportUnit, Map params) throws Exception{
ResourceDescriptor rd = new ResourceDescriptor();
rd.setWsType(ResourceDescriptor.TYPE_REPORTUNIT);
rd.setUriString(reportUnit);
return server.getWSClient().runReport(rd, params);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
// TODO code application logic here
String webServiceUrl="http://localhost:8080/jasperserver-pro/services/repository";
String username= "jasperadmin";
String password = "jasperadmin";
String printer = "Foxit Reader PDF Printer";
String reporturi = "/reports/samples/AllAccounts";
JasperPrintTest object = new JasperPrintTest(webServiceUrl,username,password);
JasperPrint jasperPrint = new JasperPrint();
Map parameterMap = new HashMap();
try {
jasperPrint = object.runReports(reporturi, parameterMap);
} catch (Exception ex) {
Logger.getLogger(ClassForm.class.getName()).log(Level.SEVERE, null, ex);
}
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
PrintService printService = null;
for(PrintService ps : printServices){
if(ps.getName().equals(printer)){
printService = ps;
break;
}
}
if(printService !=null)
{
JRExporter jrExporter = new JRPrintServiceExporter();
jrExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
jrExporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, printService);
jrExporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
printService.getAttributes());
jrExporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
jrExporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);
try {
jrExporter.exportReport();
} catch (JRException ex) {
Logger.getLogger(ClassForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
else
{
System.out.println("Printer is not defined");
}
}
}
3/ Result:
Note: but everything is still not dynamic. Please notice.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.