我有一个用 Java 编写的 Web 应用程序,它使用 Exchange Web 服务对交换服务器进行 JAX-WS Web 服务调用。
当我使用 Java 1.6.0_34 编译和运行应用程序时,它工作正常。
如果我使用 Java 1.7.0_07 编译并运行它,我会收到以下错误:
com.sun.xml.ws.client.ClientTransportException: request requires HTTP authentication: Unauthorized
at com.sun.xml.ws.transport.http.client.HttpClientTransport.checkResponseCode(HttpClientTransport.java:212)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:149)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:86)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.client.Stub.process(Stub.java:248)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
at $Proxy62.getUserAvailability(Unknown Source)
...
如果我用 1.6.0_34 编译它并用 1.7.0_07 运行它,也会发生这种情况。
我查找了 Java 6 和 7 之间对 JAX-WS 的更改,但我只发现了一些关于可能的编译错误的注释。
我不确定接下来要看什么,因为显然身份验证代码没有更改,那为什么会失败?
这是我认为应该设置身份验证的方法:
/**
* Set up Authentication
*
*/
protected void setupAuthenticator(){
if(authenticator == null){
authenticator = new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication(){
String superusername = ExchangeServerPortFactory.this.adDomain
+ "\\"
+ ExchangeServerPortFactory.this.username;
String superPassword = ExchangeServerPortFactory.this.password;
return new PasswordAuthentication(superusername
,superPassword.toCharArray());
}
};
Authenticator.setDefault(authenticator);
}
}
我尝试更改"\\"
为,"\\\\"
因为我在某个论坛上发现了一条消息,该消息解决了类似的问题,但这对我没有任何好处。