Delphi 2007 неправильно использует веб-сервис JAX-WS - PullRequest
3 голосов
/ 20 января 2009

У меня проблема с Delphi 2007 при попытке использовать веб-сервис, настроенный на Java с использованием JAX-WS. Веб-сервис может нормально использоваться из другой Java-программы и с веб-сайта C # / ASP.NET 2.0. Однако, когда я пытаюсь получить доступ к той же службе с помощью средства импорта WSDL в Delphi 2007 (исправление 17-DEC-2007), веб-служба JAX-WS не распознает ни один из параметров, которые я передаю, и обнуляет их.

Я проверил сообщение SOAP, которое передается Delphi, и сравнил его с остальными, и они в значительной степени идентичны (за исключением некоторых незначительных значений пространства имен и большого количества состояний просмотра из .NET!)

Я также был в сети (самой полезной ссылкой была 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.

ТИА

Ответы [ 5 ]

4 голосов
/ 25 февраля 2009

ХА ХА ЭТО ЖИВЕТ !!!

В основном мне пришлось вынуть рекомендуемое

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);

и заставить его использовать сек. 5 кодировка. Пространства имен создаются по мере необходимости, а параметры передаются веб-службе Java.

Точно, нужно пиво, много пива:)

2 голосов
/ 31 января 2012

Вы должны просто прокомментировать эту строку в своем WSDL:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

Этого достаточно ... наслаждайся.

1 голос
/ 03 февраля 2010

Удаление soSendMultiRefObj из Converter.Options помогает

1 голос
/ 02 июня 2009

Я бился головой о стену в течение двух дней, пока не нашел этот пост ... И Сезар намекнул проверить THTTPRIO.Converter.Options ... Я перепробовал почти все, последний - установить soXXXXHdr в true -> затем случилось что-то странное, больше нет нуля с сервером: O ...

Я не знаю, почему этот параметр заставляет значения проходить, он просто (по крайней мере, для меня).

Было бы замечательно, если бы кто-то, кто действительно понимает, что происходит, объяснил бы это.

1 голос
/ 20 января 2009

Не решение вашей проблемы, но у меня недавно были проблемы с той же средой. Мне приходилось менять параметры много раз, пока не нашел правильный способ использования веб-службы (написано на C #).

Проверка:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions
...