首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gSOAP WSSE头缺少xmlns命名空间声明

gSOAP WSSE头缺少xmlns命名空间声明
EN

Stack Overflow用户
提问于 2011-10-18 19:37:14
回答 2查看 4K关注 0票数 1

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

代码语言:javascript
复制
soap_wsse_add_Security(proxy.soap);
soap_wsse_add_UsernameTokenText(proxy.soap, "UsernameToken-1", "user","passwd");

我的安全头看起来如下:

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
<wsse:Security SOAP-ENV:mustUnderstand="true">

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

代码语言:javascript
复制
<wsse:UsernameToken wsu:Id="UsernameToken-1">

丢失了xmlns:wsu="http...."部件。所以我想让它看起来像这样

代码语言:javascript
复制
 <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部件添加到要与规范内联的特定行中?我从服务中得到的错误是:

代码语言:javascript
复制
com.ctc.wstx.exc.WstxParsingException: Undeclared namespace
    prefix "wsse"

我已经查看了gSOAP文档,但我所能找到的只是如何添加标题,而不是关于如何向标题中的项添加名称空间定义的内容。

如能提供协助,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-03 13:35:26

只是回答这个问题来结束它。

您需要做的是编辑*.nsmap文件。在那里,您可以在结构中添加命名空间定义,例如:

代码语言:javascript
复制
SOAP_NMAC struct Namespace ZamtelWSZambia_namespaces[] =
{
    {"wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-ecext-1.0.xsd", NULL, NULL},
    {NULL, NULL, NULL, NULL}
};

然后,在客户机中只包括如下所示的NSMAP:

代码语言:javascript
复制
#include "soapstubs/XXXX.nsmap"
票数 1
EN

Stack Overflow用户

发布于 2013-07-02 07:42:30

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

使用WS\WS- to emap.dat作为基础(它已经定义了WS名称空间),并将其作为wsdl2h命令的参数:

代码语言:javascript
复制
wsdl2h -t WS-typemap.dat ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7812660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档