目前我正在开发一个项目,我有一个Play Framework,我需要一些外部服务来与我合作。
不幸的是,这些服务都是所有SOAP Web服务,我需要以某种方式调用它们。因此,对于手头的任务,我已经生成了SoapExecutionContext并适当地使用了scala.concurrent.future块来为系统提供一些异步。
但我被困在授权部分。我尝试执行的开发Web服务依赖于基本的HTTP身份验证。因此,在搜索网络后,我想出了以下解决方案:
def userLogin(userLogin: UserLogin): LoginOutput = {
val service = setCredentials( new ProjectWebService().getProjectWebServiceSoap)
service.userLogin(userLogin.getUserName, userLogin.getPassword, userLogin.getUserIP)
}
def setCredentials(service: ProjectWebServiceSoap):ProjectWebServiceSoap = {
val requestContext = service.asInstanceOf[BindingProvider].getRequestContext
requestContext.put(BindingProvider.USERNAME_PROPERTY, Config.getxxxUsername())
requestContext.put(BindingProvider.PASSWORD_PROPERTY, Config.getxxxPassword())
service
}
使用Jax-WS生成客户端类。但是这个解决方案不起作用,我收到错误:Caused by: com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized
我无法弄清楚原因。有谁知道为什么这个Jax-WS基本的http认证与Play框架不起作用?这里缺少什么?
提前致谢