1

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 のバグであると思われます。

4

1 に答える 1

0

同様の問題 (CXF 2.2.7) があり、 Bean 定義に属性serviceNameendpointName属性を追加することで解決できました。属性の詳細については、https<jaxws:client> ://cwiki.apache.org/CXF20DOC/jax-ws-configuration.html の「Spring クライアントの構成 (オプション 1)」セクションを参照してください。

注:wsdlLocation属性も定義されています。これは、CXF がサービスによって使用される XSD を見つけるために必要になる可能性があります。

これが私が持っているものの例です:

<jaxws:client id="client"
              serviceClass="com.example.ServiceInterface"
              address="http://example.com/endpoint"
              wsdlLocation="WEB-INF/wsdl/SampleWSDLFile.wsdl"
              serviceName="s:SampleService"
              endpointName="s:SampleServicePort"
              xmlns:s="http://www.example.com/some/namesapce">
...
</jaxws:client>

org.apache.cxf.wsdl.EndpointReferenceUtilsまた、この問題が発生したときに、クライアントが呼び出されるたびに、クラスによってスキーマ全体がログ ファイルに出力されることにも気付きました。上記のようにクライアント Bean をセットアップすると、この動作はなくなりました。あなたもそんなものを見ているのかしら…

WHICH_JARS私が言及すべきもう 1 つの詳細は、ファイルに概説されている CXF 提供のライブラリをすべて使用しなかった場合に、CXF から多くの予期しない動作が発生したことです。また、それらをビルドに追加して、サーバーまたは Java が提供するライブラリをオーバーライドするようにします。不要な場合は、後でいつでも削除できます。

于 2011-01-07T23:35:49.893 に答える