2014-10-04 3 views
0

Мне нужно написать простой HTTP-клиент, чтобы сделать простой запрос GET и получить ответ JSON с использованием Spring интеграции. Вызов с ошибкой без сообщения в исключении: org.springframework.web.client.HttpServerErrorException: 500 Внутренняя ошибка сервера. Я попытался отладки Spring код и сделал это успешно, пока у меня есть исходный код, а именно до в AbstractMessageHandler.handleMessage (сообщение Message) метод абстрактный handleMessageInternal (сообщение) Сообщение было названо, который выбросил исключение о том, что запрос с URL = http://example.com?q= {q} & authKey = {authKey} rows = {rows} & страница = {страница} & фильтр = {фильтр} не удалось. URL выглядел точно так, как я цитировал, т. Е. Выражения не были выполнены.HTTP-клиент с интеграцией с весной

Полезная нагрузка в сообщении всегда была такой, какая должна быть - экземпляр, если ZtInput с правильными значениями поля.

Может ли кто-нибудь дать мне представление, что делать?

Вот весна-интегрально-ZT-context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:int="http://www.springframework.org/schema/integration" 
xmlns:int-http="http://www.springframework.org/schema/integration/http" 
xmlns:oxm="http://www.springframework.org/schema/oxm" 
xsi:schemaLocation="http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http-2.1.xsd 
    http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-3.0.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
       http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd"> 

<int:channel id="InChannelZt"></int:channel> 
<int:channel id="OutChannelZt"></int:channel> 

<!-- Gateway Start --> 
<int:gateway id="ZtGateway" default-request-timeout="5000" default-reply-timeout="5000" 
default-request-channel="InChannelZt" service-interface="com.example.service.ZtService"> 
    <int:method name="getResults" request-channel="InChannelZt" reply-channel="OutChannelZt" /> 
</int:gateway> 

<int-http:outbound-gateway id="locationZtGateway" 
          request-channel="InChannelZt" 
          reply-channel="OutChannelZt" 
          url="${zt_url}?q={q}&amp;authKey={authKey}&amp;rows={rows}&amp;page={page}&amp;filter={filter}" 
          http-method="GET" 
          reply-timeout='5000'        
          expected-response-type="com.example.vo.ZtResponse"> 
     <int-http:uri-variable name="q" expression="payload.getQ()"/> 
     <int-http:uri-variable name="authKey" expression="payload.getAuthKey()"/> 
     <int-http:uri-variable name="rows" expression="payload.getRows()"/> 
     <int-http:uri-variable name="page" expression="payload.getPage()"/> 
     <int-http:uri-variable name="filter" expression="payload.getFilter()"/> 
</int-http:outbound-gateway> 

и два класса в ней упоминаются:

import com.xxxx.vo.ZtInput; 
import com.xxxx.vo.ZtResponse; 
public interface ZtService { 
    ZtResponse getSearchResults(ZtInput ztInput); 
} 

Payload:

public class ZtInput { 

private String q; //=pink 
private String authKey = "baef7f8e39c53f852c8a14b7f6018b58"; 
private String rows="20"; 
private String page="1"; 
private String filter = ""; 


public ZtInputVO() { 
} 
public String getQ() { 
    return q; 
} 
public void setQ(String q) { 
    this.q = q; 
} 
public String getAuthKey() { 
    return authKey; 
} 
public void setAuthKey(String authKey) { 
    this.authKey = authKey; 
} 
public String getRows() { 
    return rows; 
} 
public void setRows(String rows) { 
    this.rows = rows; 
} 
public String getPage() { 
    return page; 
} 
public void setPage(String page) { 
    this.page = page; 
} 
public String getFilter() { 
    return filter; 
} 
public void setFilter(String filter) { 
    this.filter = filter; 
} 
} 

ответ

0

URI в исключении - оригинал (нерасширенный URI); расширение выполняется в другую переменную. (Мы должны/изменим это, чтобы зарегистрировать расширенный URI). Но в нижней строке вашего сервера не понравился расширенный URI и вернул 500 внутренних ошибок сервера.

Вы можете использовать монитор сети/tcp (eclipse имеет один встроенный или вы можете использовать wirehark), чтобы проверить фактический URL-адрес, отправленный на сервер. Вы также можете посмотреть журналы сервера, если они включены.

Или в отладчике перейдите к строке 415 (в текущем исходном коде - версия 4.0.4) и проверьте realUri.

EDIT:.. Исключение теперь включает в себя расширенный URI (в настоящее время доступен в 4.0.5.BUILD-SNAPSHOT and 4.1.0.BUILD-SNAPSHOT)

+0

Спасибо большое, я действительно был введен в заблуждение сообщения об исключении, который включал необработанный URI Это очень хорошо, что вы зафиксировали его.. –

Смежные вопросы