Java。 REST 服务 + Jasper 报告。无法打印标签(或找不到)
Java. REST service + Jasper reports. Cannot print label (or cannot find)
我有一个用于标签打印的 java 程序(Argox、Godex 打印机 10x20cm)。我需要在这些标签中添加更多信息。问题是我没有源代码,所以我使用 Java 反编译器来获取 .class 文件。
我已将这些 .class 文件添加到新的 java 项目 + .jar 文件附近的文件中。
休息服务器成功启动,我的 java 项目从 tomcat webapp 接收信息,但是有一些错误,我无法打印我的文件。
有控制台:
http://pastebin.com/c09PrWcZ
有java处出现错误的代码:
http://pastebin.com/1WuKthWp(它是 5 个文件之一,但其他文件用于 REST 启动、属性 选项等。
我真的是 java 球衣和休息服务的新手。
你的堆栈跟踪中的问题是
net.sf.jasperreports.engine.JRRuntimeException: Error creating SAX parser
让我们猜猜为什么。
- "Xerces from hell"问题.
它没有使用正确版本的 xerces 库来编译你的 .jrxml,你可能在类路径中有错误的 xerces 库,你可能有很多...
解法:
检查您的 jasper 报告版本的 jasper 报告分发,包括正确的 xerces jar 并删除其他 xerces 实现。
编辑:评论中的用户解决方案:
"i deleted all my .jar files and copied all from lib folder near compiled .jar file. now i have no errors :))"
- jdt-compiler 和 .jrxml 格式的不同版本
最初 jasper 报告使用的是 DTD(如果你检查 .jrxml 文件的 xml)你会发现:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
然后他们切换到XML-schema
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Entrata" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" isFloatColumnFooter="true">
因此,如果您打开旧报表 (DTD) 并使用 es 进行编辑。 iReport/Jaspersoft Studio 它将 header 从 DTD 更改为 XML-schema 并且您的旧版本 jdt-compiler 将无法识别此格式。
解决方案
手动切换回 jrxml 文件中的 DOCTYPE 定义,并从 jasper 报告标签中删除模式定义(注意设置 iReport/Jaspersoft studio 以使用旧版本(设置,兼容性),因此它不添加不支持的tags/attribute)
或
将 jasper 报告更新到新版本(建议)并检查所有文件是否具有架构定义
我有一个用于标签打印的 java 程序(Argox、Godex 打印机 10x20cm)。我需要在这些标签中添加更多信息。问题是我没有源代码,所以我使用 Java 反编译器来获取 .class 文件。
我已将这些 .class 文件添加到新的 java 项目 + .jar 文件附近的文件中。 休息服务器成功启动,我的 java 项目从 tomcat webapp 接收信息,但是有一些错误,我无法打印我的文件。
有控制台: http://pastebin.com/c09PrWcZ
有java处出现错误的代码: http://pastebin.com/1WuKthWp(它是 5 个文件之一,但其他文件用于 REST 启动、属性 选项等。
我真的是 java 球衣和休息服务的新手。
你的堆栈跟踪中的问题是
net.sf.jasperreports.engine.JRRuntimeException: Error creating SAX parser
让我们猜猜为什么。
- "Xerces from hell"问题.
它没有使用正确版本的 xerces 库来编译你的 .jrxml,你可能在类路径中有错误的 xerces 库,你可能有很多...
解法:
检查您的 jasper 报告版本的 jasper 报告分发,包括正确的 xerces jar 并删除其他 xerces 实现。
编辑:评论中的用户解决方案:
"i deleted all my .jar files and copied all from lib folder near compiled .jar file. now i have no errors :))"
- jdt-compiler 和 .jrxml 格式的不同版本
最初 jasper 报告使用的是 DTD(如果你检查 .jrxml 文件的 xml)你会发现:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
然后他们切换到XML-schema
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Entrata" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" isFloatColumnFooter="true">
因此,如果您打开旧报表 (DTD) 并使用 es 进行编辑。 iReport/Jaspersoft Studio 它将 header 从 DTD 更改为 XML-schema 并且您的旧版本 jdt-compiler 将无法识别此格式。
解决方案
手动切换回 jrxml 文件中的 DOCTYPE 定义,并从 jasper 报告标签中删除模式定义(注意设置 iReport/Jaspersoft studio 以使用旧版本(设置,兼容性),因此它不添加不支持的tags/attribute)
或 将 jasper 报告更新到新版本(建议)并检查所有文件是否具有架构定义