ExchangeWebサービスを使用してExchangeサーバーにJAX-WSWebサービス呼び出しを行うJavaで記述された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);
}
}
同様の問題が解決したフォーラムのどこかでメッセージを見つけたので、に変更"\\"
し"\\\\"
てみましたが、うまくいきませんでした。