Delphi 2007 não consumir serviços da Web JAX-WS corretamente
Pergunta
Eu estou tendo um problema com o Delphi 2007 ao tentar consumir um serviço web Eu configurei em Java usando JAX-WS. O serviço web pode ser consumido fina de outro programa Java e de um site C # / ASP.NET 2.0. No entanto, quando tento acessar o mesmo serviço usando o importador WSDL em Delphi 2007 (17-Dez-2007 patch), o serviço web JAX-WS não reconhece qualquer um dos parâmetros que eu estou passando-o e nulos-los.
Eu verifiquei a mensagem SOAP que está sendo passado por Delphi e comparou-o com os outros e eles são praticamente idênticos (com exceção de algumas diminuições de namespace insignificante e um monte de estado de exibição daquele .NET!)
Eu também estive em todo o web (elo mais útil foi do Dr. Bob http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798 ), mas nenhuma alegria.
Alguém se deparar com isso antes?
TIA.
A saga continua!
Depois de buggering sobre com o objeto HTTPRIO para tentar fazê-lo funcionar eu finalmente desistiu e tentou uma transferência XML direto sobre HTTP. Fail.
OK, então eu construí um testador simples em C # e tentei isso. Funciona sem problemas.
Usando o Fiddler para ver o que estava sendo enviado para trás e para a frente, parecia que a única diferença estava nos namespaces. Mudei os namespaces no envio XML em Delphi e ... funciona!
Esta foi uma amostra do XML original que está sendo gerado pelo 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>
e aqui é o que realmente funciona:
<?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>
Então, agora que eu sei que isso, eu devo ir sobre como alterar os valores de namespace para o código WSDLImporter? Eu não posso ver nada óbvio nas propriedades HTTPRIO.
TIA
Solução
HA HA VIVE !!!
Basicamente eu tive que tirar o recomendado
InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);
e forçá-lo a usar Sec. 5 codificação. Namespaces são gerados conforme necessário e parâmetros são passados ??para o serviço web Java.
Right, necessidade cerveja, muita cerveja:)
Outras dicas
Você deve apenas comentar esta linha em seu WSDL:
//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);
Isso é o suficiente ... desfrutar.
Nem a solução para o seu problema, mas eu tinha tido problemas recentemente com o mesmo ambiente. Eu tive que mudar as opções muitas vezes até encontrar o caminho certo para consumir o webservice (escrito em C #).
Verifique:
- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions
Eu bati minha cabeça contra a parede por dois dias, até que eu encontrei este post ... E Cesars dica para verificar THTTPRIO.Converter.Options ... Eu tentei quase tudo, última foi para definir soXXXXHdr para true -> então aconteceu algo estranho, não mais nulos para servidor: O ...
Eu não sei porque essa configuração faz com que valores passar, ele só faz (pelo menos para mim).
Seria ótimo se alguém que realmente entende o que está acontecendo explicaria isso.
A remoção soSendMultiRefObj de Converter.Options ajuda