2017-08-18 31 views
10

外部サーバーへのWebサービス呼び出しを実行しているサーバーがあります。 この呼び出しは、SSL経由で発生することがあり、プロキシを使用して:軸の例外:o.a.axis2.transport.http.HTTPSender.sendViaPost(196) - 送信できません - 接続が拒否されました

私のトラストストアはよく構成されています

trustStore is: /opt/configuration/keystore/truststore.jks 
trustStore type is : jks 
trustStore provider is : 
init truststore 
adding as trusted cert: 

はまた、私のハンドシェイクが正しく行われます

https-jsse-nio-8443-exec-6, READ: TLSv1.2 Handshake, length = 40 
Padded plaintext after DECRYPTION: len = 16 
0000: 14 00 00 0C 78 49 E5 E1 29 04 A5 1D FC 4F E6 E2 ....xI..)....O.. 
*** Finished 
verify_data: { 120, 73, 229, 225, 41, 4, 165, 29, 252, 79, 230, 226 } 
*** 
[read] MD5 and SHA1 hashes: len = 16 
0000: 14 00 00 0C 78 49 E5 E1 29 04 A5 1D FC 4F E6 E2 ....xI..)....O.. 
https-jsse-nio-8443-exec-6, WRITE: TLSv1.2 Change Cipher Spec, length = 1 
[Raw write]: length = 6 
0000: 14 03 03 00 01 01         ...... 
*** Finished 

私は選択のProxySelectorを持っています使用するプロキシ:

@Override 
public List<Proxy> select(URI uri) { 

    if (LOGGER.isDebugEnabled()) { 
     LOGGER.debug("select for URL : " + uri); 
    } 

    if (uri == null) { 
     throw new IllegalArgumentException("URI cannot be null."); 
    } 

    // Get protocol and management configuration for HTTP or HTTPS. 
    String protocol = uri.getScheme(); 
    if (StringUtils.equalsIgnoreCase("http", protocol) 
      || StringUtils.equalsIgnoreCase("https", protocol) 
      || StringUtils.equalsIgnoreCase("socket", protocol)) { 
     LOGGER.debug("Retrieving proxy list..."); 
     List<Proxy> proxyList = new ArrayList<>(); 
     for (InnerProxy p : proxies.values()) { 

      proxyList.add(p.toProxy()); 
     } 
     LOGGER.debug(proxyList.size() + " configured proxies"); 
     // Return configured Proxy 
     return proxyList; 
    } 

    /* 
    * For others protocols (could be SOCKS or FTP etc.) return the default 
    * selector. 
    */ 
    if (defaultSelector != null) { 
     return defaultSelector.select(uri); 
    } else { 
     List<Proxy> proxyList = new ArrayList<>(); 
     proxyList.add(Proxy.NO_PROXY); 
     return proxyList; 
    } 
} 

しかし、 JAX-WS RIによって生成されたWebMethod属性:

/** 
* 
* @param base64ObjectToValidate 
* @param xmlMetadata 
* @param xmlReferencedStandard 
* @return 
*  returns java.lang.String 
* @throws SOAPException_Exception 
*/ 
@WebMethod 
@WebResult(name = "validationResult", targetNamespace = "") 
@RequestWrapper(localName = "validateObject", targetNamespace = "http://ws.validator.sch.gazelle.ihe.net/", className = "net.ihe.gazelle.schematron.ValidateObject") 
@ResponseWrapper(localName = "validateObjectResponse", targetNamespace = "http://ws.validator.sch.gazelle.ihe.net/", className = "net.ihe.gazelle.schematron.ValidateObjectResponse") 
public String validateObject(
    @WebParam(name = "base64ObjectToValidate", targetNamespace = "") 
    String base64ObjectToValidate, 
    @WebParam(name = "xmlReferencedStandard", targetNamespace = "") 
    String xmlReferencedStandard, 
    @WebParam(name = "xmlMetadata", targetNamespace = "") 
    String xmlMetadata) 
    throws SOAPException_Exception 
; 

は私が取得(私は1つだけを期待する)8問合せ選択要求:

15:55:30.228+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : https://gazelle.ehdsi.ihe-europe.net/SchematronValidator-ejb/GazelleObjectValidatorService/GazelleObjectValidator?wsdl 
15:55:30.495+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : https://gazelle.ehdsi.ihe-europe.net/SchematronValidator-ejb/GazelleObjectValidatorService/GazelleObjectValidator?wsdl 
15:55:30.637+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : https://gazelle.ehdsi.ihe-europe.net/SchematronValidator-ejb/GazelleObjectValidatorService/GazelleObjectValidator?wsdl 
15:55:30.667+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : https://gazelle.ehdsi.ihe-europe.net/SchematronValidator-ejb/GazelleObjectValidatorService/GazelleObjectValidator?wsdl 
15:55:31.130+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : socket://gazelle.ehdsi.ihe-europe.net:443 
15:55:31.134+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : socket://gazelle.ehdsi.ihe-europe.net:443 
15:55:31.137+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : socket://gazelle.ehdsi.ihe-europe.net:443 
15:55:31.140+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : socket://gazelle.ehdsi.ihe-europe.net:443 
カスタムプロキシセレクタは、実際のURLのために4回呼び出され

ソケットの場合は4回。私は、Axisは、これらの呼び出しと理由を実行する理由はわかりません

