我在生成gSOAP安全头(WSSE)时遇到了问题。我已经编译了所有必要的文件,并使用以下调用将WSSE安全头添加到请求中:
soap_wsse_add_Security(proxy.soap);
soap_wsse_add_UsernameTokenText(proxy.soap, "UsernameToken-1", "user","passwd");我的安全头看起来如下:
<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文档,但我所能找到的只是如何添加标题,而不是关于如何向标题中的项添加名称空间定义的内容。
如能提供协助,将不胜感激。
发布于 2011-11-03 13:35:26
只是回答这个问题来结束它。
您需要做的是编辑*.nsmap文件。在那里,您可以在结构中添加命名空间定义,例如:
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:
#include "soapstubs/XXXX.nsmap"发布于 2013-07-02 07:42:30
实际上,您不应该编辑.nsmap文件,而应该编辑typemap.dat,这会影响.nsmap的自动生成。
使用WS\WS- to emap.dat作为基础(它已经定义了WS名称空间),并将其作为wsdl2h命令的参数:
wsdl2h -t WS-typemap.dat ...https://stackoverflow.com/questions/7812660
复制相似问题