1

RestTemplateを使用してRESTサービスにアクセスする際に問題が発生しました。私はすでにMarshallingConverterを使用して他の1つのサービスにアクセスすることができましたが、すべて正常に機能しました。この機能をコピーし、受け取ったXSDスキーマからModelクラスを生成しました。ただし、適切なコンバーターが見つからなかったという例外があります。これが私の構成です(それが重要な場合は、Vaadinに関連してSpring 3.0.6を使用しています):

<bean id="marshallingConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    <property name="marshaller" ref="jaxbMarshaller" />
    <property name="unmarshaller" ref="jaxbMarshaller" />
</bean>

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            ... here are my model classes ...
        </list>
    </property>
</bean>

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <ref bean="marshallingConverter" />
        </list>
    </property>
</bean>

RestTemplateは、私のサービスクライアントクラスの実装で自動配線されています。ここで何が欠けていますか?応答を確認しました。コンテンツタイプはapplication/xmlに設定されており、モデルクラスは自動生成されているため、構成は正しいはずです。助けてくれてありがとう。

4

1 に答える 1

0

だから私はこの作品を作りました。問題の一部は、生成されたクラスにXmlRootElementアノテーションがないことでした。詳細はこちら。そこで、XJCアノテーションをXSDスキーマに追加し、次のコマンドを使用してクラスを再度生成しました。

xjc -extension /path/to/schema

その後、すべてが機能しました(または、少なくともXMLの処理で例外は発生しませんでした)が、ルート要素内の要素はマーシャリングされておらず、パーサーからXMLElementの実装のみを取得しました。問題は(これは私のプロジェクトに固有でした)、要素定義が要素タイプとしてxs:anyTypeを使用していたことでしたが、これは解析できません。適切な要素タイプに変更した後、すべてが魅力のように機能しました。

于 2012-01-13T11:42:25.113 に答える