Java 向SOAP标头添加原始文本

Java 向SOAP标头添加原始文本,java,soap,text,header,Java,Soap,Text,Header,在Java中,我需要将包含客户端SOAP请求的身份验证数据的SOAP头添加到我无法控制的第三方web服务。我已经设置了一个SOAPHandler,并且正在监视发送到服务器端的实际代码,以查看发生了什么。身份验证不起作用 我真正需要的是: <soap12:Header> <AuthenticationHeader xmlns="http://abc.xyz.com/"> <UserName>uname</UserName>

在Java中,我需要将包含客户端SOAP请求的身份验证数据的SOAP头添加到我无法控制的第三方web服务。我已经设置了一个SOAPHandler,并且正在监视发送到服务器端的实际代码,以查看发生了什么。身份验证不起作用

我真正需要的是:

<soap12:Header>
    <AuthenticationHeader xmlns="http://abc.xyz.com/">
      <UserName>uname</UserName>
      <Password>pwd</Password>
    </AuthenticationHeader>
  </soap12:Header>
服务器端无法处理额外的
xmlns=“”
,我尝试过的所有命令似乎都添加到用户名和密码标记名中

如果我试图构造一个字符串并将该文本直接添加到
authenticationheader
元素,则字符将被转义。我还尝试了CDATA标记…它可以防止<和>字符转义,但服务器仍然不喜欢它

我找到了一个解决方案,构建一个
文档
来保存原始文本(防止转义字符),然后添加它,但不幸的是,
文档
似乎只能添加到SOAP主体,而不能添加到SOAP头

有人对如何克服这个问题有什么建议吗?服务器人员使用的是.NET而不是Java编程,因此他们无法提供帮助

我从服务器得到了正确的响应,所有的SOAP输出标记都不正确,但是标记中包含的错误消息是“无法验证”


谢谢

以下代码将生成您要生成的正确的
身份验证

SOAPHeader header = request.getSOAPHeader();

Document doc = header.getOwnerDocument();

Element el1 = doc.createElementNS("http://abc.xyz.com/","UserName");
el1.setTextContent("MyName");

Element el2 = doc.createElementNS("http://abc.xyz.com/","Password");
el2.setTextContent("pass******");

Element el0 = doc.createElementNS("http://abc.xyz.com/", "AuthenticationHeader");

el0.appendChild(el1);
el0.appendChild(el2);
header.appendChild(el0);
SOAPHeader header = request.getSOAPHeader();

Document doc = header.getOwnerDocument();

Element el1 = doc.createElementNS("http://abc.xyz.com/","UserName");
el1.setTextContent("MyName");

Element el2 = doc.createElementNS("http://abc.xyz.com/","Password");
el2.setTextContent("pass******");

Element el0 = doc.createElementNS("http://abc.xyz.com/", "AuthenticationHeader");

el0.appendChild(el1);
el0.appendChild(el2);
header.appendChild(el0);