c++ - gSOAP WSSE header 缺少 xmlns 命名空间声明

标签 c++ web-services wsdl gsoap wsse

我在生成 gSOAP 安全 header (WSSE) 时遇到问题。我已经编译了所有必要的文件并使用以下调用将 WSSE 安全 header 添加到请求中:

soap_wsse_add_Security(proxy.soap);
soap_wsse_add_UsernameTokenText(proxy.soap, "UsernameToken-1", "user","passwd");

我的安全 header 看起来像这样:

<SOAP-ENV:Header>
  <wsse:Security SOAP-ENV:mustUnderstand="true">
    <wsse:UsernameToken wsu:Id="UsernameToken-1">
      <wsse:Username>testuser</wsse:Username>
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
    testPassword</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</SOAP-ENV:Header>

与我提供的服务器规范相比,行

<wsse:Security SOAP-ENV:mustUnderstand="true">

缺少 xmlns:wsse="http...." 和线

<wsse:UsernameToken wsu:Id="UsernameToken-1">

缺少 xmlns:wsu="http...." 部分。 所以我希望它看起来像这样:

 <wsse:Security  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  SOAP-ENV:mustUnderstand="true">
  <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"  wsu:Id="UsernameToken-1">

如何将 xmlns:wsse 和 xmlns:wsu 部分添加到特定行以符合规范?我从服务中得到的错误是:

com.ctc.wstx.exc.WstxParsingException: Undeclared namespace
    prefix "wsse"

我查看了 gSOAP 文档,但我所能找到的只是如何添加 header ,没有关于如何将命名空间定义添加到 header 中的项目的内容。

我们将不胜感激。

最佳答案

实际上,您不应该编辑.nsmap 文件,而应该编辑typemap.dat,这会影响.nsmap 的自动生成。

使用 WS\WS-typemap.dat 作为基础(它已经定义了 WS-SE namespace )并将其作为参数提供给 wsdl2h 命令:

wsdl2h -t WS-typemap.dat ...

关于c++ - gSOAP WSSE header 缺少 xmlns 命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7812660/

相关文章:

c++ - 带节点或不带节点的 AVL 树实现

objective-c - restkit vs afnetworking vs mknetworkkit vs nsurlconnection 有什么区别

ios - 使用页面控件从服务器异步下载图像

java - 如何使用 put 方法使用 Restful Web 服务将数据插入到我的 MySQL 数据库

java - 从 WSDL 生成客户端 stub

C++ [错误] 没有匹配的调用函数

c++ - 序列化包含指针 vector 的结构,每个指针包含其他指针

c++ - Visual Studio - 自动生成文件

c++ - gsoap 中的重大更改(将版本从 2.8.8 更新到 2.8.16)

web-services - Coldfusion Web 服务无法看到组件