Я пытаюсь создать свой первый клиент веб-службы для API eBay с помощью мастера нового клиента веб-службы NetBeans, и WSDL обнаружил здесь. Насколько я понимаю, здесь используется JAX-WS для создания файлов классов, и все мои запросы - это протокол SOAP.
Кажется, все работает нормально, за исключением случаев, когда я пытаюсь выполнить запрос, eBay отвечает 404, что кажется его стандартным ответом, если вызов не имеет для него смысла.
Wireshark показывает мой запрос как:
<?xml version = "1.0" ?>
<S:Envelope xmlns:S = "http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<FindItemsRequest xmlns = "urn:ebay:apis:eBLBaseComponents">
<QueryKeywords>dvd players</QueryKeywords>
</FindItemsRequest></S:Body></S:Envelope>
Но инструмент тестирования API eBay говорит, что он должен выглядеть так:
<?xml version = "1.0" encoding = "utf-8"?>
<FindItems xmlns = "urn:ebay:apis:eBLBaseComponents">
<QueryKeywords>dvd players</QueryKeywords>
</FindItems>
Итак, NetBeans обернул мой запрос тем, что я могу только предположить, это некоторая стандартная структура SOAP, и добавил «Запрос» к имени вызова.
Откуда у него это пространство имен «конверт» и почему его не использует eBay? И как я могу сказать NetBeans, чего я действительно хочу от него?
Мне также интересно, в чем преимущество eBay SDK по сравнению с этим методом (если он сработал).




Мне удалось это понять, и, как обычно, я ругаю себя за то, что не читал досконально документацию по API.
API eBay ожидает, что определенные заголовки HTTP будут установлены, прежде чем он выдаст что-либо, кроме 404.
После этого запрос SOAP, созданный NetBeans, был правильно интерпретирован eBay, и были возвращены ожидаемые результаты.