2016-06-30 15 views
0

私は、Axis2を使用してJavaで構築されたSOAP Webサービスを持っています。要求のいくつかの要素は空であってはいけません。例えば、私は最小の長さを検証することができますが、私も空であってはならない日付とブール値を持っています。これをXSDでどのように検証できますか?XSDの空の要素を許可しない

空のdate要素がスキーマの検証に合格し、Javaの層にnullのDateを与えます。私はそれがヌルではないことを確認することができました。そうでない場合、私の日付の1つはオプションであり、欠落しているかのように扱うのではなく、要素が空の場合はエラーを返さなければなりません。

オプションの要素の場合、Axis2生成クラスは 'isThisElementSpecified()'メソッドを提供しますが、要素がオブジェクトにマップされている場合、要素が空の場合はfalseを返します。したがって空のためにnullを区別できません欠けている要素。

空のブール要素もスキーマの検証に合格し、Javaレイヤーでは「偽」と表示されます。さらに悪いことに、これらの要素はオプションですが、isThisElementSpecified()メソッドは、プリミティブにマップする空の要素に対してtrueを返します。したがって、要素が存在しないかのように扱うこともできません。指定されていない)。

これらの要素はすべて、XSDでnillable = "false"です。ブール値にはデフォルト値がありますが、効果はありません(「デフォルト」は属性のみで動作することがわかります)。

にはを受け入れる方法についての多くの回答がありました。空の日付要素は、通常の動作でスキーマの検証に失敗することを示していますが、ここではそうしていません。

編集:空の要素を許可しないという既存の質問は、minLength = 1の制限を示していますが、これらのデータ型では許可されていません。私のXSDの

関連ビット:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:tns="http://www.my.company.com/project" 
      targetNamespace="http://www.my.company.com/project" 
      elementFormDefault="qualified" 
      attributeFormDefault="unqualified"> 
    <xs:element name="fooRequest"> 
    <xs:complexType> 
     <xs:sequence> 
     <!--snip some stuff--> 
     <xs:element name="startDate" type="xs:date" 
        nillable="false" minOccurs="0" /> 
     <!--snip--> 
     <xs:element name="includeBar" type="xs:boolean" 
        default="true" nillable="false" minOccurs="0" /> 
     <!--snip--> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

@TomRedfernその質問には文字列要素しか記述されておらず、提案された答えは長さを少なくとも1に制限することです - 私が言及したように、私はその解決策を文字列に認識しています。そのタイプの制限は、日付またはブール値には許可されません。 – CarrieVS

+0

どのバリデーターがこのスキーマに対して有効なものとして ''を受け入れますか?あなたはそれに対してバグレポートを提起しましたか? –

+0

@ C.M.Sperberg-McQueenさらに調査したところ、このWebサービスにはない特定のモジュールを含めない限り、Axis2はスキーマに対して検証されないことを学びました。だから... スキーマはJavaクラスの生成にのみ使用され、明示的な制限の検証が含まれますが、要素が空であるかどうかは一般的ではありません。 正しい解決策は、検証モジュールを使用することでしたが、私のコントロール外の状況ではオプションではないためでした。 – CarrieVS

答えて

1

ソート! minLengthは文字列にのみ適用されますが、 'pattern'制限はどの基本型でも使用できます。 <xs:pattern value=".+" />は要素を空でないように制限します。

関連する問題