Delphi 2007 неправильно использует веб-службу JAX-WS
Вопрос
У меня возникла проблема с Delphi 2007 при попытке использовать веб-сервис, который я настроил на Java с использованием JAX-WS.Веб-сервис можно прекрасно использовать из другой программы Java и с веб-сайта на C # / ASP.NET 2.0.Однако, когда я пытаюсь получить доступ к той же службе с помощью импортера WSDL в Delphi 2007 (исправление от 17 декабря 2007 года), веб-служба JAX-WS не распознает ни один из параметров, которые я ей передаю, и обнуляет их.
Я проверил сообщение SOAP, которое передается Delphi, и сравнил его с другими , и они в значительной степени идентичны (за исключением некоторых незначительных значений пространства имен и целого ряда состояний просмотра из .ЧИСТЫЙ один!)
Я также побывал в Интернете (самой полезной ссылкой была ссылка доктора Боба http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798) но никакой радости.
Кто-нибудь сталкивался с этим раньше?
ТИА.
Сага продолжается!
Повозившись с объектом HTTPRIO, чтобы попытаться заставить его работать, я в конце концов сдался и попробовал прямую передачу XML по HTTP.Потерпеть неудачу.
Итак, я создал простой тестер на C # и попробовал это.Работает без проблем.
Используя Fiddler для просмотра того, что отправлялось взад и вперед, казалось, что разница была только в пространствах имен.Я изменил пространства имен в XML - отправке в Delphi и ...это работает!
Это был образец исходного XML-файла, генерируемого WSDLImporter:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<version xmlns="http://path.to.service.com/">
<input>test</input>
</version>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
и вот что на самом деле работает:
<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:version xmlns:ns2="http://path.to.service.com/">
<input>test</input>
</ns2:version>
</S:Body>
</S:Envelope>
Итак, теперь, когда я это знаю, могу ли я изменить значения пространства имен для кода WSDLImporter?Я не вижу ничего очевидного в свойствах HTTPRIO.
ТИА
Решение
ХА-ХА-ХА, ОНО ЖИВЕТ!!!
В принципе, мне пришлось убрать рекомендованные
InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);
и заставьте его использовать раздел .5 кодирование.Пространства имен генерируются по мере необходимости, а параметры передаются веб-службе Java.
Правильно, нужно пиво, много пива :)
Другие советы
Вы должны просто прокомментировать эту строку в своем WSDL :
//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);
Этого достаточно...наслаждайся.
Не решение вашей проблемы, но недавно у меня были проблемы с такой же средой.Мне пришлось менять параметры много раз, пока я не нашел правильный способ использования веб-сервиса (написанный на C #).
Проверить:
- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions
Я бился головой о стену в течение двух дней, пока не нашел этот пост...И подсказка Сезара, чтобы проверить THTTPRIO.Конвертер.Опции...Я перепробовал почти все, последним было установить soXXXXHdr в true -> затем произошло что-то странное, больше никаких нулей на сервере: O...
Я не знаю, почему эта настройка пропускает значения, она просто пропускает (по крайней мере, для меня).
Было бы здорово, если бы кто-то, кто действительно понимает, что происходит, объяснил это.
Удаление soSendMultiRefObj из Converter.Настройки помогают