2016-04-14 9 views
0

Ich habe diese json DS:Was ist der richtige Weg zum Hinzufügen einer JSON-SubDataSource in Jasper Reports?

{ 
    "customername":"home", 
    "workSiteRows":[ 
     { 
     "invoiceRows":[ 
      { 
       "candidateName":"name1", 
       "units":"13:00" 
      }, 
      { 
       "candidateName":"name2", 
       "units":"18:30" 
      } 
     ], 
     "workSiteName":"wsname1" 
     }, 
     { 
     "invoiceRows":[ 
      { 
       "candidateName":"name1", 
       "units":"13:00" 
      }, 
      { 
       "candidateName":"name2", 
       "units":"18:30" 
      } 
     ], 
     "workSiteName":"wsname2" 
     } 
    ] 
} 

In meiner .jrxml Datei habe ich einen subreport definiert und ich versuche, eine subDataSource zu schaffen, um diesen subreport zu übergeben.

<subreport isUsingCache="false"> 
    <reportElement x="0" y="10" width="555" height="30" uuid="b2d96c34-ad5d-4eb2-b218-43aad4e09282" /> 
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).dataSource("workSiteRows")]]></dataSourceExpression> 
    <subreportExpression><![CDATA[$P{REPORT_DIR} + "\\invoice_ws_row.jasper"]]></subreportExpression> 
</subreport> 

Ich erhalte die folgende Ausnahme: Fehler Füllung drucken ...

java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonNode java.lang.ClassNotFoundException: org.codehaus.jackson.JsonNode 

Ich habe versucht, die Antwort von Frage mit http://community.jaspersoft.com/questions/956036/caused-javalangclassnotfoundexception-orgcodehausjacksonjsonnode-exception-ireport

Aber es funktioniert nicht. Das Problem ist, dass derzeit Jackson Core unter dem Repo "com.fasterxml.jackson.core"

ist, während iReport fragt nach "org.codehaus.jackson.core".

Versuchte für ältere Versionen von jackson Kern suchen, der unter org.codehaus sind und sie den iReport Classpath hinzufügen, aber es funktioniert immer noch nicht. Irgendwelche Ideen?

Antwort

1

Normalerweise brauchen Sie nicht, um den Ausdruck zu werfen. Versuchen: <![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>

Das funktioniert in meinem Fall gut. In Ihrem Fall ist die subDataSource ein Array, vielleicht können Sie es auch ausprobieren und ein Objekt verwenden.

+0

Es funktioniert. Vielen Dank. *** Facepalm ***, haben Sie jemals andere Alternativen zu Jasper Reports verwendet? – ionutab

+1

Gern geschehen. Ich weiß nur, Jasper Report, seine freien und die beste verfügbare Lösung, aber es gibt noch viele Momente facepalm, wenn Sie es :) – hering

+0

Ich bin mit Jaspersoft Studio 6.2.1 und es ist nicht möglich, die 'subDataSource' Methode zu verwenden, ohne zu Gießen 'net.sf.jasperreports.engine.data.JsonDataSource' –