Web services 如何在SOAP请求中使用SAAJ进行身份验证?

Web services 如何在SOAP请求中使用SAAJ进行身份验证?,web-services,soap,ibm-watson,saaj,watson-explorer,Web Services,Soap,Ibm Watson,Saaj,Watson Explorer,我在这里使用这个非常棒的示例来创建一个简单的SAAJ Soap客户机到IBM Watson Explorer Soap Web服务 但我无法让身份验证工作 在createSOAPRequest方法调用中,只需添加 ... MimeHeaders headers = soapMessage.getMimeHeaders(); String encoded = new sun.misc.BASE64Encoder().encode((username+":"+password).getBytes(

我在这里使用这个非常棒的示例来创建一个简单的SAAJ Soap客户机到IBM Watson Explorer Soap Web服务

但我无法让身份验证工作

在createSOAPRequest方法调用中,只需添加

...
MimeHeaders headers = soapMessage.getMimeHeaders();
String encoded = new sun.misc.BASE64Encoder().encode((username+":"+password).getBytes());
String authString = "Basic " + encoded;
headers.addHeader("Authorization", authString);
headers.addHeader("SOAPAction", soapAction);
soapMessage.saveChanges();
...

但这行不通。我已经尝试了许多这种代码的排列。我做错什么了吗?另外,我如何知道服务需要BASE64Encoder

这意味着什么不起作用?我认为客户端是正确的,它可以很好地发送basicauth头。服务器端不接受它?你也写了服务器端吗?是否有对应的程序可以检查和处理您的基本auth头?学习组装SOAP请求的低级基础知识是很好的,尽管我建议切换到更高的级别,但您应该使用jax ws的CXF来完成这项工作,这要容易得多(如果我没有错的话,您的最终目标是使用基本身份验证调用SOAP服务,我认为这可以更容易地实现)。这将放在一个jar文件中,该文件将在Hadoop上运行,我希望它尽可能精简。我永远不会将它扩展到一个webservice调用之后,所以如果不需要的话,我不想引入JAX-WS。我没有编写服务器端。它实际上连接到Watson Explorer。可能它需要一个更复杂的身份验证soap数据包。我可以使用“基本”之外的内容吗?我不断收到错误“用户权限不足”,但我知道用户拥有足够的权限。哦,如果我注释掉授权标头,因此没有发送授权标头,我会收到相同的授权错误,因此我确信这与发送的授权标头有关。