CXF 2.3.1 を使用。
JAXB を使用して WSDL から生成された Java。
使用する
<jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties>
クライアント構成で。
私のテストでは、WSDL のこの特定の要件を満たさないオブジェクトが作成されます。
<xsd:simpleType name="UUID.Content">
<xsd:annotation>
<xsd:documentation xml:lang="EN">
Universally Unique Identifier
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:token">
<xsd:length value="36" />
<xsd:pattern
value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" />
</xsd:restriction>
</xsd:simpleType>
ただし、メッセージはマーシャリングされ、発信インターセプター チェーンを通過します。
WSDL は一方向 (入力のみ) です。
wsdlLocation は Impl 内のアノテーションで指定されます。
興味深いことに、この同じ制約の検証に失敗した着信メッセージは、アンマーシャリング中にインターセプター チェーンによってブロックされます。
私はWebLogicでテストしています。WebSphere でテストすることも必要です。
その他の XSD 検証の失敗 (必須要素の欠落など) は、発信マーシャラーによって捕捉されています。
2.2.6 から CXF 2.3.1 にアップグレードした理由は、受信メッセージで同様の問題が発生していたためです。2.3.1 では、完全な XSD 検証がインバウンド メッセージに対して行われますが、アウトバウンド メッセージに対しては行われません。
CXF のバグは次のとおりです。
https://issues.apache.org/jira/browse/CXF-3233
メッセージを CXF インターセプター チェーンに送信する前に、org.springframework.xml.validation.XmlValidator を使用して検証することで、この問題を回避しました。CXF インターセプター チェーンを使用する修正を期待しています。ただし、これは CXF のバグであると思われます。