1

私は春のresttemplateを使用してrestapiを呼び出し、xmlをアンマーシャルしてコードをオブジェクト化するエラーを取得しています:-

String  uri = "http://devd.webservice.com/devpl/api/1.0/credential?apiKey=" + apiKey + "&signature=" + signature + "&timeStamp=" + timeStamp;
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.set("accountName", accountName);
        requestHeaders.set("containerName", containerName);
        requestHeaders.set("folderPath", folderPath);
        requestHeaders.set("Content-Type","application/xml");
        requestHeaders.set("Accept","application/xml");
        RestTemplate template = getRestTemplate();
        HttpEntity<String> requestEntity = new HttpEntity<String>(requestHeaders);
        Credential result =(Credential)template.postForObject(uri,requestEntity,Credential.class);

オブジェクトを消費するオブジェクトクラスBean:-

   package com.simplidrivechn.netmagicsolutions.bean;
    import com.thoughtworks.xstream.annotations.*;

    @XStreamAlias("credential")
    public class Credential
    {
    private String DestinationUrl;
    private String AuthToken;
    private String StorageUrl;

        public String getAuthToken() {
            return AuthToken;
        }

        public void setAuthToken(String AuthToken) {
            this.AuthToken = AuthToken;
        }

        public String getDestinationUrl() {
            return DestinationUrl;
        }

        public void setDestinationUrl(String DestinationUrl) {
            this.DestinationUrl = DestinationUrl;
        }

        public String getStorageUrl() {
            return StorageUrl;
        }

        public void setStorageUrl(String StorageUrl) {
            this.StorageUrl = StorageUrl;
        }
      }

私の春の設定ファイル:-

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
    <list>
      <bean id="messageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
        <property name="marshaller" ref="xstreamMarshaller" />
        <property name="unmarshaller" ref="xstreamMarshaller" />
      </bean>
    </list>
    </property>
  </bean>

 <bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
  <property name="aliases">
    <props>
      <prop key="credential">com.simplidrivechn.netmagicsolutions.bean.Credential</prop>
    </props>
  </property>
 </bean>
</beans>

エラーが発生しています:-

Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException: Could not read [class com.simplidrivechn.netmagicsolutions.bean.Credential]; nested exception is org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.mapper.CannotResolveClassException: Credential : Credential

このエラーを解決するのを手伝ってください

4

2 に答える 2

1

エイリアスを定義するもう 1 つの方法は、autoscan です。

<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="autodetectAnnotations" value="true"/>
    <property name="annotatedClasses">
        <array>
            <value>com.simplidrivechn.netmagicsolutions.bean.Credential</value>
        </array>
    </property>
</bean>
于 2013-07-01T10:14:09.813 に答える
1

例外を見ると、XStreamMarshaller'sSpring コンテキストでエイリアスが正しく設定されていないようです。キーが「エイリアス」、つまりルート要素であることを確認する必要があります。「credential」は、逆シリアル化しようとしている xml 応答のルート要素ですか? エイリアスは大文字と小文字が区別されることに注意してください。次のコードは私にとってはうまくいきます。注aliases.put("person", Person.class);私の xml 応答には、ルート要素 'person' があります。このキーを「Person」と言うように変更するとaliases.put("Person", Person.class);、まさにあなたのような例外が発生します。

XStreamMarshaller marshaller = new XStreamMarshaller();
Map<String, Class> aliases = new HashMap<String, Class>();
aliases.put("person", Person.class);
marshaller.setAliases(aliases);
MarshallingHttpMessageConverter converter = new MarshallingHttpMessageConverter(
                marshaller, marshaller);
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
converters.add(converter);
template.setMessageConverters(converters);
HttpEntity request = new HttpEntity(null, headers);
ResponseEntity<Person> response = template.exchange(url,
                HttpMethod.GET, request, Person.class);
于 2013-02-18T02:10:05.883 に答える