2011-10-05 3 views
0

사용자 지정 클라이언트 인증이 필요한 WS를 호출해야합니다. 이 인증은 클라이언트에서 실행되고 http://127.0.0.1:80에서 수신 대기하는 프로그램에 의해 수행됩니다. 그래서 나는이처럼 시작하는 ProxySelector의 추가HttpUrlConnection.plainConnect()에서 ProxySelector이 null 인 이유는 무엇입니까?

final ProxySelector ps = new ProxySelector() { 
    @Override 
    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { 
     ioe.printStackTrace(); 
    } 

    @Override 
    public List<Proxy> select(URI uri) { 
     final List<Proxy> proxy = new ArrayList<Proxy>(); 
     final SocketAddress adr = new InetSocketAddress("127.0.0.1", 80); 
     final Proxy p = new Proxy(Proxy.Type.HTTP, adr); 
     proxy.add(p); 
     return proxy; 
}; 
ProxySelector.setDefault(ps); 

잘 작동하는이 사용하지만, 일부 리팩토링 (WS 통화와 관련이없는) 한 후, 대신 을 갖는 http://my.server.com URI 입력으로, 내가 가진 소켓 : //my.server.com 그리고 그것은 "알 수없는 프록시 유형 : HTTP"실패 ..., 소켓 방식과 매우 정상적인 보이는

예전의 차이를 응용 프로그램과 새로운 하나는 HttpUrlConnection.plainConnect() 동안의 동작이 동일하지 않았습니다. 사실 실제 버전에서는 오른쪽 URI (922 줄의 http://www.docjar.com/html/api/sun/net/www/protocol/http/HttpURLConnection.java.html), 을 사용하여 ProxySelector를 호출하고 새 버전은 959 줄로 이동하여 socket : // scheme으로 끝나는 새로운 기본 연결을 만들기 시작합니다.

ProxySelector sel = 
    java.security.AccessController.doPrivileged(
     new java.security.PrivilegedAction<ProxySelector>() { 
      public ProxySelector run() { 
       return ProxySelector.getDefault(); 
      } 
     }); 

이 "SEL"으로 내의 ProxySelector를 반환하는 데 사용하지만 지금은 null을 반환 :

그래서 차이는 다음 줄에있다.

누군가이 줄을 정확하게 의미하는 이유와 그 결과가 이전 응용 프로그램과 다른 이유를 설명 할 수 있습니까?

답변

0

결국, 나는 이것을 알아 낸 것입니다!

WS 클라이언트를 생성하는 데 사용 된 jaxws-maven-plugin은 작업 응용 프로그램의 버전 1.10에서 새 것으로 변경되었으며, 위에서 설명한대로 HttpUrlConnection에 변경 사항이 도입되었습니다.

또 무슨 일이 있었는지 모르는, 어느 의존 라이브러리는 1.10과 1.12 만 사이에 변경된 내 이상한 질문을 읽을 사람들을 위해

어쨌든 감사 HttpConnections :) 만드는 방식에 매우 큰 차이가있다 ... ^^

관련 문제