有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么我对Exchange Web服务的JAXWS调用在Java 6下工作,但在Java 7下失败,并带有“请求需要HTTP身份验证:未经授权”?

我有一个用Java编写的web应用程序,它使用exchange web服务对exchange服务器进行JAX-WS web服务调用

当我使用Java1.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运行它,也会发生这种情况

我查找了Java6和Java7之间对JAX-WS的更改,但只找到了一些关于可能的编译错误的notes

我不确定接下来该看什么,因为很明显身份验证代码没有更改,所以为什么它会失败

以下是我认为应该设置身份验证的方法:

/**
 *  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);
    }
}

我试着把"\\"改成"\\\\",因为我在某个论坛上发现了一条消息,它解决了一个类似的问题,但对我没有任何好处


共 (0) 个答案