ASDoc便利ですよね。でも、いざ書き出す段になってよくわからないエラーで困ることもよくあります。「昨日までは問題なかったのに」、「swfファイルはちゃんと生成できているのに」なんてことも。
よくある記述ミス4個を紹介します。
なんで、4個かって言うと、さっき2時間つぶした3個と、おととい2時間つぶした1個だから!!
よくあるよくある!
忘れないように!
ダメな例
例えば、次のコードはコンパイルはできるのでswf生成は可能ですが、ASDocの生成はできません。
ちなみに、swc化もできません。Fat SWCだったからかも。
[sourcecode language=”as3″]
package jp.mztm {
import jp.mztm.Foo;
public class Boo {
public function Boo() { };
/**
* 兄弟の名前を返します。
* Vector.<String>なのでstringであることが保障されています。
* この値で次の例のようにクエリー生成をします。
* brother.php?name0=foo&name1=woo
* @return 兄弟の名前
*/
public function getBrother():Vector.<String> {
return Vector.<String>(["foo","woo"]);
}
}
}
[/sourcecode]
エラー1:使ってないimportはダメ!
エラー文:
E:\ASDocTest\src\jp\mztm\Boo.as(2): col: 16 エラー: 定義 jp.mztm:Foo が見つかりません。
import jp.mztm.Foo;
^
理由(推測だけど):
このクラスでjp.mztm.Fooを使ってないから。
実際にはこのクラスが存在していても、使わないクラスがimportされているとだめみたいです。
エラー2:@returnの後に全角スペースが入っちゃダメ!
エラー文:
[Fatal Error] toplevel.xml:51:8: エレメント型 “return” の後には、属性指定 “>” または “/>” が必要です。
org.xml.sax.SAXParseException: エレメント型 “return” の後には、属性指定 “>” または “/>” が必要です。
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at flex2.compiler.asdoc.AsDocHelper.createTopLevelClasses(AsDocHelper.java:66)
at flex2.compiler.asdoc.AsDocAPI.createTopLevelClassesXML(AsDocAPI.java:401)
at flex2.tools.ASDoc.asdoc(ASDoc.java:94)
at flex2.tools.ASDoc.main(ASDoc.java:35)
エラー: toplevel.xml を作成できませんでした : エレメント型 “return” の後には、属性指定 “>” または “/>” が必要です。
理由(推測だけど):
@returnの直後は半角スペースを置かないといけないみたい。
FlashDevelopだと、returnのところが彩度が高くなって目立つんだけどね。
コンパイルできるからって、見ない振りしちゃダメです。
エラー3:&は実体参照にすること!
エラー文:
[Fatal Error] :9:31: エンティティ “name1” への参照の終了は、’;’ 区切り記号である必要があります。
適格な形式でないテキストが検出されました。詳細については、E:\ASDoc\validation_errors.log を参照してください。
Source file E:\ASDocTest\ASDoc\tempdita\packages.dita does not exist
理由(推測だけど):
ASDocはhtml化作業なので、実体参照にしないとだめみたい。
エラー4:<String>は実体参照にすること!
エラー文:
[Fatal Error] :7:6: エレメント型 “String” は対応する終了タグ “</String>” で終了する必要があります。
適格な形式でないテキストが検出されました。詳細については、E:\ASDocTest\ASDoc\validation_errors.log を参照してください。
Source file E:\ASDocTest\ASDoc\tempdita\packages.dita does not exist
理由(推測だけど):
ASDocはhtml化作業なので、実体参照にしないとだめみたい。
まあ、エラー3と同じ理由なんだけど、エラー文が違うので分けました。
改善例
そんなわけで、ASDocの生成が可能になるコードは次です。
[sourcecode language=”as3″]
package jp.mztm {
//import jp.mztm.Foo;
public class Boo {
public function Boo() { };
/**
* 兄弟の名前を返します。
* Vector.&lt;String&gt;なのでstringであることが保障されています。
* この値で次の例のようにクエリー生成をします。
* brother.php?name0=foo&amp;name1=woo
* @return 兄弟の名前
*/
public function getBrother():Vector.<String> {
return Vector.<String>(["foo","woo"]);
}
}
}
[/sourcecode]
そんなわけで、お疲れ様でした。
以下、2011/12/17追記
ダメな例
[sourcecode language=”as3″]
for (var i:int = 0; i < n; i++)
{
}
[/sourcecode]
エラー5:比較演算子の<も実体参照にすること!
エラー文:
[Fatal Error] :53:27: エレメントの内容は、整形式の文字データまたはマークアップで構成する必要があります。
適格な形式でないテキストが検出されました。詳細については、E:\ASDocTest\ASDoc\validation_errors.log を参照してください。
Source file E:\ASDocTest\ASDoc\tempdita\packages.dita does not exist
理由(推測だけど):
ASDocはhtml化作業なので、実体参照にしないとだめみたい。
まあ、エラー3、4と同じ理由なんだけど、エラー文が違うので分けました。
[sourcecode language=”as3″]
for (var i:int = 0; i < n; i++)
{
}
[/sourcecode]
以下、2012/5/13追記
ダメな例
[sourcecode language=”as3″]
* @author umhr umehara@example.com
* @version 0.1
[/sourcecode]
エラー6:@に気をつけろ!
エラー文:
[Fatal Error] toplevel.xml:514:13: エレメント型 “example.com” の後には、属性指定 “>” または “/>” が必要です。
org.xml.sax.SAXParseException: エレメント型 “example.com” の後には、属性指定 “>” または “/>” が必要です。
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at flex2.compiler.asdoc.AsDocHelper.createTopLevelClasses(AsDocHelper.java:66)
at flex2.compiler.asdoc.AsDocAPI.createTopLevelClassesXML(AsDocAPI.java:401)
at flex2.tools.ASDoc.asdoc(ASDoc.java:94)
at flex2.tools.ASDoc.main(ASDoc.java:35)
エラー: toplevel.xml を作成できませんでした : エレメント型 “example.com” の後には、属性指定 “>” または “/>” が必要です。
理由(推測だけど):
メールアドレスの部分の@がだめみたい。@によるコマンドとかぶるからだと思う。コマンドとは異なる行に記入したら、通った。
[sourcecode language=”as3″]
* @author umhr umehara_atmark_example.com
* @version 0.1
* umehara_atmark_example.com is umehara@example.com
[/sourcecode]