2

私は、組織内の別のチームによって開発された XSD を使用して、契約優先 (トップダウン) 方式で小さな Web サービスを開発しました。私が抱えている問題は、リクエストの形式がわずかに間違っている場合でも、サービスが実行されることです。XSD に対して要求を検証するために本当に必要ですが、Axis または Castor にそれを強制する方法がわかりません。

「わずかに不正な形式」とは、リクエストに正しい要素が含まれているが、正しく配列されていないことを意味します。本当に不正なリクエストは、Castor のアンマーシャリング中に拒否されます。少し不正なリクエストは非整列化され、望ましくない結果になる可能性があります。次に例を示します。

有効なリクエストには、次のように表示されるアイテムのリストが含まれている必要があります。

<ItemList>
  <Item>Value1</item>   
  <Item>Value2</item>   
  <Item>Value3</item>   
</ItemList>

これにより正しく非整列化され、Web サービスは 3 つの値すべてを処理します。

ただし、同じ値のセットが次のように表示される場合を発見しました。

<ItemList>
  <Item>Value1</item>   
  <Item>Value2</item>   
</ItemList>
<ItemList>
  <Item>Value3</item>   
</ItemList>

次に、これも最初の例と同じ方法で非整列化され、3 つの値すべてが処理されます。この場合、最終結果は受け入れられますが、この構造は XSD によると正しくないため、エラーを作成することをお勧めします。

XSD から取得した要求定義は次のとおりです。

<xsd:complexType name="SampleRequestType">
  <xsd:sequence>
    <xsd:element name="ItemList" minOccurs="1" maxOccurs="1">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="Item" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
  </xsd:sequence>   
</xsd:complexType>

SoapUI は 2 番目の例を無効と報告しているため、XSD は正しいと確信しています。

XSD検証を強制的に実行するためにいくつかのことを試しましたが、これまでのところ効果がありません. Axis または Castor を強制的に検証する方法を知っている人はいますか?

歴史的な理由から、私はこれら 2 つのコンポーネントの古いバージョン (Axis 1.3 と Castor 1.1) を使用していますが、XSD 検証を機能させることができれば、アップグレードの苦労をいといません。

どうもありがとう

スティーブ

4

1 に答える 1

0

このリンクを試してください:

http://www.mail-archive.com/axis-user@ws.apache.org/msg21382.html

これは Axis 1.3 に関連しており、カスタム フィルターとヘルパー クラスを使用して検証を行う必要があります。

Castor に関しては、サイトにいくつかのスキーマの検証に関する例がありますが、それらがバージョンにどの程度関連しているかはわかりませんが (かなり古いようです)、アップグレードする理由になる可能性があります。

http://www.castor.org/how-to-enable-xml-validation.html

全体が大きすぎてここに投稿できませんが、私が投稿したリンクはかなり安定しているようです。

于 2012-05-01T17:17:16.670 に答える