当前位置: 首页 > 面试题库 >

从SOAP请求中删除名称空间

袁高明
2023-03-14
问题内容

我已经导入了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缺陷…


问题答案:

如果服务期望:

  <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]

干杯,

布鲁诺



 类似资料:
  • 我发送一个POST请求,从一家运输公司生成AWB。为了做到这一点,我必须通过SOAP API POST请求发布多个数据条目。下面的XML是类似的,这是必需的(我已经简化了,否则它要求超过30个参数) 我是SOAP新手,请帮助我朝着正确的方向前进,我甚至非常感谢上面的XML代码,因为它有助于更好地理解。

  • 问题内容: 我正在使用“带有CSV和SOAP / xml请求的Jmeter”。我的测试在80个数据集中运行,并且CSV中的某些字段对于测试问题必须为空。 我的JMeter构建:-ThreadGroup -CSV数据-SOAP / XML -XPathExtractor-结果 CSV,例如矩阵表,多行和多列。 SOAP / XML 我的问题:当Jmeter替换了变量时: 当某些为空时一切都很好 系统

  • 问题内容: 根据特定的WSDL实现WebService。客户端无法更改。正确处理了来自客户端的请求,但是由于变量中的名称空间,客户端抱怨响应。 我想要什么(基于WSDL的soapUI响应): 我得到了什么(有关引起验证问题的变量的通知): Java客户端抛出此异常: [com.sun.istack.SAXParseException2; lineNumber:2;columnNumber:162;

  • 我有一个jsp网页。我需要删除用户名从数据库当我按删除按钮从网页。我尝试了下面的代码,但是我不能删除名称,而是在用户名数据库中插入一个新行和一个空值。 unblockServlet.java: 受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{//TODO自动生成的方法

  • 我正在寻找一种方法来使用当前的测试用例/测试步骤名称作为我的请求xml的一个属性的值。 有人知道语法吗?我查了SoapUI文档,但找不到 我正在寻找类似的东西 ${#TestCase#TestStep#标签}

  • 问题内容: 我从pandas函数获得了这样的输出文件。 我正在尝试只输出第二列,即 通过删除第一行的顶部和底部行。我怎么做? 问题答案: 您只需要属性: 您可以转换为列表或访问每个值: