Hello Mike,

I have considered deprecation as well. But the problem is that folks will
get deprecation warnings although their code is perfectly ok. They don't
have to change a bit, as soon as the deprecated constructor is removed,
the very same code will compile without a warning. Consider this:

SecureProtocolSocketFactory spsf = ...;
... = new Protocol("myscheme", spsf, 666);

When the constructor is deprecated, you will get a warning. To get
rid of that warning, you have to use the other constructor explicitly:

... = new Protocol("myscheme", (ProtocolSocketFactory)spsf, 666);

Once the deprecated constructor is removed, nobody is
going to understand why the argument was ever casted...

Breaking binary compatibility isn't nice, but I don't think people
should have to screw up their code like this to get rid of
deprecation warnings.

regards,
  Roland






Michael Becke <[EMAIL PROTECTED]>
10.11.2003 14:26
Please respond to "Commons HttpClient Project"
 
        To:     Commons HttpClient Project 
<[EMAIL PROTECTED]>
        cc: 
        Subject:        Re: cvs commit: 
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/protocol 
Protocol.java


I think the addition of an instanceof test is good, but I think we 
should deprecate here instead of removing the constructor.  This 
removal causes a binary compatibility problem that I think we can 
easily avoid.

Mike
>

> On Nov 7, 2003, at 2:34 AM, [EMAIL PROTECTED] wrote:
>
>> oglueck     2003/11/06 23:34:34
>>
>>   Modified:    httpclient API_CHANGES_2_1.txt
>> 
>> httpclient/src/java/org/apache/commons/httpclient/protocol
>>                         Protocol.java
>>   Log:
>>   fixed design error: uniform Protocol constructor for all factories
>>
>>   Revision  Changes    Path
>>   1.4       +2 -0      jakarta-commons/httpclient/API_CHANGES_2_1.txt
>>
>>   Index: API_CHANGES_2_1.txt
>>   ===================================================================
>>   RCS file: /home/cvs/jakarta-commons/httpclient/API_CHANGES_2_1.txt,v
>>   retrieving revision 1.3
>>   retrieving revision 1.4
>>   diff -u -r1.3 -r1.4
>>   --- API_CHANGES_2_1.txt             18 Sep 2003 13:56:21 -0000  1.3
>>   +++ API_CHANGES_2_1.txt             7 Nov 2003 07:34:34 -0000  1.4
>>   @@ -31,3 +31,5 @@
>>        state of DigestScheme:
>>        - createDigest(String, String)
>>        - createDigestHeader(String, String)
>>   +
>>   +* There is only one Protocol constructor for both secure and 
>> insecure socket factories.
>>
>>
>>
>>   1.6       +6 -32 
>> jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ 
>> protocol/Protocol.java
>>
>>   Index: Protocol.java
>>   ===================================================================
>>   RCS file: 
>> /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/ 
>> httpclient/protocol/Protocol.java,v
>>   retrieving revision 1.5
>>   retrieving revision 1.6
>>   diff -u -r1.5 -r1.6
>>   --- Protocol.java           31 Jan 2003 00:33:36 -0000 1.5
>>   +++ Protocol.java           7 Nov 2003 07:34:34 -0000 1.6
>>   @@ -194,7 +194,8 @@
>>        private boolean secure;
>>
>>        /**
>>   -     * Constructs a new Protocol.  The created protcol is insecure.
>>   +     * Constructs a new Protocol. If the created protocol is 
>> secure depends on
>>   +     * the class of <code>factory</code>.
>>         *
>>         * @param scheme the scheme (e.g. http, https)
>>         * @param factory the factory for creating sockets for 
>> communication using
>>   @@ -216,36 +217,9 @@
>>            this.scheme = scheme;
>>            this.socketFactory = factory;
>>            this.defaultPort = defaultPort;
>>   -        this.secure = false;
>>   +        this.secure = (factory instanceof 
>> SecureProtocolSocketFactory);
>>        }
>>
>>   -    /**
>>   -     * Constructs a new Protocol.  The created protcol is secure.
>>   -     *
>>   -     * @param scheme the scheme (e.g. http, https)
>>   -     * @param factory the factory for creating sockets for 
>> communication using
>>   -     * this protocol
>>   -     * @param defaultPort the port this protocol defaults to
>>   -     */
>>   -    public Protocol(String scheme,
>>   -        SecureProtocolSocketFactory factory, int defaultPort) {
>>   -
>>   -        if (scheme == null) {
>>   -            throw new IllegalArgumentException("scheme is null");
>>   -        }
>>   -        if (factory == null) {
>>   -            throw new IllegalArgumentException("socketFactory is 
>> null");
>>   -        }
>>   -        if (defaultPort <= 0) {
>>   -            throw new IllegalArgumentException("port is invalid: " 
>> + defaultPort);
>>   -        }
>>   -
>>   -        this.scheme = scheme;
>>   -        this.socketFactory = factory;
>>   -        this.defaultPort = defaultPort;
>>   -        this.secure = true;
>>   -    }
>>   -
>>        /**
>>         * Returns the defaultPort.
>>         * @return int
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: 
[EMAIL PROTECTED]
For additional commands, e-mail: 
[EMAIL PROTECTED]


Reply via email to