为特定的SOAP请求创建WSDL

彼德

我必须基于WSDL文件创建特定的SOAP请求消息。我正在使用SOAP UI从WSDL创建SOAP请求。

SOAP请求应如下所示:

<?xml version="1.0"?>
<SOAP-ENV:Envelope 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"> 
<SOAP-ENV:Header>
    <username>xxxx</username>
    <password>xxxx</password>
    <MaxOrders>1</MaxOrders>
    <xmlVers>1</xmlVers>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
    <m:getNewOrders xmlns:m= "urn:https://xxx.yyy.co.uk/b2b/soap/soap:getNewOrders/">
    </m:getNewOrders>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我有以下WSDL:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions 
xmlns:m="https://xxx.yyy.co.uk/b2b/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
name="xxxOrders" 
targetNamespace="https://xxx.yyy.co.uk/b2b/">
 <wsdl:types>
<xsd:schema targetNamespace="https://xxx.yyy.co.uk/b2b/">
  <xsd:element name="Envelope">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Header"/>
        <xsd:element name="Body"/>
      </xsd:sequence>
      <xsd:attribute name="encodingstyle" type="xsd:anyURI" form="qualified" use="required" />
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="Header">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="username" type="xsd:NCName" form="unqualified" />
        <xsd:element name="password" type="xsd:integer" form="unqualified" />
        <xsd:element name="MaxOrders" type="xsd:integer" form="unqualified" />
        <xsd:element name="xmlVers" type="xsd:integer" form="unqualified" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="Body">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="m:getNewOrders" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="getNewOrders">
    <xsd:complexType />
  </xsd:element>
</xsd:schema>
  </wsdl:types>

  <wsdl:message name="getNewOrders">
    <wsdl:part element="m:getNewOrders" name="parameters"/>
  </wsdl:message>


  <wsdl:portType name="xxxOrders">
    <wsdl:operation name="getNewOrders">
      <wsdl:input message="m:getNewOrders"/>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="xxxOrdersSOAP" type="m:xxxOrders">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="getNewOrders">
      <soap:operation soapAction="urn:https://xxx.yyy.co.uk/b2b/soap/soap:getNewOrders/"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="xxxOrders">
    <wsdl:port binding="m:xxxOrdersSOAP" name="xxxOrdersSOAP">
      <soap:address location="https://xxx.yyy.co.uk/b2b/soap/soap_orders.asp"/>
    </wsdl:port>
  </wsdl:service>
 </wsdl:definitions>

但是,当我采用该WSDL并将其导入SOAP UI时,SOAP请求消息看起来与我期望的有所不同:

<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:b2b="https://xxx.yyy.co.uk/b2b/">
   <soapenv:Header/>
   <soapenv:Body>
      <b2b:getNewOrders/>
   </soapenv:Body>
</soapenv:Envelope>

Header例如,我的元素为空。getNewOrders因为它必然要我觉得是可以的xmlns:b2b,所以我并不需要在元素getNewOrders的命名空间。我对么?

能否请别人指出我必须在WSDL中修复的内容?我搞不清楚了。

佩特鲁·加迪亚(Petru Gardea)

您可以使用名称空间,但问题是您没有定义标题部分。现在,即使您这样做了,我也不知道您的工具是否会考虑在内……但是,绝对地,就接口定义而言,这是您必须要做的。

搜索“ wsdl soap header示例”或类似内容应该会产生很多匹配,例如this

关键点是:

  • 您的输入部分应定义与标题相关的部分。
 <wsdl:message name="getNewOrders">
     <wsdl:part element="m:getNewOrders" name="parameters"/>
     <wsdl:part element="m:Header" name="header"/>
 </wsdl:message>
  • 您需要将该标头部分绑定到SOAP标头
<wsdl:operation name="getNewOrders">
  <soap:operation soapAction="urn:https://xxx.yyy.co.uk/b2b/soap/soap:getNewOrders/"/>
 <wsdl:input name="getNewOrders">
   <wsdlsoap:header message="getNewOrders" part="header" use="literal"/>
   <wsdlsoap:body use="literal" parts="parameters"/>
 </wsdl:input>
  <wsdl:output>
    <soap:body use="literal"/>
  </wsdl:output>
</wsdl:operation>

现在,我没有检查前缀(您应该有一个与WSDL的targetNamespace匹配的默认名称空间,以便上面的代码可以在没有前缀的情况下工作,等等),也没有尝试为您重写WSDL ...但是从根本上讲,这就是您的工作方式指定标头:您的输入有多个部分,在SOAP中,一个部分在标头中,另一部分在正文中。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为特定的SOAP请求创建WSDL

来自分类Dev

SOAP WSDL php请求

来自分类Dev

为SOAP服务器创建WSDL文件

来自分类Dev

Swift-为SOAP Web服务创建请求并解析响应

来自分类Dev

为特定提交创建拉取请求

来自分类Dev

PHP中的非WSDL SOAP请求

来自分类Dev

SharePoint SOAP请求始终发送回WSDL

来自分类Dev

错误的SOAP请求被创建

来自分类Dev

从WSDL创建请求响应XML

来自分类Dev

SOAP请求返回了wsdl而不是预期的SOAP响应

来自分类Dev

如何创建SOAP 1.2请求

来自分类Dev

PHP SOAP请求不适用于WSDL

来自分类Dev

给定WSDL文件,在Java中创建SOAP客户端

来自分类Dev

通过 WSDL SOAP 连接创建条目的 Powershell 错误

来自分类Dev

Visual Studio WSDL 创建异步/等待 SOAP 网络服务

来自分类Dev

如何从 PHP 中的 SOAP WebService 的 WSDL 创建对象?

来自分类Dev

如何使用CDATA创建SOAP请求

来自分类Dev

PHP SOAP请求属性未正确创建

来自分类Dev

在Matlab Soap请求中创建子标签

来自分类Dev

创建SOAP请求后,SparkleXRM空GUID

来自分类Dev

使用 Grails 使用 XML 创建 SOAP 请求

来自分类Dev

PHP/SOAP - 如何使用 SOAP 创建工作请求

来自分类Dev

SOAP wsdl,授权

来自分类Dev

SOAP Spring wsdl链接

来自分类Dev

使用WSDL URL作为Web服务使用ASP.NET进行SOAP请求和响应?

来自分类Dev

节点SOAP WSDL请求不完整(仅一些块)

来自分类Dev

目标C-SOAP请求在响应中返回WSDL而不是正确的响应

来自分类Dev

在使用 wsdl 文件生成的soap请求中自定义前缀和命名空间位置

来自分类Dev

为 SoapServer EndPoint PHP 文件创建 WSDL 文件