2011-02-18 10 views
2

Webサービス応答の処理中にApache CXFで解析エラーが発生しました。それは何に降りてくると、返される空の要素され、次のようXSDでprimitveデータ型が使用できません。

<myValue /> 

要素の定義を次のとおりです。

<xsd:element name="myValue" type="xsd:float" minOccurs="0"> 

私はempty value is not allowed by the XSD-spec CXFメーリング・リストに読んだ:

これはバグではないため、 の回避策はありません。空の 要素は、Decimal またはDate型などのDecimalには無効です。
したがって、例外をスローするべきです(SHOULD)。
何をする予定ですか?

ここで質問があります。ここでは、XMLスキーマ仕様でこの制約をどこで見つけることができますか?

答えて

2

この制約は、XMLスキーマ仕様では正確に見つけることができますか?

http://www.w3.org/TR/xmlschema-2/#float-lexical-representation

float値は 仮数からなる字句 表現は、指数続い 文字 "E" または "e" で、必要に応じて、続いています。
...
指数と の仮数の表記は、整数と10進数の場合は字句規則 に従わなければなりません。
...
正および負の無限大の特別な値と非数 は、それぞれ、語彙表現INF、-INF とのNaNを有します。

だからxs:floatxs:decimal少なくとも仮数を必要...

小数は、10進数の有限長シーケンス (#x30-#X39)からなる字句表現 を有します を小数のピリオドで区切って インジケータ。オプションの先頭の記号は です。

...空の文字列は有効なxs:decimalではありません。

この要素の値がない場合は、可能であれば、この要素を含めないようにしてください。 minOccursの値が0であるため、スキーマでこの要素が省略されているようです。他の解決策は、0またはNaNのような適切な置換値を挿入することです。

0

これは決定的な制約ではありません。 あなたは

<xsd:element name="myValue" type="xsd:float" minOccurs="0" default="0" /> 

にあなたのXSDを変更して無効であるためにあなたのxmlを発生させることなく、あなたのフロートのための空の要素を供給することができるようすることができるはずです。

上記の例は、要素が空の場合、その値が0であることを意味します。デフォルト属性は欠落要素には適用されません。欠落要素は欠落しています。 http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

要素は、任意のコンテンツなしで表示された場合、スキーマ・プロセッサは、デフォルトの属性と同じ値を持つ要素を提供します。ただし、要素がインスタンス文書に表示されない場合、スキーマプロセッサは要素をまったく提供しません。

私は今まで、これを使用していないが、W3C仕様の個人的なミス読み取りを防ぐために、私は空のXSとXMLオンラインバリデータで確認しています(デフォルトを持つフロート要素が受け入れられました少なくともこのオンラインバリデーターによって:http://www.freeformatter.com/xml-validator-xsd.html)。