XJC(ANT)およびJAXB検証を備えたXSDのRegexのバックスラッシュ
-
01-10-2019 - |
質問
XSDファイルには、次のREGEXタイプがあります。
<xsd:simpleType name="Host">
<xsd:restriction base="xsd:string">
<xsd:pattern
value="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b">
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
XJC経由でANTでこれから生成するとき、私は次の例外を取得しています:
[xjc] [ERROR] InvalidRegex: Pattern value '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b' is not a valid regular expression. The reported error was: 'This expression is not supported in the current option setting.' at column '2'.
[xjc] line 10 of file:/.../src/META-INF/portscan.xsd
すべてのbackslash()をダブルバックスラッシュ()に変更することで、これを修正できます。
<xsd:simpleType name="Host">
<xsd:restriction base="xsd:string">
<xsd:pattern
value="\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b">
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
しかし、その後、マーシャリング中に検証が実行されたとき、私は次の例外を取得しています。
Caused by - class org.xml.sax.SAXParseException: cvc-pattern-valid: Value '80.245.120.45' is not facet-valid with respect to pattern '\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b' for type 'Host'.
明らかに、ダブルバックスラッシュ()は、検証が失敗することに責任があります。しかし、XJCを機能させるために単一のバックスラッシュをエンコードするにはどうすればよいですか?
編集:
ああ、今、答えが見つかった、XJC regexpでサポートされていない「 b」のように思えます。それらを除外して問題を修正しましたが、エラーなしで生成され、実行時に機能するようです。わーい! :)
ただし、これが単語の境界なしに安全であるかどうかを知っていますか?多分代替手段がありますか?
解決
XMLスキーマ仕様で定義されている正規表現フレーバーは、単語の境界をサポートしていません。
あなたの場合、単語の境界は必要ありません。 XMLスキーマタイプのパターンファセットは、正規表現がストリングの開始アンカーで始まったかのように、常に文字列全体に一致するように正規表現を必要とします。 ^
また \A
そして、ストリングの終わりのアンカーで終わりました $
また \z
. 。 XMLスキーマは常に文字列全体に一致するため、これらのアンカーを修復に使用することもできません。
所属していません StackOverflow