15:55:31.137+02:00 [https-jsse-nio-8443-exec-6] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : socket://gazelle.ehdsi.ihe-europe.net:443 
15:55:31.139+02:00 [https-jsse-nio-8443-exec-6] DEBUG o.a.c.httpclient.HttpMethodDirector.executeWithRetry(404) - Closing the connection. 
15:55:31.139+02:00 [https-jsse-nio-8443-exec-6] INFO o.a.c.httpclient.HttpMethodDirector.executeWithRetry(439) - I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) 
15:55:31.139+02:00 [https-jsse-nio-8443-exec-6] DEBUG o.a.c.httpclient.HttpMethodDirector.executeWithRetry(443) - Connection refused (Connection refused) 
    java.net.ConnectException: Connection refused (Connection refused) 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
     at java.net.Socket.connect(Socket.java:589) 
     at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140) 
     at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:130) 
     at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) 
     at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361) 
     at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) 
     at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 
     at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
     at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621) 
     at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193) 
     at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75) 
     at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404) 
     at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231) 
     at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443) 
     at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406) 
     at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) 
     at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) 
     at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:578) 
     at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:127) 
     at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93) 
     at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:373) 
     at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:171) 
     at com.sun.proxy.$Proxy137.validateObject(Unknown Source) 

そして、私は軸によって開始されたHTTPリクエストによって引き起こされた例外を以下しまったログ内の

は(私は、Axisのバージョン1.6.2を使用しています)私はjava.net.ConnectExceptionを持っている:接続が...彼が設定されたプロキシを使用しないように

が見える...誰も私を助けることができる

希望を(接続が拒否した)例外を拒否した...

私は私のログに次の行を見つけました:

16:35:35.676+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.httpclient.HttpConnection.open(692) - Open connection to gazelle.ehdsi.ihe-europe.net:443 
16:35:35.677+02:00 [https-jsse-nio-8443-exec-5] DEBUG e.epsos.util.net.CustomProxySelector.select(43) - select for URL : socket://gazelle.ehdsi.ihe-europe.net:443 
16:35:35.677+02:00 [https-jsse-nio-8443-exec-5] DEBUG e.epsos.util.net.CustomProxySelector.select(52) - protocol is : socket 
16:35:35.677+02:00 [https-jsse-nio-8443-exec-5] DEBUG e.epsos.util.net.CustomProxySelector.select(56) - Retrieving proxy list... 
16:35:35.677+02:00 [https-jsse-nio-8443-exec-5] DEBUG e.epsos.util.net.CustomProxySelector.select(62) - 1 configured proxies 
16:35:35.680+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.httpclient.HttpMethodDirector.executeWithRetry(404) - Closing the connection. 
16:35:35.680+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.httpclient.HttpMethodDirector.executeWithRetry(434) - Method retry handler returned false. Automatic recovery will not be attempted 
16:35:35.680+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.httpclient.HttpConnection.releaseConnection(1178) - Releasing connection back to connection manager. 
16:35:35.680+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.h.MultiThreadedHttpConnectionManager.freeConnection(979) - Freeing connection, hostConfig=HostConfiguration[host=https://gazelle.ehdsi.ihe-europe.net] 
16:35:35.680+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.h.util.IdleConnectionHandler.add(76) - Adding connection at: 1503930935680 
16:35:35.681+02:00 [https-jsse-nio-8443-exec-5] DEBUG o.a.c.h.MultiThreadedHttpConnectionManager.notifyWaitingThread(961) - Notifying no-one, there are no waiting threads 
16:35:35.681+02:00 [https-jsse-nio-8443-exec-5] INFO o.a.axis2.transport.http.HTTPSender.sendViaPost(196) - Unable to sendViaPost to url[https://gazelle.ehdsi.ihe-europe.net/SchematronValidator-ejb/GazelleObjectValidatorService/GazelleObjectValidator] 
java.net.ConnectException: Connection refused (Connection refused) 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at 
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at 
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at 
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
+1

私が遭遇する「Connection refused」の最も一般的な原因はポートの問題です。ポート上で何も聞いていないか、ファイアウォールがそれをブロックしています。 – Faron

+1

コードをデバッグモードで実行し、Axisが生のリクエスト(および応答)を出力するようにします。ここで、プロキシ情報が発信HTTPヘッダーに設定されているかどうかがわかります。これはコードの問題ではなく、接続の問題が増えています。コードを実行しているマシンから、そのエンドポイントと指定されたポートへのtracertを実行して、サービスマシン上でポート443が確実に開かれていることを確認します。 – kolossus

+1

はif文のように見えます。 'if(StringUtils。equalsIgnoreCase( "socket"、protocol)) 'は起動しません。 –

答えて

1

私はそれが動作しない理由は、このbugreportで説明されていると思います。それは11歳で、まだ解決されていないとマークされています。コメントは明らかにそれを実装する予定はありませんと言いますが、回避策があるかもしれません:

しかし、Axis1.xと2.xの両方ジャカルタ・コモンズ HTTPClientのライブラリを使用するように切り替えることができます。可能ならばこれを使用する必要があります。 はHTTPに適切に対応しているためです。 にプロキシサポートを受けることができれば、どちらの軸ビルドでもそれを受け取ることができます。

覚えている限り、Commons HTTPクライアントはProxySelectorをサポートしています。

関連する問題