В одном из предыдущих постов я показал пример веб сервиса, но не заиспользовал его. Сейчас я хочу исправить это и показать один из наиболее удобных (IMHO) способов общения с SOAP.

Для начала запустим сервис.

git clone https://github.com/d10xa/spring-boot-ws-bad-practice.git
cd spring-boot-ws-bad-practice
./gradlew bootRun -Pserver.port=8081

Создадим файл request.xml со следующим содержимым:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ws="http://d10xa.ru/schema/bad-practice/countries-service"
>
   <soapenv:Header/>
   <soapenv:Body>
      <ws:getCountryRequest>
         <ws:name>${name}</ws:name>
      </ws:getCountryRequest>
   </soapenv:Body>
</soapenv:Envelope>

Следует обратить внимание на плэйсхолдер ${name}. При отправке сообщения мы будем его заменять на нужное нам значение с помощью sed

sed -e "s/\${name}/Spain/" request.xml | \
http POST :8081/ws/counties 'Content-Type:text/xml' -v

Ответ отображается в консоли с приятной подсветкой синтаксиса.

POST /ws/counties HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 315
Content-Type: text/xml
Host: localhost:8081
User-Agent: HTTPie/0.9.2

<ns0:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns1="http://d10xa.ru/schema/bad-practice/countries-service">
    <ns0:Header />
    <ns0:Body>
        <ns1:getCountryRequest>
            <ns1:name>Spain</ns1:name>
        </ns1:getCountryRequest>
    </ns0:Body>
</ns0:Envelope>

HTTP/1.1 200 OK
Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length: 477
Content-Type: text/xml;charset=utf-8
Date: Wed, 07 Oct 2015 09:46:48 GMT
SOAPAction: ""
Server: Apache-Coyote/1.1
X-Application-Context: application:8081

<ns0:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns1="http://d10xa.ru/schema/bad-practice/countries-service" 
xmlns:ns2="http://d10xa.ru/schema/bad-practice/country">
    <ns0:Header />
    <ns0:Body>
        <ns1:getCountryResponse>
            <ns1:country>
                <ns2:name>Spain</ns2:name>
                <ns2:population>46704314</ns2:population>
                <ns2:capital>Madrid</ns2:capital>
                <ns2:currency>EUR</ns2:currency>
            </ns1:country>
        </ns1:getCountryResponse>
    </ns0:Body>
</ns0:Envelope>

Для сравнения, тот же запрос через curl. В консоль выведется неотформатированное тело ответа, которое без дополнительной обработки невозможно читать.

sed -e "s/\${name}/Spain/" request.xml > curlrequest.xml
curl --header "content-type: text/xml" -d @curlrequest.xml http://localhost:8081/ws/counties

Утилита HTTPie это curl для людей. Удобные команды. Есть реализации под Linux, Mac OS, Windows. Есть подсветка синтаксиса и форматирование. Что еще для счастья надо? Об этом можно почитать в репозитории HTTPie на гитхабе