将SOAP隐式标头添加到WSDL

Vid*_*d L 16 soap wsdl soapheader

我的问题与此类似.当WSDL没有定义它时,如何传递肥皂头?但是不同.

对于我使用的Web服务,所有方法都需要在SOAP标头内以明文形式发送的身份验证.但是,我的WSDL不包含任何soap标头信息.我有一个自定义平台工具,我必须使用它来从WSDL生成代码.由于标题信息不可用,我无法直接使用生成的类 - 我不想手动修改代码以适应标题.

我尝试在WSDL中指定SOAP标头但是我无法获得正确的名称空间.WSDL在这里https://stage.totalcheck.sensis.com.au/service/webservice?wsdl,SOAP标头如下:

    <soapenv:Header>
        <wsse:Security>
            <wsse:UsernameToken>
                <wsse:Username>username</wsse:Username>
                <wsse:Password>password</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
   </soapenv:Header>
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?谢谢!

van*_*nto 20

从概念的角度来看,WSDL不应该定义头.WSDL仅用于定义服务的功能方面,如操作,消息,绑定和端点.消息和绑定定义了消息的有效负载应如何编码和格式化.

但是,SOAP消息的头部不属于有效负载.它们通常用于配置SOAP处理器的非功能属性.安全是一种非功能性的财产.有效载荷的功能方面不受影响.只保证通信是安全的,WS工具堆栈而不是服务实现应该解决这个问题.

因此,缺少的部分现在是允许将一些非功能性需求附加到WSDL服务的标准,以便代码生成器可以自动派生需要发送和/或理解的头部,以便根据需要实现非功能性属性 - - 无需手动处理标题字段.该标准存在并称为WS-Policy.策略通常包含一组备选方案,这些方案公开了提供者和消费者都应该能够实现的一组要求.当两个服务相互交互时,采取两种策略并计算所谓的"有效策略".它定义了常见的非功能性需求.使用此信息,提供者和使用者可以自行配置以添加所需的标头,例如WS-Security标头.WS-SecurityPolicy还定义了一组可以使用的策略.WS-PolicyAttachment定义了如何将这些策略附加到WSDL.

有代码生成器可以处理WS-Policies,例如Metro或Axis2

  • 对于绑定,同意WSDL [指定](http://www.w3.org/TR/wsdl#_soap:header)如何将某些部分映射到SOAP头.但是,从概念的角度来看,我认为使用它是一种不好的做法,因为它将您的WSDL绑定到特定的绑定.我同意,问题也被要求特定的SOAP绑定,所以使用头绑定可能没问题,但使用WS-Policy是一个更健全的方法(即它表达非功能性的关注"确保请求是经过身份验证的"与发送特定标头".在前一种情况下,WS-stack知道该做什么. (3认同)
  • 标题元素是在wsdl/soap模式中定义的,因此很难说它不应该被使用:http://schemas.xmlsoap.org/wsdl/soap/你当然可以使用WS-SecurityPolicy但它只是一个不同的,虽然更具体,规范. (2认同)