从SOAP请求中删除名称空间

Wim十个边缘:

我已经导入了WSDL并使用它发送SOAP请求。看起来像这样:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
        <Calculate xmlns="urn:xx.WSDL.xxxxxWebService">
            <ContractdocumentIn>
                <AL>
                ...More XML...

问题出xmlns="urn:xx.WSDL.xxxxxWebService"在Calculate元素中。Web服务无法接受。Web服务不喜欢这样的名称空间...
使用SoapUI,我发现此请求可以正常工作:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:col="http://example.com.service.xxx/">
    <SOAP-ENV:Body>
        <col:Calculate>
            <ContractdocumentIn>
                <AL>
                    ...More XML...

那么,如何将请求从第一个版本更改为第二个版本?(不使用肮脏的把戏!)
(如果会导致正确的请求格式,则重新导入不是问题。)




再说一遍:不允许使用任何肮脏的技巧,例如入侵请求流以对其进行修改!


尽管我还没有完全测试它,但是C#/ VS2010和Delphi 2010似乎也无法使用我要调用的Web服务。似乎是用Java编写的Web服务。SoapUI恰好是用Java编写的,因此我们有一个Java客户端正在与Java服务通信,这似乎可以正常工作。但是还有其他客户吗?
无论如何,应该添加两个标签:“ Java”(因为它是Java服务)和“ vs2010”(因为.NET也不喜欢此服务)。
我正打算在.NET中为该服务编写一个包装器,希望它能起作用...没用。所以这是一个非常严重的缺陷,可能是Java缺陷...

布鲁诺·B:

如果服务期望:

  <col:Calculate>
     <ContractdocumentIn>
         <AL>

Delphi SOAP正在发送...

    <Calculate xmlns="urn:xx.WSDL.xxxxxWebService">
        <ContractdocumentIn>
            <AL>

...问题是ContractdocumentIn是一个不合格的元素,并且(直到Delphi XE)Delphi SOAP不支持作为操作的顶级元素的不合格的元素。顶级元素是函数的参数,没有地方可以存储基础元素必须为不合格的事实。对于映射到属性的元素,我们使用属性的Index来存储IS_UNQL标志。

顺便说一句,没有必要使用前缀。该服务还将(应该)接受:

    <Calculate xmlns="urn:xx.WSDL.xxxxxWebService">
        <ContractdocumentIn xmlns="">
            <AL>

后者较为冗长,但等同于前缀大小写。

在Delphi XE中,导入程序存储了以下事实:特定参数映射到不合格的元素,并且运行时根据此信息进行操作。我最近在一个线程中发布了基于D2010和D2007的XE实现的补丁程序:

https://forums.embarcadero.com/thread.jspa?threadID=43057

如果有人需要访问它们(他们位于附件区域,但可能已滚动),请给我发送电子邮件,我将使其可用。[embacadero dot com的bbabet]

干杯,

布鲁诺

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章