2017-02-15 34 views
1

У меня есть следующий сценарий. У меня есть файл XML:Как с помощью строки POST XML с помощью RestTemplate

запрос-users.xml

<?xml version="1.0"?> 
<q:query xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"> 
</q:query> 

При выполнении завивки воздаем:

curl.exe --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST http://localhost:8080/midpoint/ws/rest/users/search -d @C:\Users\user\query-users.xml 

я получить желаемый ответ в XML. Я пытаюсь сделать то же запрос POST с помощью RestTemplate из JAVA кода:

try{  
    StringBuilder builder = new StringBuilder(); 
    builder.append("http://localhost:8080/midpoint/ws/rest/users/search"); 
    builder.append("?query="); 
    builder.append(URLEncoder.encode("<?xml version=\"1.0\"?><q:query xmlns:q=\"http://prism.evolveum.com/xml/ns/public/query-3\"></q:query>")); 

    URI uri = URI.create(builder.toString()); 

    restOperations.postForEntity(uri, new HttpEntity<String>(createHeaders("username", "pass")), String.class); 
    logger.info(response); 
    }catch(Exception e){ 
     logger.info(e.getMessage()); 
    } 
} 

я получаю Internal Servel Error. Есть что-то, что я делаю неправильно, передавая XML-строку в запрос POST с RestTemplate, но я не понимаю, что это такое.

Есть ли способ, как это решить?

Благодаря

+0

У вас есть доступ к лог сервера? Я вижу, что вы обращаетесь к localhost – TungstenX

+2

Вы не отправляете свой XML в тело запроса, вы отправляете его как параметр запроса ... этот пост может помочь вам http://stackoverflow.com/questions/35461148/how- к отправке в XML-пост-запросов, с пружинным-resttemplate – anders

ответ

0

Ваш локон вызов и вызов RestTemplate не эквивалентны. В первом случае вы передаете свой xml как тело HTTP-запроса (это то, что делает -d). В вашем RestTemplate вы назначаете свой xml для запроса, и, следовательно, HTTP-запрос не имеет полезной нагрузки, а ваши данные кодируются по URL-адресу.

Если вы хотите передать свой XML в качестве HTTP органа, вы должны использовать различный HttpEntity constuctor: http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpEntity.html#HttpEntity-T-org.springframework.util.MultiValueMap-