<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2" -->
<rss version="2.0">
    <channel>
        <title>Lowyat.NET: Latest topics by jay_goh</title>
        <description></description>
        <link>http://forum.lowyat.net/</link>
        <lastBuildDate>Fri, 19 Jun 2026 22:18:27 +0800</lastBuildDate>
        <generator>FeedCreator 1.7.2</generator>
        <item>
            <title>Webservice connection reset error</title>
            <link>http://forum.lowyat.net/topic/3309848</link>
            <description>Dear All,&lt;br /&gt; The scenario is I need to write a webservice client to send request to a third party server and the third party server will returns the result back to my server.&lt;br /&gt; However, I got the connection reset error while trying to perform connection to the third party server.&lt;br /&gt; I am using Java 1.5 IBM and our web server is running on Oracle iPlanet Web Server 7.0.13.&lt;br /&gt; The code to send the request from my side&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;		{&lt;br /&gt;			int intStatus;&lt;br /&gt;			String szResMsg;&lt;br /&gt;			String szResContent;&lt;br /&gt;			&lt;br /&gt;			HttpsURLConnectionFactory factory = new HttpsURLConnectionFactory(&amp;quot;https://someURI&amp;quot;, &amp;quot;someURI.com.my&amp;quot;, &amp;quot;path to trustStore&amp;quot;, &amp;quot;trustStore password&amp;quot;);			&lt;br /&gt;	        &lt;br /&gt;			StringBuffer sbPost = new StringBuffer();&lt;br /&gt;			sbPost.append(jsonObject.toString());&lt;br /&gt;			&lt;br /&gt;	        factory.setRequestContent(sbPost.toString().getBytes());&lt;br /&gt;	        factory.setRequestMethod(&amp;quot;POST&amp;quot;);	        &lt;br /&gt;	        factory.setRequestProperty(&amp;quot;content-type&amp;quot;, &amp;quot;text/json&amp;quot;);&lt;br /&gt;	        &lt;br /&gt;	        intStatus = factory.connect();&lt;br /&gt;	                &lt;br /&gt;	        szResMsg = factory.getResponseMessage();&lt;br /&gt;	        szResContent = factory.getResponseContent();	        &lt;br /&gt;	        &lt;br /&gt;	        logger.info(&amp;quot;reading status: [&amp;quot; + intStatus + &amp;quot;]&amp;quot;);&lt;br /&gt;	        logger.info(&amp;quot;reading reply msg: [&amp;quot; + szResMsg + &amp;quot;]&amp;quot;);&lt;br /&gt;	        logger.info(&amp;quot;reading reply content: [&amp;quot; + szResContent + &amp;quot;]&amp;quot;);&lt;br /&gt;		}&lt;br /&gt;		catch(Exception e)&lt;br /&gt;		{&lt;br /&gt;			logger.error(&amp;quot;WSJsonParserServlet.sendJSONToWSServer: &amp;quot; + e.getMessage());&lt;br /&gt;			e.printStackTrace();&lt;br /&gt;			return false;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class HttpsURLConnectionFactory&lt;br /&gt;{&lt;br /&gt;    private static final String DEFAULT_KEYSTORE_TYPE   = &amp;quot;JKS&amp;quot;;&lt;br /&gt;    private static final String DEFAULT_ALGORITHM       = &amp;quot;SunX509&amp;quot;;&lt;br /&gt;    private static final String DEFAULT_SSL_PROTOCOL    = &amp;quot;TLS&amp;quot;;&lt;br /&gt;    private static final String DEFAULT_SSL_PROVIDER    = &amp;quot;SunJSSE&amp;quot;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    private String strURL                               = null;&lt;br /&gt;    private HttpsURLConnection httpsURLConnection       = null;&lt;br /&gt;    private String strTrustedHost                       = null;&lt;br /&gt;&lt;br /&gt;    private String strKeyStore                          = null;&lt;br /&gt;    private String strKeyStorePassword                  = null;&lt;br /&gt;    private String strKeyPassword                       = null;&lt;br /&gt;&lt;br /&gt;    private boolean bMutualAuth                         = false;&lt;br /&gt;    private boolean bProxyExists                        = false;&lt;br /&gt;    private String strProxyAuthCredential               = null;&lt;br /&gt;&lt;br /&gt;    private String strRequestMethod                     = &amp;quot;GET&amp;quot;;&lt;br /&gt;    private Hashtable hRequestProperties                = null;&lt;br /&gt;&lt;br /&gt;    private int intResponseCode                         = 0;&lt;br /&gt;    private String strResponseContent                   = null;&lt;br /&gt;    private String strResponseMessage                   = null;&lt;br /&gt;&lt;br /&gt;    private Hashtable hResponseHeaders                  = new Hashtable();&lt;br /&gt;    private byte[] bContent                             = null;&lt;br /&gt;    &lt;br /&gt;    private String strRequestPropertyKey                = null;&lt;br /&gt;    private String strRequestPropertyValue              = null;&lt;br /&gt;&lt;br /&gt;    private PBBLogger logger = PBBLogger.getInstance();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public HttpsURLConnectionFactory(String strURL)&lt;br /&gt;    {&lt;br /&gt;        this.strURL = strURL;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public HttpsURLConnectionFactory(String strURL, String strTrustStore, String strTrustStorePassword)&lt;br /&gt;            throws Exception&lt;br /&gt;    {&lt;br /&gt;        this.strURL = strURL;&lt;br /&gt;        setSystemProperties();&lt;br /&gt;        setTrustStore(strTrustStore, strTrustStorePassword);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public HttpsURLConnectionFactory(String strURL, String strTrustedHost, String strTrustStore,&lt;br /&gt;            String strTrustStorePassword) throws Exception&lt;br /&gt;    {&lt;br /&gt;        this.strURL = strURL;&lt;br /&gt;        this.strTrustedHost = strTrustedHost;&lt;br /&gt;        setSystemProperties();&lt;br /&gt;        setTrustStore(strTrustStore, strTrustStorePassword);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public HttpsURLConnectionFactory(String strURL, String strTrustStore, String strTrustStorePassword,&lt;br /&gt;            String strKeyStore, String strKeyStorePassword, String strKeyPassword) throws Exception&lt;br /&gt;    {&lt;br /&gt;        this.strURL = strURL;&lt;br /&gt;        this.strKeyStore = strKeyStore;&lt;br /&gt;        this.strKeyStorePassword = strKeyStorePassword;&lt;br /&gt;        this.strKeyPassword = strKeyPassword;&lt;br /&gt;        this.bMutualAuth = true;&lt;br /&gt;        setSystemProperties();&lt;br /&gt;        setTrustStore(strTrustStore, strTrustStorePassword);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public HttpsURLConnectionFactory(String strURL, String strTrustedHost, String strTrustStore,&lt;br /&gt;            String strTrustStorePassword, String strKeyStore, String strKeyStorePassword, String strKeyPassword)&lt;br /&gt;            throws Exception&lt;br /&gt;    {&lt;br /&gt;        this.strURL = strURL;&lt;br /&gt;        this.strTrustedHost = strTrustedHost;&lt;br /&gt;        this.strKeyStore = strKeyStore;&lt;br /&gt;        this.strKeyStorePassword = strKeyStorePassword;&lt;br /&gt;        this.strKeyPassword = strKeyPassword;&lt;br /&gt;        this.bMutualAuth = true;&lt;br /&gt;        setSystemProperties();&lt;br /&gt;        setTrustStore(strTrustStore, strTrustStorePassword);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Set the system property for proxy.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     *&lt;br /&gt;     * @Param String&lt;br /&gt;     *            strProxyHost : Proxy host to tunnel through&lt;br /&gt;     * @Param String&lt;br /&gt;     *            strProxyPort : Proxy port to tunnel through&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    public void setProxy(String strProxyHost, int intProxyPort)&lt;br /&gt;    {&lt;br /&gt;        System.setProperty(&amp;quot;https.proxyHost&amp;quot;, strProxyHost);&lt;br /&gt;        System.setProperty(&amp;quot;https.proxyPort&amp;quot;, String.valueOf(intProxyPort));&lt;br /&gt;        bProxyExists = true;&lt;br /&gt;&lt;br /&gt;        logger.info(&amp;quot;HttpsURLConnectionFactory.setProxy:Proxy Host is : [&amp;quot; + strProxyHost + &amp;quot;]&amp;quot;);&lt;br /&gt;        logger.info(&amp;quot;HttpsURLConnectionFactory.setProxy:Proxy Port is : [&amp;quot; + intProxyPort + &amp;quot;]&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Constructing the proxy authentication credential to be used while&lt;br /&gt;     * tunneling through proxy.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     *&lt;br /&gt;     * @Param String&lt;br /&gt;     *            strUsername : User name to login to proxy&lt;br /&gt;     * @Param String&lt;br /&gt;     *            strPassword : Password to login to proxy&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    public void addProxyCredential(String strUsername, String strPassword)&lt;br /&gt;    {&lt;br /&gt;        String strUsernamePassword = strUsername + &amp;quot;:&amp;quot; + strPassword;&lt;br /&gt;        strProxyAuthCredential = &amp;quot;Proxy-Authorization: Basic &amp;quot;&lt;br /&gt;                + new sun.misc.BASE64Encoder().encode(strUsernamePassword.getBytes());&lt;br /&gt;&lt;br /&gt;        logger.info(&amp;quot;HttpsURLConnectionFactory.addProxyCredential:Proxy Username is :[&amp;quot; + strUsername + &amp;quot;]&amp;quot;);&lt;br /&gt;        logger.info(&amp;quot;HttpsURLConnectionFactory.addProxyCredential:Proxy Password is :[&amp;quot; + strPassword + &amp;quot;]&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setConnectionTimeout(int intConnectionTimeout)&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setRequestMethod(String strRequestMethod)&lt;br /&gt;    {&lt;br /&gt;        this.strRequestMethod = strRequestMethod;&lt;br /&gt;        logger.info(&amp;quot;HttpsURLConnectionFactory.setRequestMethod:Request Method is :[&amp;quot; + strRequestMethod + &amp;quot;]&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setRequestProperties(Hashtable hRequestProperties)&lt;br /&gt;    {&lt;br /&gt;        this.hRequestProperties = hRequestProperties;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setRequestContent(byte[] bContent)&lt;br /&gt;    {&lt;br /&gt;        this.bContent = bContent;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setRequestProperty(String strRequestPropertyKey, String strRequestPropertyValue)&lt;br /&gt;    {&lt;br /&gt;    	this.strRequestPropertyKey = strRequestPropertyKey;&lt;br /&gt;    	this.strRequestPropertyValue = strRequestPropertyValue;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Establish url connection to remote server. This method also set the host&lt;br /&gt;     * name verifier depends on the passed in trusted host value. If the trusted&lt;br /&gt;     * host value is provided, this method will verify the trusted host name&lt;br /&gt;     * against the host name in certificate, else the host name in URL address&lt;br /&gt;     * will be verified against the host name in certificate.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * This method will tunnel through the proxy if it is available before&lt;br /&gt;     * making the real URL connection.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * This method will perform mutual authentication if the required values are&lt;br /&gt;     * provided.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     *&lt;br /&gt;     * @param String&lt;br /&gt;     *            strUrl : URL address to request.&lt;br /&gt;     * @return HttpURLConnection : Created URL connection object.&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    public HttpsURLConnection openConnection() throws Exception&lt;br /&gt;    {&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            logger.info(&amp;quot;HttpsURLConnectionFactory.openConnection:Opening connection...&amp;quot;);&lt;br /&gt;            URL url = null;&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                url = new URL(getURL());&lt;br /&gt;            }&lt;br /&gt;            catch (MalformedURLException e)&lt;br /&gt;            {&lt;br /&gt;                logger.error(&amp;quot;HttpsURLConnectionFactory.openConnection:Exception - &amp;quot; + e.getMessage());&lt;br /&gt;                throw new Exception(&amp;quot;HttpsURLConnectionFactory.openConnection:Invalid url address&amp;quot;, e);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();&lt;br /&gt;&lt;br /&gt;            // Host name vs CN in certificate verification.If trusted host is&lt;br /&gt;            // defined, HostNameVerifier will compare&lt;br /&gt;            // trusted host against certificate host name, else host in url will&lt;br /&gt;            // be compared against certificate host name.&lt;br /&gt;            httpsURLConnection.setHostnameVerifier(new TrustedHostVerifier(strTrustedHost));&lt;br /&gt;&lt;br /&gt;            // tunnel through proxy&lt;br /&gt;            if (bProxyExists)&lt;br /&gt;            {&lt;br /&gt;                if (strProxyAuthCredential == null)&lt;br /&gt;                {&lt;br /&gt;                    httpsURLConnection.setSSLSocketFactory(new SSLTunnelSocketFactory(System&lt;br /&gt;                            .getProperty(&amp;quot;https.proxyHost&amp;quot;), System.getProperty(&amp;quot;https.proxyPort&amp;quot;)));&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    httpsURLConnection.setSSLSocketFactory(new SSLTunnelSocketFactory(System&lt;br /&gt;                            .getProperty(&amp;quot;https.proxyHost&amp;quot;), System.getProperty(&amp;quot;https.proxyPort&amp;quot;),&lt;br /&gt;                            strProxyAuthCredential));&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // set mutual authentication if remote peer require client&lt;br /&gt;            // authentication&lt;br /&gt;            if (bMutualAuth)&lt;br /&gt;            {&lt;br /&gt;                setMutualAuthentication(httpsURLConnection, strKeyStore, strKeyStorePassword, strKeyPassword);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // setting request method&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                httpsURLConnection.setRequestMethod(strRequestMethod);&lt;br /&gt;            }&lt;br /&gt;            catch (ProtocolException e)&lt;br /&gt;            {&lt;br /&gt;                throw new Exception(&amp;quot;HttpsURLConnectionFactory.openConnection:Set request method fail.&amp;quot;, e);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // setting request property&lt;br /&gt;            if (hRequestProperties &amp;#33;= null)&lt;br /&gt;            {&lt;br /&gt;                for (Enumeration e = hRequestProperties.keys(); e.hasMoreElements()&lt;!--emo&amp;;)--&gt;&lt;img src='http://static.lowyat.net/style_emoticons/default/wink.gif' border='0' style='vertical-align:middle' alt='wink.gif' /&gt;&lt;!--endemo--&gt;&lt;br /&gt;                {&lt;br /&gt;                    String strRequestProperty = (String) e.nextElement();&lt;br /&gt;                    httpsURLConnection.setRequestProperty(strRequestProperty, (String) hRequestProperties&lt;br /&gt;                            .get(strRequestProperty));&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            // set single request property&lt;br /&gt;            if(strRequestPropertyKey &amp;#33;= null)&lt;br /&gt;            {&lt;br /&gt;            	httpsURLConnection.setRequestProperty(strRequestPropertyKey, strRequestPropertyValue);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            httpsURLConnection.setDoInput(true);&lt;br /&gt;            httpsURLConnection.setDoOutput(true);&lt;br /&gt;            httpsURLConnection.setUseCaches(false);&lt;br /&gt;            if (bContent &amp;#33;= null)&lt;br /&gt;            {&lt;br /&gt;                OutputStream out = httpsURLConnection.getOutputStream();&lt;br /&gt;                out.write(bContent);&lt;br /&gt;                out.flush();&lt;br /&gt;                out.close();&lt;br /&gt;            }            &lt;br /&gt;            setConnectionObject(httpsURLConnection);&lt;br /&gt;        }&lt;br /&gt;        catch (IOException e)&lt;br /&gt;        {&lt;br /&gt;            logger.error(&amp;quot;HttpsURLConnectionFactory.openConnection:Exception - &amp;quot; + e.getMessage());&lt;br /&gt;            throw new Exception(&amp;quot;HttpsURLConnectionFactory.openConnection fail.&amp;quot;, e);&lt;br /&gt;        }&lt;br /&gt;        return httpsURLConnection;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Get reply message from remote peer.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     *&lt;br /&gt;     * @return String : Reply message from remote peer&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    public int connect() throws Exception&lt;br /&gt;    {&lt;br /&gt;        HttpsURLConnection httpsURLConnection = getConnectionObject();&lt;br /&gt;        if (httpsURLConnection == null)&lt;br /&gt;        {&lt;br /&gt;            httpsURLConnection = openConnection();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Connecting to url&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            logger.info(&amp;quot;HttpsURLConnectionFactory.connect:Connecting...&amp;quot;);&lt;br /&gt;            httpsURLConnection.connect();&lt;br /&gt;        }&lt;br /&gt;        catch (IOException e)&lt;br /&gt;        {&lt;br /&gt;            logger.error(&amp;quot;HttpsURLConnectionFactory.connect:Exception - &amp;quot; + e.getMessage());&lt;br /&gt;            throw new Exception(&amp;quot;HttpsURLConnectionFactory:fail.&amp;quot;, e);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Reading reply from remote server&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            logger.info(&amp;quot;HttpsURLConnectionFactory.connect:Reading reply...&amp;quot;);&lt;br /&gt;            intResponseCode = httpsURLConnection.getResponseCode();&lt;br /&gt;            setResponseMessage(httpsURLConnection.getResponseMessage());&lt;br /&gt;&lt;br /&gt;            int i=1;&lt;br /&gt;            while (httpsURLConnection.getHeaderField(i) &amp;#33;= null)&lt;br /&gt;            {&lt;br /&gt;                hResponseHeaders.put(httpsURLConnection.getHeaderFieldKey(i).toUpperCase(), httpsURLConnection.getHeaderField(i));&lt;br /&gt;                i++;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            BufferedReader reader = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));&lt;br /&gt;            String strResponseContent = new String();&lt;br /&gt;            for (String strTemp = null; (strTemp = reader.readLine()) &amp;#33;= null;)&lt;br /&gt;            {&lt;br /&gt;                strResponseContent += strTemp + &amp;quot;&amp;#092;n&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;            if (&amp;#33;strResponseContent.equals(&amp;quot;&amp;quot;))&lt;br /&gt;            {&lt;br /&gt;                strResponseContent = strResponseContent.substring(0, strResponseContent.lastIndexOf(&amp;quot;&amp;#092;n&amp;quot;));&lt;br /&gt;            }&lt;br /&gt;            setResponseContent(strResponseContent);&lt;br /&gt;            reader.close();&lt;br /&gt;        }&lt;br /&gt;        catch (IOException e)&lt;br /&gt;        {&lt;br /&gt;            logger.error(&amp;quot;HttpsURLConnectionFactory.connect:Exception - &amp;quot; + e.getMessage());&lt;br /&gt;            throw new Exception(&amp;quot;HttpsURLConnectionFactory.connect:Fail to get reply from remote peer&amp;quot;, e);&lt;br /&gt;        }&lt;br /&gt;        logger.info(&amp;quot;HttpsURLConnectionFactory.connect:Disconnecting...&amp;quot;);&lt;br /&gt;        httpsURLConnection.disconnect();&lt;br /&gt;        return intResponseCode;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setConnectionObject(HttpsURLConnection httpsURLConnection)&lt;br /&gt;    {&lt;br /&gt;        this.httpsURLConnection = httpsURLConnection;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public HttpsURLConnection getConnectionObject()&lt;br /&gt;    {&lt;br /&gt;        return this.httpsURLConnection;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getResponseMessage()&lt;br /&gt;    {&lt;br /&gt;        return this.strResponseMessage;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getResponseContent()&lt;br /&gt;    {&lt;br /&gt;        return this.strResponseContent;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getResponseHeader(String strHeader)&lt;br /&gt;    {&lt;br /&gt;        if (hResponseHeaders.containsKey(strHeader))&lt;br /&gt;        {&lt;br /&gt;            return (String)hResponseHeaders.get(strHeader);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private String getURL()&lt;br /&gt;    {&lt;br /&gt;        return this.strURL;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void setResponseMessage(String strResponseMessage)&lt;br /&gt;    {&lt;br /&gt;        this.strResponseMessage = strResponseMessage;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void setResponseContent(String strResponseContent)&lt;br /&gt;    {&lt;br /&gt;        this.strResponseContent = strResponseContent;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Set the related system properties values.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    private void setSystemProperties()&lt;br /&gt;    {&lt;br /&gt;        System.setProperty(&amp;quot;javax.net.debug&amp;quot;, &amp;quot;all&amp;quot;);&lt;br /&gt;        //System.setProperty(&amp;quot;https.protocols&amp;quot;, &amp;quot;TLSv1&amp;quot;);&lt;br /&gt;&lt;br /&gt;        // provider&lt;br /&gt;        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());&lt;br /&gt;        System.setProperty(&amp;quot;java.protocol.handler.pkgs&amp;quot;,&amp;quot;javax.net.ssl&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Set truststore properties into system properties.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     *&lt;br /&gt;     * @param String&lt;br /&gt;     *            strtTrustStore : Truststore path&lt;br /&gt;     * @param String&lt;br /&gt;     *            strTrustStorePassword : Truststore password&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    private void setTrustStore(String strTrustStore, String strTrustStorePassword) throws Exception&lt;br /&gt;    {&lt;br /&gt;        if (strTrustStore == null)&lt;br /&gt;        {&lt;br /&gt;            throw new Exception(&amp;quot;Setting truststore fail due to null truststore path&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;        else if (strTrustStorePassword == null)&lt;br /&gt;        {&lt;br /&gt;            throw new Exception(&amp;quot;Setting truststore fail due to null truststore password&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // set the truststore containing client trusted certificates into system properties.&lt;br /&gt;        System.setProperty(&amp;quot;javax.net.ssl.trustStore&amp;quot;, strTrustStore);&lt;br /&gt;        System.setProperty(&amp;quot;javax.net.ssl.trustStorePassword&amp;quot;, strTrustStorePassword);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * &amp;lt;p&amp;gt;&lt;br /&gt;     * Set mutual authentication if the remote server required client&lt;br /&gt;     * authentication.&lt;br /&gt;     * &amp;lt;/p&amp;gt;&lt;br /&gt;     *&lt;br /&gt;     * @param String&lt;br /&gt;     *            strKeyStore : keystore path&lt;br /&gt;     * @param String&lt;br /&gt;     *            strKeyStorePassword : keystore password&lt;br /&gt;     * @param String&lt;br /&gt;     *            strKeyPassword : key password&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    private void setMutualAuthentication(HttpsURLConnection httpsURLConnection, String strKeyStore,&lt;br /&gt;            String strKeyStorePassword, String strKeyPassword) throws Exception&lt;br /&gt;    {&lt;br /&gt;        SSLContext sslContext = null;&lt;br /&gt;        if (strKeyStore == null)&lt;br /&gt;        {&lt;br /&gt;            throw new Exception(&amp;quot;Setting mutual authentication fail due to null keystore path&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;        else if (strKeyStorePassword == null)&lt;br /&gt;        {&lt;br /&gt;            throw new Exception(&amp;quot;Setting mutual authentication fail due to null keystore password&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;        else if (strKeyPassword == null)&lt;br /&gt;        {&lt;br /&gt;            throw new Exception(&amp;quot;Setting mutual authentication fail due to null key password&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            sslContext = SSLContext.getInstance(DEFAULT_SSL_PROTOCOL, DEFAULT_SSL_PROVIDER);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        catch (Exception e)&lt;br /&gt;        {&lt;br /&gt;            logger.error(&amp;quot;HttpsURLConnectionFactory.setMutualAuthentication:Exception - &amp;quot; + e.getMessage());&lt;br /&gt;            throw new Exception(&amp;quot;HttpsURLConnectionFactory.setMutualAuthentication fail.&amp;quot;, e);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            // Load keystore containing server certificate.&lt;br /&gt;            KeyStore keyStore = KeyStore.getInstance(DEFAULT_KEYSTORE_TYPE);&lt;br /&gt;            char[] chKeyStorePassword = strKeyStorePassword.toCharArray();&lt;br /&gt;            keyStore.load(new FileInputStream(strKeyStore), chKeyStorePassword);&lt;br /&gt;&lt;br /&gt;            // Create specific Key Manager for mutual authentication.&lt;br /&gt;            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(DEFAULT_ALGORITHM);&lt;br /&gt;            char[] chKeyPassword = strKeyPassword.toCharArray();&lt;br /&gt;            keyManagerFactory.init(keyStore, chKeyPassword);&lt;br /&gt;&lt;br /&gt;            // Initialize the SSLContext with the created KeyManager.&lt;br /&gt;            sslContext.init(keyManagerFactory.getKeyManagers(), null, null);&lt;br /&gt;            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();&lt;br /&gt;&lt;br /&gt;            // Set the sslSocketFactory into httpsURLConnection.&lt;br /&gt;            httpsURLConnection.setSSLSocketFactory(sslSocketFactory);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        catch (Exception e)&lt;br /&gt;        {&lt;br /&gt;            logger.error(&amp;quot;HttpsURLConnectionFactory.setMutualAuthentication:Exception - &amp;quot; + e.getMessage());&lt;br /&gt;            throw new Exception(&amp;quot;HttpsURLConnectionFactory.setMutualAuthentication fail.&amp;quot;, e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and the error returned&lt;br /&gt; java.lang.Exception: HttpsURLConnectionFactory.openConnection fail.&lt;br /&gt;       at com.pbb.mobile.common.net.HttpsURLConnectionFactory.openConnection(HttpsURLConnectionFactory.java:300)&lt;br /&gt;       at com.pbb.mobile.common.net.HttpsURLConnectionFactory.connect(HttpsURLConnectionFactory.java:317)&lt;br /&gt;        at WSJsonParserServlet.sendJSONToWSServer(WSJsonParserServlet.java:268)&lt;br /&gt;        at WSJsonParserServlet.service(WSJsonParserServlet.java:164)&lt;br /&gt;        at javax.servlet.http.HttpServlet.service(HttpServlet.java:915)&lt;br /&gt;        at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:459)&lt;br /&gt;        at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:180)&lt;br /&gt;        at javax.servlet.http.HttpServlet.service(HttpServlet.java:814)&lt;br /&gt;        at javax.servlet.http.HttpServlet.service(HttpServlet.java:915)&lt;br /&gt;        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:398)&lt;br /&gt;        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)&lt;br /&gt;        at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:255)&lt;br /&gt;        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)&lt;br /&gt;        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:586)&lt;br /&gt;        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:556)&lt;br /&gt;        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187)&lt;br /&gt;        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:586)&lt;br /&gt;        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:556)&lt;br /&gt;        at com.sun.webserver.connector.nsapi.NSAPIProcessor.service(NSAPIProcessor.java:160)&lt;br /&gt; Caused by: java.net.SocketException: Connection reset&lt;br /&gt;        at java.net.SocketInputStream.read(SocketInputStream.java:168)&lt;br /&gt;        at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)&lt;br /&gt;        at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)&lt;br /&gt;        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)&lt;br /&gt;        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)&lt;br /&gt;        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)&lt;br /&gt;        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)&lt;br /&gt;        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)&lt;br /&gt;        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)&lt;br /&gt;        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014)&lt;br /&gt;        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)&lt;br /&gt;        at com.pbb.mobile.common.net.HttpsURLConnectionFactory.openConnection(HttpsURLConnectionFactory.java:290)&lt;br /&gt;        ... 18 more&lt;br /&gt;&lt;br /&gt; Does anyone has any idea what possibly that could cause this error?&lt;br /&gt; Appreciate very much for the help.&lt;br /&gt; Thank you&amp;#33;</description>
            <author>jay_goh</author>
            <category>Internet Related</category>
            <pubDate>Mon, 04 Aug 2014 18:53:16 +0800</pubDate>
        </item>
    </channel>
</rss>
