0

次のような文字列を返す SOAP/Web サービスを作成しました。

"<GeocodeResponse><City>Denver</City><State>CO</State></GeocodeResponse>"

このデータのスキーマを定義しました。

<xs:element name="GeocodeResponse">
<xs:complexType>
    <xs:sequence>
        <xs:element name="City"/>
        <xs:element name="State"/>
    </xs:sequence>
</xs:complexType>
</xs:element>

これは、Web サービス メソッドの応答として返されます

<xs:complexType name="standardizeResponse">
  <xs:sequence>
     <GeocodeResponse/>
  </xs:sequence>
</xs:complexType>

SOAP エンベロープ内では、Xml がエスケープされるため、必要な xml を取得する代わりに、次のようなものを取得します。 &lt;GeocodeResponse&gt;&lt;City&gt;Denver&lt;/City&gt;&lt;State&gt;CO&lt;/State&gt;&lt;/GeocodeResponse&gt;

スキーマを使用して文字列で返されるものを定義することで、文字列がエスケープされるのを回避できると考えました。

4

2 に答える 2

1

生の文字列を XML プロセッサに提供する場合、実際の文字列を再構築できるように、文字列の意味を受信者に伝える必要があると理解されています。これは、プロセッサが予約済みの XML 文字 (< > & % ') をエスケープして、ドキュメント内のメッセージではなくドキュメントの一部として誤解されないようにすることを意味します。

xjc を使用してスキーマを反映するオブジェクトを生成する場合 (または、wsimport を使用して WSDL からオブジェクトとサービス スタブを生成する場合)、生成されたオブジェクトにデータを入力し、マーシャラーを使用して応答メッセージを作成できます。次に、適切にタグ付けされた XML としてレンダリングされます。Marshaller のドキュメントでは、さまざまな形式にマーシャリングするための使用例が実際に提供されています ( http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html )。

コンテキストの欠如を補うために仮定を立てているため、この回答が当てはまらない場合は、そのように回答して、実際のサービス エンドポイント コードを含めてください。私 (または別のレスポンダー) は再訪できます。

幸運を!

于 2012-05-24T04:03:01.623 に答える