2013-11-10 2 views
1

사용하여 XML 응답을 호출에 "http://services.enterprisecloud.terremark.com/cloudapi/ecloud/organizations/"하고 응답은 다음과 같습니다 유형의 클래스를 생성하지 않은 업체에 의해 주어진 XSD가있다처리 REST 내가 GET의 REST 호출을 보낸 JAXB

HTTP/1.1 200 OK Content-Length: 1373 Content-Type: application/vnd.tmrk.cloud.organization; type=collection x-tmrk-currentuser: /cloudapi/ecloud/admin/users/101 x-tmrk-token: cloud-F2A27F74-C04B-4566-AB53-CCC06DA2F798 Date: Thu, 12 May 2011 19:09:13 GMT 
<Organizations href="/cloudapi/ecloud/organizations" type="application/vnd.tmrk.cloud.organization; type=collection" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
..... 
..... 

조직 또는 단체. JAXB에 의해 생성 된기구 관련 클래스는 보이는 ArrayOfOrganization입니다 같은 :

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "ArrayOfOrganizationType", propOrder = { 
    "organization" 
}) 
public class ArrayOfOrganizationType { 

    @XmlElement(name = "Organization", nillable = true) 
    protected List<OrganizationType> organization; 
.... 
.... 

나는 다음과 같은 코드를 사용하려고 :

ResponseEntity exchange = template.exchange(URL, 
        HttpMethod.GET, 
        new HttpEntity(operation.getInput(), operation.getHeader()), 
        ArrayOfOrganizationType.class, 
        urlVariables); 

내가 오류는 다음과 같습니다

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [com.trmk.dto.ArrayOfOrganizationType] and content type [application/vnd.tmrk.cloud.organization;type=collection] 

에서을 스프링 dispatcher.xml, 나는 다음과 같은 한 :

<!-- Rest client --> 
<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient"> 
    <constructor-arg> 
     <bean class="org.apache.http.impl.conn.PoolingClientConnectionManager" /> 
    </constructor-arg> 
</bean> 

<bean id="restClient" class="com.transport.ext.RestClient"> 
</bean> 

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <property name="messageConverters"> 
     <list> 
      <bean id="marshallingHttpMessageConverter" 
      class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter" 
      p:marshaller-ref="jaxb2Marshaller" p:unmarshaller-ref="jaxb2Marshaller" 
      p:supportedMediaTypes="application/vnd.tmrk.cloud.organization" /> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> 
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> 
      <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> 
     </list> 
    </property> 
</bean> 

<bean id="jaxb2Marshaller" class="com.util.DefaultJaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>java.lang.String</value> 
    <value>com.trmk.dto.ArrayOfOrganizationType</value> 
     </list> 
    </property> 
</bean> 
<!-- End of Rest client --> 
,

나는이 문제를 해결하기 위해 아이디어 부족 것처럼 매우 도움이 될 것입니다 진행하는 방법에 대한 권고

당신이 각을 다시 추가해야 할 것입니다 때문에 당신은 분명히 그 적합하지 비록 ArrayOfOrganizationType@XmlRootElement(name="Organizations")를 추가하는 시도 할 수 있습니다

답변

1

JAXB 클래스를 다시 생성해야합니다. 시간이 나는 그것이이 XML에서 XSD를 내가 Terremark 클라우드 API 탐색기에서 볼 수있는 XML 응답을 사용하여 다음 생성에 의해 해결되었다 것에 대해

+0

좋은 제안하지만 (물론이 XML은 하나 개의 작업 만 다루고 있다는 점에서 부분이다). 그런 다음이 단일 작업 xsd를 사용하여 JAXB 클래스를 생성했으며 모든 것은 위에 게시 된 스프링 디스패처와 함께 작동합니다. – Sandeep

관련 문제