2

Webサービス応答の処理中にApacheCXFで解析エラーが発生しました。結局のところ、返される空の要素は次のとおりです。

<myValue />

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

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

ここで、CXFメーリングリストで、XSD仕様では空の値は許可されていないことを読みました。

まあ、それはバグではないので、これの回避策はありません。空の要素は、DecimalまたはDateタイプなどには無効です。
したがって、例外をスローする必要があります。
あなたはそれが何をすることを期待していますか?

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

4

2 に答える 2

2

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

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

float値は、仮数の後に、オプションで文字「E」または「e」が続き、その後に指数が続く字句表現を持ちます。
...
指数と仮数の表現は、整数と小数の字句規則に従う必要があります。
...
特別な値の正と負の無限大と非数には、それぞれINF、-INF、NaNの字句表現があります。

したがってxs:float、少なくとも仮数が必要xs:decimalです...

10進数は、10進数のインジケーターとしてピリオドで区切られた10進数の有限長シーケンス(#x30〜#x39)で構成される字句表現を持ちます。オプションの先行記号を使用できます。

...そして空の文字列は有効ではありませんxs:decimal

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

于 2011-02-18T22:47:09.030 に答える
1

これは決定的な制約ではありません。xsdを次のように変更できるはずです

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

そして、xmlを無効にすることなく、floatに空の要素を指定できます。

上記の例は、要素が空の場合、その値は0であることを意味します。デフォルト属性は欠落している要素には適用されないことに注意してください。欠落している要素は、デフォルトが宣言されているかどうかに関係なく、欠落しているだけです。 http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

要素がコンテンツなしで表示される場合、スキーマプロセッサは、デフォルト属性の値と等しい値を要素に提供します。ただし、要素がインスタンスドキュメントに表示されない場合、スキーマプロセッサは要素をまったく提供しません。

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

于 2012-06-21T08:52:40.543 に答える