0

我正在尝试使用标准商业报告 (SBR)。它使用 SOAP 和 ebXML(ebms3)。

他们以这个xml为例

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
  <soapenv:Header>
    <eb:Messaging xmlns:eb="http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soapenv:mustUnderstand="true" wsu:Id="soapheader-1">
      <ns2:UserMessage xmlns:ns2="http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/">
        <ns2:MessageInfo>
          <ns2:Timestamp>2018-01-07T23:01:31.592Z</ns2:Timestamp>
          <ns2:MessageId>A1515366089895.d1b7047b-2e8e-4fa1-81f0-c3eec198bddb@1515366089897</ns2:MessageId>
        </ns2:MessageInfo>
        <ns2:PartyInfo>
          <ns2:From>
            <ns2:PartyId type="http://abr.gov.au/PartyIdType/ABN">67094544519</ns2:PartyId>
            <ns2:Role>http://sbr.gov.au/ato/Role/Business</ns2:Role>
          </ns2:From>
          <ns2:To>
            <ns2:PartyId type="http://abr.gov.au/PartyIdType/ABN">51824753556</ns2:PartyId>
            <ns2:Role>http://sbr.gov.au/agency</ns2:Role>
          </ns2:To>
        </ns2:PartyInfo>
      </ns2:UserMessage>
    </eb:Messaging>

…

  </soapenv:Header>
  <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="soapbody"></soapenv:Body>
</soapenv:Envelope>

我的理解是,许多 SOAP 库采用 WSDL 来创建可以调用列出的服务的客户端。但是我找不到它的 WDSL。

SOAP api 是否需要有 WDSL?没有人你能进步吗?

4

2 回答 2

1

请注意,ebMS3/AS4 基于 SOAP 并使用其处理模型和结构,但它是自己的消息传递协议规范。虽然 ebMS3/AS4 规范也使用 WS-Security,但它不是一个普通的 Web 服务,因为有额外的处理要求。例如,关于使用 ebMS Receipt 消息实现可靠消息传递。

因此,通常使用软件供应商的实现在您的解决方案中实现 ebMS3/AS4 消息传递。有许多可用的实现,包括支持的开源。但是,对于澳大利亚 SBR,您应该注意有时会包含对 AS4 规范的扩展,这要求您在消息的 WS-Security 标头中包含 SAML 令牌。并不总是支持此扩展。

于 2018-05-01T17:29:13.663 回答
1

建议使用 WSDL 生成客户端代码,这通常是调用 SOAP 服务的方式。

但是,完全可以在不访问 WSDL 的情况下调用 SOAP 服务。如果您使用的技术栈不支持处理 WSDL 文件,这可能是必要的。您可以简单地使用 curl 访问一些 SOAP 服务。尽管我要强调的是,如果不从 WSDL 生成客户端代码,使用更复杂的 SOAP API 会很棘手。

使用 curl 调用 SOAP 服务的示例:

使用以下内容创建文件 getcities.xml:

获取城市.xml

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetCitiesByCountry xmlns="http://www.webserviceX.NET">
      <CountryName>France</CountryName>
    </GetCitiesByCountry>
  </soap:Body>
</soap:Envelope>

然后像这样调用 curl :

curl -v -X POST --data @getcities.xml -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: http://www.webserviceX.NET/GetCitiesByCountry" http://www.webservicex.net/globalweather.asmx

SOAP 调用实际上只是带有 XML 主体的 HTTP POST 请求(几乎在所有情况下)。

哦,按照惯例,WSDL 在带有参数 WSDL 的 SOAP 服务 URL 中可用,例如

https://somesoapprovider.net/soapservice?WSDL.

例如

http://www.webservicex.net/globalweather.asmx?WSDL
于 2018-03-27T13:22:22.320 回答