Java マクロの記述について

392 views
Skip to first unread message

b a

unread,
Nov 11, 2009, 11:41:00 AM11/11/09
to excella
蒼井と申します

ExCella Reportの導入を検討しております。
初歩的かもしれませんが、ご質問させてください。

Javaで実行する解析ソフトの後処理に使用したいと考えており、
サンプルファイル(InvoiceReporter.java)を解析ソフトのJavaマクロ
を読み込む機能から実行させたのですが、エラーとなってしまいました。
(何も編集せずそのまま実行しています。)

どのように編集すれば、実行できますでしょうか?
(エクリプスでは正常に動作しました。)

解析ソフトのマクロは通常下記のように記述しており、
public void execute() {
}
サンプルの記述と異なる点が原因ではないかと思っています。
public static void main( String[] args) throws Exception {


お手数お掛けいたしますが、
よろしくお願い致します。

b a

unread,
Nov 15, 2009, 9:45:55 PM11/15/09
to excella
蒼井です
記述の詳細を追記いたします。

よろしくお願いします。
package macro;

import java.util.*;
import star.common.*;
import star.base.neo.*;
import star.vis.*;

public class CellSurface extends StarMacro {
public void execute() {

tomo

unread,
Nov 15, 2009, 10:22:23 PM11/15/09
to excella
柴田です。

呼び出しに関しては問題ないと思います。

解析ソフトでのエラーの内容を教えていただきますでしょうか?

エクリプスでは正常に動作するということですので、
解析ソフトの環境(CLASSPATHなど)が原因かと思われます。


以上、よろしくお願いいたします。

b a

unread,
Nov 16, 2009, 3:11:10 AM11/16/09
to excella
蒼井です
ご返信ありがとうございます

エクリプスでは,サンプル(InvoiceReporter.java)をそのまま実行して動作することだけ確認しました。
解析ソフトではそのままではエラーとなりまして,どのように変更すべきかが,
わかりませんでした。

エラーは下記の内容となります。

●サンプルをそのまま実行時のエラー
Annotation: java.lang.ClassCastException:
org.bbreak.excella.reports.samples.InvoiceReporter cannot be cast to
star.base.neo.NeoMacro:
error: java.lang.ClassCastException:
org.bbreak.excella.reports.samples.InvoiceReporter cannot be cast to
star.base.neo.NeoMacro
at star.base.neo.NeoScript.getNeoMacroObject(NeoScript.java:192)
at star.common.StarScript.getNeoMacroObject(StarScript.java:44)
at star.base.neo.NeoScript.run(NeoScript.java:166)
at star.base.neo.NeoScript.play(NeoScript.java:70)
at star.common.StarScript.play(StarScript.java:74)
at star.coremodule.actions.MacroPlayAction
$PlayMacroOperation.performAction(MacroPlayAction.java:136)
at star.coremodule.actions.MacroPlayAction$PlayMacroOperation$1.run
(MacroPlayAction.java:100)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:
499)
[catch] at org.openide.util.RequestProcessor$Processor.run
(RequestProcessor.java:932)
Caused by: java.lang.ClassCastException:
org.bbreak.excella.reports.samples.InvoiceReporter cannot be cast to
star.base.neo.NeoMacro
at star.base.neo.NeoScript.getNeoMacroObject(NeoScript.java:188)
... 8 more

●次のような書き出しに変更
package macro;
//package org.bbreak.excella.reports.samples;

import java.util.*;

import star.common.*;
import star.base.neo.*;
//
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.ImageParamParser;
import org.bbreak.excella.reports.tag.RowRepeatParamParser;
import org.bbreak.excella.reports.tag.SingleParamParser;
//

public class InvoiceReporter extends StarMacro {

public static void main( String[] args) throws Exception {

●実行時のエラー
Annotation: C:\cae\Java_excella-reports-all\samples\org\bbreak\excella
\reports\samples\InvoiceReporter.java:26: macro.InvoiceReporter は
abstract でなく、star.base.neo.NeoMacro 内の abstract メソッド execute() をオーバーライド
しません。
:
error: C:\cae\Java_excella-reports-all\samples\org\bbreak\excella
\reports\samples\InvoiceReporter.java:26: macro.InvoiceReporter は
abstract でなく、star.base.neo.NeoMacro 内の abstract メソッド execute() をオーバーライド
しません。
at star.base.neo.NeoScript.compileInternal(NeoScript.java:130)
at star.base.neo.NeoScript.play(NeoScript.java:68)
at star.common.StarScript.play(StarScript.java:74)
at star.coremodule.actions.MacroPlayAction
$PlayMacroOperation.performAction(MacroPlayAction.java:136)
at star.coremodule.actions.MacroPlayAction$PlayMacroOperation$1.run
(MacroPlayAction.java:100)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:
499)
[catch] at org.openide.util.RequestProcessor$Processor.run
(RequestProcessor.java:932)

お手数お掛けしますが,よろしくお願いいたします。

tomo

unread,
Nov 16, 2009, 4:22:26 AM11/16/09
to excella
柴田です。

エラー内容を拝見したところ、executeメソッドをオーバーライドしていないようです。

StarMacroクラスの抽象メソッドであるexecuteメソッドをオーバーライドし、
その中でmainメソッドの処理をしてあげればよいかと思われます。

例)
public class InvoiceReporter extends StarMacro {
public void execute() {

//ここにmainメソッドの内容をコピー

//
// ①読み込むテンプレートファイルのパス(拡張子含)
// ②出力先のファイルパス(拡張子はExpoterによって自動的に付与されるため、不要。)
// ③出力ファイルフォーマット(ConvertConfigurationの配列)
// を指定し、ReportBookインスタンスを生成します。
//
String templateFileName = "請求書テンプレート.xls";
URL templateFileUrl = InvoiceReporter.class.getResource
( templateFileName);
String templateFilePath = URLDecoder.decode( templateFileUrl.getPath
(), "UTF-8");

// 以下略・・・

}
}

以上、よろしくお願いします。

b a

unread,
Nov 16, 2009, 11:35:41 PM11/16/09
to excella
蒼井です
ご返信ありがとうございます (たびたび申し訳ありません。)

実行した所,下記のようなエラーとなりました。
どのように対処すればよろしいでしょうか?

Annotation: C:\cae\Java_excella-reports-all\samples\org\bbreak\excella
\reports\samples\test1\InvoiceReporter.java:47: 例外
java.io.UnsupportedEncodingException は報告されません。スローするにはキャッチまたは、スロー宣言をしなけれ
ばなりません。
C:\cae\Java_excella-reports-all\samples\org\bbreak\excella\reports
\samples\test1\InvoiceReporter.java:72: 例外
java.io.UnsupportedEncodingException は報告されません。スローするにはキャッチまたは、スロー宣言をしなけれ
ばなりません。
C:\cae\Java_excella-reports-all\samples\org\bbreak\excella\reports
\samples\test1\InvoiceReporter.java:124: 例外 java.lang.Exception は報告されませ
ん。スローするにはキャッチまたは、スロー宣言をしなければなりません。
:
error: C:\cae\Java_excella-reports-all\samples\org\bbreak\excella
\reports\samples\test1\InvoiceReporter.java:47: 例外
java.io.UnsupportedEncodingException は報告されません。スローするにはキャッチまたは、スロー宣言をしなけれ
ばなりません。
C:\cae\Java_excella-reports-all\samples\org\bbreak\excella\reports
\samples\test1\InvoiceReporter.java:72: 例外
java.io.UnsupportedEncodingException は報告されません。スローするにはキャッチまたは、スロー宣言をしなけれ
ばなりません。
C:\cae\Java_excella-reports-all\samples\org\bbreak\excella\reports
\samples\test1\InvoiceReporter.java:124: 例外 java.lang.Exception は報告されませ
ん。スローするにはキャッチまたは、スロー宣言をしなければなりません。
at star.base.neo.NeoScript.compileInternal(NeoScript.java:130)
at star.base.neo.NeoScript.play(NeoScript.java:68)
at star.common.StarScript.play(StarScript.java:74)
at star.coremodule.actions.MacroPlayAction
$PlayMacroOperation.performAction(MacroPlayAction.java:136)
[catch] at star.coremodule.actions.MacroPlayAction$PlayMacroOperation
$1.run(MacroPlayAction.java:100)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:
499)
at org.openide.util.RequestProcessor$Processor.run
(RequestProcessor.java:932)

●マクロの書き出し
package macro;
//package org.bbreak.excella.reports.samples;

import java.util.*;
import star.common.*;
import star.base.neo.*;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.ImageParamParser;
import org.bbreak.excella.reports.tag.RowRepeatParamParser;
import org.bbreak.excella.reports.tag.SingleParamParser;

/**
* 請求書サンプル出力クラス
*
* @since 1.0
*/
public class InvoiceReporter {

/**
* 請求書サンプルの出力を実行します。
*
* @param args
* @throws Exception
*/
public void execute() {

//
// ①読み込むテンプレートファイルのパス(拡張子含)
// ②出力先のファイルパス(拡張子はExpoterによって自動的に付与されるため、不要。)
// ③出力ファイルフォーマット(ConvertConfigurationの配列)
// を指定し、ReportBookインスタンスを生成します。
//
String templateFileName = "請求書テンプレート.xls";
URL templateFileUrl = InvoiceReporter.class.getResource
( templateFileName);

47: String templateFilePath = URLDecoder.decode
( templateFileUrl.getPath(), "UTF-8");
72: String imageFilePath = URLDecoder.decode
( imageFileUrl.getPath(), "UTF-8");
124: reportProcessor.process( outputBook);//

tomo

unread,
Nov 17, 2009, 1:30:01 AM11/17/09
to excella
柴田です。

JAVAの基本的なコンパイルエラーです。

例外が発生する箇所をtry catchで囲い、適切な処理を行ってください。
単純にサンプルを動作させたいのでしたら、すべて囲ってもよいかと思います。

例)
public class InvoiceReporter extends StarMacro {

@Override
public void execute() {
try {
String templateFileName = "請求書テンプレート.xls";
URL templateFileUrl = InvoiceReporter.class.getResource
( templateFileName);
String templateFilePath = URLDecoder.decode
( templateFileUrl.getPath(), "UTF-8");

//中略

ReportProcessor reportProcessor = new ReportProcessor();
reportProcessor.process( outputBook);

} catch ( Exception e) {
e.printStackTrace();
}
}
}


申し訳ありませんが、ExCellaについての質問でないものはお答えしかねます。
(JAVAのエラーでしたら、他で調査可能かと思います)
以上、よろしくお願いいたします。
Reply all
Reply to author
Forward
0 new messages