Re: [Axis2] - Problem with authentication Negotiate

robertlazarski <[email protected]> Fri, 16 Feb 2024 14:57:08 -1000
Newsgroups gmane.text.xml.axis.user
Message-ID <CABpPLBWAcDJiD+GK5OE1VC88ZPerrCgbVZeMEp4Go25PSo39cw@mail.gmail.com>
--000000000000bfd50d061189573d
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

I looked more into this and I found AXIS2-4318 from 2012 which states the
reason for dropping the support of those features below.

Keep in mind that Axis2 1.6.x was the era of commons-httpclient 3.x. While
4.x is currently in our trunk, these next several days I will be upgrading
to 5.x so anything we do here needs to work with the latest Apache
httpclient release.

https://issues.apache.org/jira/browse/AXIS2-4318

3) drop authenticator preemptive authentication support

Preemptive authentication is considered unsecure and is strongly
discouraged. Moreover the code found in examples:
http://hc.apache.org/httpcomponents-client/examples.html is no longer
officially supported. Which means that we should drop preemptive
authentication support from the trunk; alternatively we can allow a number
of pluggable mechanisms to allow users to enable preemptive auth. The user
would have to provide HttpRequestInterceptor and HttpResponseInterceptor
implementations as well as a means to properties to configure a
BasicHttpContext for use with the HttpClient. As a workaround/alternative
the user could fully initialize it's own AbstractHttpClient instance and
pass it through the existing CACHED_HTTP_CLIENT option.

On Wed, Feb 7, 2024 at 5:48=E2=80=AFAM Luis Silva <[email protected]=
t.invalid>
wrote:

> Hi Robert,
>
>
>
> All help is welcome. If necessary, I=E2=80=99m available to help with tes=
ting.
>
>
>
> Best Regard=E2=80=99s,
>
> Luis Silva
>
>
>
>
>
> *From:* robertlazarski <[email protected]>
> *Sent:* Wednesday, 7 February 2024 15:29
> *To:* [email protected]
> *Subject:* Re: [Axis2] - Problem with authentication Negotiate
>
>
>
> It might take me a few days to look at this but I can probably help.
>
>
>
>
>
> I'm about to make commits that upgrade Axis2 from httpclient 4.x to 5.x
> for the next release and this feature will need to be fixed for that too.
>
>
>
> On Wed, Feb 7, 2024 at 4:32=E2=80=AFAM Luis Silva <
> [email protected]> wrote:
>
> Hi,
>
>
>
> I=E2=80=99m having a problem upgrading one application that uses axis2 ve=
rsion
> 1.6.0 to the 1.8.2 version.
>
> The situation is that I=E2=80=99m trying to connect to one IIS webservice=
 from a
> linux server, and the IIS use in the authentication Negotiate. In version
> 1.6.0 its working using a custom class to handle the request.
>
> I try to upgrade the client part to use axis2 1.8.2 but there are changes
> on axis in HttpTransportProperties class that now doesn=E2=80=99t have
> Authenticator. I=E2=80=99m trying to use the HttpTransportPropertiesImpl =
class but
> it=E2=80=99s not working.
>
> Using HttpTransportPropertiesImpl I can=E2=80=99t use the custom class th=
at
> handles the Negotiate authentication. I=E2=80=99m going to expose the sit=
uation
> using the code.
>
>
>
> This is the code using axis2 1.6.0, and using wsdl2java to create the stu=
b
>
>
>
> *ProfilesStub stub =3D new ProfilesStub(wsURL);  // Stub created by
> wsdl2java*
>
> *System.setProperty("java.security.auth.login.config",
> kbr5LoginConfigFile); *
>
> *System.setProperty("java.security.krb5.conf", kbr5ConfigFile);*
>
> *System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");*
>
>
>
> *System.setProperty("sun.security.krb5.debug", "true");*
>
> *System.setProperty("sun.security.jgss.debug", "true");*
>
> *System.setProperty("java.security.debug",
> "logincontext,policy,scl,gssloginconfig");*
>
>
>
> *AuthPolicy.unregisterAuthScheme("BASIC");*
>
> *AuthPolicy.unregisterAuthScheme("DIGEST");*
>
> *AuthPolicy.unregisterAuthScheme("NTLM");*
>
>
>
> *ArrayList authSchemes =3D new ArrayList();*
>
> *if ( AuthSchemeId.equals("Negotiate") )  // **=C3=9F** I=E2=80=99m using
> AuthSchemeId=3DNegotiate*
>
> *{*
>
> *      AuthPolicy.registerAuthScheme("Negotiate",
> NegotiateSchemeCustom.class);   //**=C3=9F** the custom class that handle=
s the
> Negotiate authentication*
>
> *       authSchemes.add("Negotiate");*
>
> *}*
>
> *else*
>
> *{*
>
> * if ( AuthSchemeId.equals("Kerberos") )*
>
> *  {*
>
> *        AuthPolicy.registerAuthScheme("Kerberos",
> KerberosSchemeCustom.class);*
>
> *        authSchemes.add("Kerberos");            }*
>
> *        else*
>
> *           throw new Exception("Invalid authentication scheme '" +
> (AuthSchemeId =3D=3D null ? "(null)" : AuthSchemeId) + "'");*
>
> * }*
>
>
>
> *       HttpTransportProperties.Authenticator auth =3D new
> HttpTransportProperties.Authenticator();*
>
> *        auth.setDomain(userDomain);*
>
> *        auth.setHost((new URL(wsURL)).getHost());*
>
> *        java.util.Properties properties =3D new java.util.Properties();*
>
> *        // absolute from the classpath*
>
> *        String configFileName =3D "wsURL.config";*
>
> *        try*
>
> *        {*
>
> *            properties.load(new java.io.FileInputStream(configFileName))=
;*
>
> *        }*
>
> *        catch ( Exception exception )*
>
> *        {*
>
> *            System.out.println("ERROR oppening file " + configFileName +
> "--");*
>
> *            System.out.println("EX:" + exception.getMessage() +"--");*
>
> *        }*
>
> *        String username =3D properties.getProperty("username");*
>
> *        String password =3D properties.getProperty("password");*
>
>
>
> *        auth.setUsername(username);*
>
> *        auth.setPassword(password);*
>
>
>
> *        auth.setAuthSchemes(authSchemes);*
>
>
>
> *        HttpParams params =3D DefaultHttpParams.getDefaultParams();*
>
> *        params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY,
> authSchemes);*
>
>
>
> *        Options options =3D stub._getServiceClient().getOptions();*
>
> *
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENT=
ICATE,
> auth);*
>
> *
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED=
,
> Boolean.FALSE);*
>
> *
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.REUSE_H=
TTP_CLIENT,
> "true");*
>
>
>
> *        stub._getServiceClient().setOptions(options);*
>
>
>
> *       GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); //
> GetUserInfo class created by wsdl2java*
>
> *        userInfo.setSUserName(userName);*
>
> *        userInfo.setSDomain(domain);*
>
> *        userInfo.setSApplication(application);*
>
>
>
> *        GetUserInfoDocument getUserInfoDocument =3D
> GetUserInfoDocument.Factory.newInstance();// GetUserInfoDocument class
> created by wsdl2java*
>
>
>
> *       getUserInfoDocument.setGetUserInfo(userInfo); *
>
>
>
> *        GetUserInfoResponseDocument response =3D
> stub.getUserInfo(getUserInfoDocument); // getUserInfo method to invoke,
> GetUserInfoResponseDocument class created by wsdl2java*
>
> *        String userData =3D
> response.getGetUserInfoResponse().getGetUserInfoResult().toString();*
>
>
>
> And using trace on the NegotiateSchemeCustom.class I confirm that this
> class is used
>
> In the class
>
> *public NegotiateSchemeCustom () {*
>
> *        super();*
>
> *        state =3D UNINITIATED;*
>
> *        System.out.println("Created NegotiateSchemeCustom()");*
>
> *    }*
>
>
>
> The output
>
> Jan 31, 2024 5:09:09 PM
> org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthSchem=
e
>
> INFO: negotiate authentication scheme selected
>
> Created NegotiateSchemeCustom()
>
>
>
> And the invocation is successful.
>
>
>
> But when I try using 1.8.2 version
>
>
>
> *ProfilesStub stub =3D new ProfilesStub(wsURL);  // Stub created by
> wsdl2java version 1.8.2*
>
> *System.setProperty("java.security.auth.login.config",
> kbr5LoginConfigFile); *
>
> *System.setProperty("java.security.krb5.conf", kbr5ConfigFile);*
>
> *System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");*
>
>
>
> *System.setProperty("sun.security.krb5.debug", "true");*
>
> *System.setProperty("sun.security.jgss.debug", "true");*
>
> *System.setProperty("java.security.debug",
> "logincontext,policy,scl,gssloginconfig");*
>
>
>
> *AuthPolicy.unregisterAuthScheme("BASIC");*
>
> *AuthPolicy.unregisterAuthScheme("DIGEST");*
>
> *AuthPolicy.unregisterAuthScheme("NTLM");*
>
>
>
> *ArrayList authSchemes =3D new ArrayList();*
>
> *if ( AuthSchemeId.equals("Negotiate") )  // **=C3=9F** I=E2=80=99m using
> AuthSchemeId=3DNegotiate*
>
> *{*
>
> *      AuthPolicy.registerAuthScheme("Negotiate",
> NegotiateSchemeCustom.class);   //**=C3=9F** the custom class that handle=
s the
> Negotiate authentication, same as the 1.6.0*
>
> *       authSchemes.add("Negotiate");*
>
> *}*
>
> *else*
>
> *{*
>
> * if ( AuthSchemeId.equals("Kerberos") )*
>
> *  {*
>
> *        AuthPolicy.registerAuthScheme("Kerberos",
> KerberosSchemeCustom.class);*
>
> *        authSchemes.add("Kerberos");            }*
>
> *        else*
>
> *           throw new Exception("Invalid authentication scheme '" +
> (AuthSchemeId =3D=3D null ? "(null)" : AuthSchemeId) + "'");*
>
> * }*
>
>
>
> *       HttpTransportPropertiesImpl.Authenticator auth =3D new
> HttpTransportPropertiesImpl.Authenticator(); // **=C3=9F** Using
> HttpTransportPropertiesImpl that has Authenticator*
>
> *        auth.setDomain(userDomain);*
>
> *        auth.setHost((new URL(wsURL)).getHost());*
>
> *        java.util.Properties properties =3D new java.util.Properties();*
>
> *        // absolute from the classpath*
>
> *        String configFileName =3D "wsURL.config";*
>
> *        try*
>
> *        {*
>
> *            properties.load(new java.io.FileInputStream(configFileName))=
;*
>
> *        }*
>
> *        catch ( Exception exception )*
>
> *        {*
>
> *            System.out.println("ERROR oppening file " + configFileName +
> "--");*
>
> *            System.out.println("EX:" + exception.getMessage() +"--");*
>
> *        }*
>
> *        String username =3D properties.getProperty("username");*
>
> *        String password =3D properties.getProperty("password");*
>
>
>
> *        auth.setUsername(username);*
>
> *        auth.setPassword(password);*
>
>
>
> *        auth.setAuthSchemes(authSchemes);*
>
>
>
> *        HttpParams params =3D DefaultHttpParams.getDefaultParams();*
>
> *        params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY,
> authSchemes);*
>
>
>
> *        Options options =3D stub._getServiceClient().getOptions();*
>
> *
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENT=
ICATE,
> auth);*
>
> *
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED=
,
> Boolean.FALSE);*
>
> *
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.REUSE_H=
TTP_CLIENT,
> "true");*
>
>
>
> *        stub._getServiceClient().setOptions(options);*
>
>
>
> *       GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); //
> GetUserInfo class created by wsdl2java*
>
> *        userInfo.setSUserName(userName);*
>
> *        userInfo.setSDomain(domain);*
>
> *        userInfo.setSApplication(application);*
>
>
>
> *        GetUserInfoDocument getUserInfoDocument =3D
> GetUserInfoDocument.Factory.newInstance();// GetUserInfoDocument class
> created by wsdl2java*
>
>
>
> *       getUserInfoDocument.setGetUserInfo(userInfo); *
>
>
>
> *        GetUserInfoResponseDocument response =3D
> stub.getUserInfo(getUserInfoDocument); // getUserInfo method to invoke,
> GetUserInfoResponseDocument class created by wsdl2java*
>
> *        String userData =3D
> response.getGetUserInfoResponse().getGetUserInfoResult().toString();*
>
>
>
> My problems started, first is with HttpTransportPropertiesImpl, it does
> not recognizes Negotiate schema.
>
> I checked the code and when the method getAuthPolicyPref of the
> Authenticator class of the HttpTransportPropertiesImpl is called with
> Negotiate its returns null.
>
> Where is part of the code of
> axis2-1.8.2\modules\transport\http\src\org\apache\axis2\transport\http\im=
pl\httpclient4\HttpTransportPropertiesImpl.java
>
> *@Override*
>
> *        public Object getAuthPolicyPref(String scheme) {*
>
> *            if (BASIC.equals(scheme)) {*
>
> *                return AuthPolicy.BASIC;*
>
> *            } else if (NTLM.equals(scheme)) {*
>
> *                return AuthPolicy.NTLM;*
>
> *            } else if (DIGEST.equals(scheme)) {*
>
> *                return AuthPolicy.DIGEST;*
>
> *            }*
>
> *            return null;*
>
> *        }*
>
> There is no Negotiate so it returns null and in the
> AuthenticationStrategyImpl select method it causes one exception bellow,
> because id is null
>
> *for (final String id: authPrefs) {*
>
> *            final Header challenge =3D
> challenges.get(id.toLowerCase(Locale.ROOT));*
>
>
>
> My solution to this was to create a custom
> HttpTransportPropertiesImplCustom that includes Negotiate and Kerberos
>
> This is my custom class.
>
> *public class HttpTransportPropertiesImplCustom extends
> HttpTransportProperties {*
>
>
>
> *    protected HttpVersion httpVersion;*
>
>
>
> *    @Override*
>
> *    public void setHttpVersion(Object httpVerion) {*
>
> *        this.httpVersion =3D (HttpVersion) httpVerion;*
>
> *    }*
>
>
>
> *    @Override*
>
> *    public Object getHttpVersion() {*
>
> *        return this.httpVersion;*
>
> *    }*
>
>
>
> *    public static class Authenticator extends HTTPAuthenticator {*
>
>
>
> *        private int port =3D -1;*
>
> *        private String realm =3D null;*
>
>
>
> *        public static final String NTLM =3D "NTLM";*
>
> *        public static final String DIGEST =3D "Digest";*
>
> *        public static final String BASIC =3D "Basic";*
>
> *        public static final String SPNEGO =3D "Negotiate";*
>
> *        public static final String KERBEROS =3D "Kerberos";*
>
>
>
> *        public int getPort() {*
>
> *            return port;*
>
> *        }*
>
>
>
> *        public void setPort(int port) {*
>
> *            this.port =3D port;*
>
> *        }*
>
>
>
> *        public String getRealm() {*
>
> *            return realm;*
>
> *        }*
>
>
>
> *        public void setRealm(String realm) {*
>
> *            this.realm =3D realm;*
>
> *        }*
>
>
>
> *        @Override*
>
> *        public Object getAuthPolicyPref(String scheme) {*
>
> *            if (BASIC.equals(scheme)) {*
>
> *                return "Basic";*
>
> *            } else if (NTLM.equals(scheme)) {*
>
> *                return "NTLM";*
>
> *            } else if (DIGEST.equals(scheme)) {*
>
> *                return "Digest";*
>
> *            }*
>
> *            else if (SPNEGO.equals(scheme)) {*
>
> *                return "Negotiate";*
>
> *            }*
>
> *            else if (KERBEROS.equals(scheme)) {*
>
> *                return "Kerberos";*
>
> *            }*
>
> *            return null;*
>
> *        }*
>
> *    }*
>
>
>
> *}*
>
>
>
> With this now I have a valid schema for Negotiate but still can=E2=80=99t=
 invoke
> my custom class. Debugging I see that the class used when the schema is
> Negotiate is SPNegoScheme of the package org.apache.http.impl.auth. It
> ignores my NegotiateSchemeCustom.class
>
> I also tried to create a custom SPNegoScheme with the code of
> NegotiateSchemeCustom.class but have other problems.
>
> But instead of trying to use this solution why my custom class
>  NegotiateSchemeCustom.class isn=E2=80=99t used as the schema for Negotia=
te?
>
> I=E2=80=99m I missing some new configuration?
>
>
>
> Any help/suggestion is appreciated .
>
>
>
> Best Regards,
>
> Luis Silva
>
>
>
>

--000000000000bfd50d061189573d
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>I looked more into this and I found AXIS2-4318 from 2=
012 which states the reason for dropping the support of those features belo=
w. <br></div><div><br></div><div>Keep in mind that Axis2 1.6.x was the era =
of commons-httpclient 3.x. While 4.x is currently in our trunk, these next =
several days I will be upgrading to 5.x so anything we do here needs to wor=
k with the latest Apache httpclient release. <br></div><div><br></div><div>=
<a href=3D"https://issues.apache.org/jira/browse/AXIS2-4318">https://issues=
.apache.org/jira/browse/AXIS2-4318</a></div><div><p>3) drop authenticator p=
reemptive authentication support</p>

<p>Preemptive authentication is considered unsecure and is strongly discour=
aged. Moreover the code found in examples: <a href=3D"http://hc.apache.org/=
httpcomponents-client/examples.html" class=3D"external-link" target=3D"_bla=
nk" rel=3D"nofollow noopener" title=3D"Follow link">http://hc.apache.org/ht=
tpcomponents-client/examples.html</a>
 is no longer officially supported. Which means that we should drop=20
preemptive authentication support from the trunk; alternatively we can=20
allow a number of pluggable mechanisms to allow users to enable=20
preemptive auth. The user would have to provide HttpRequestInterceptor=20
and HttpResponseInterceptor implementations as well as a means to=20
properties to configure a BasicHttpContext for use with the HttpClient.=20
As a workaround/alternative the user could fully initialize it&#39;s own=20
AbstractHttpClient instance and pass it through the existing=20
CACHED_HTTP_CLIENT option.</p></div></div><br><div class=3D"gmail_quote"><d=
iv dir=3D"ltr" class=3D"gmail_attr">On Wed, Feb 7, 2024 at 5:48=E2=80=AFAM =
Luis  Silva &lt;[email protected]&gt; wrote:<br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"msg5346911566523=
641790">





<div lang=3D"PT" style=3D"overflow-wrap: break-word;">
<div class=3D"m_5346911566523641790WordSection1">
<p class=3D"MsoNormal">Hi Robert,<u></u><u></u></p>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">All help is welcome. If necessa=
ry, I=E2=80=99m available to help with testing.<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Best Regard=E2=80=99s,<u></u><u=
></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Luis Silva<u></u><u></u></span>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
<div style=3D"border-width:1pt medium medium;border-style:solid none none;b=
order-color:rgb(225,225,225) currentcolor currentcolor;padding:3pt 0cm 0cm"=
>
<p class=3D"MsoNormal"><b><span lang=3D"EN-US">From:</span></b><span lang=
=3D"EN-US"> robertlazarski &lt;<a href=3D"mailto:[email protected]" =
target=3D"_blank">[email protected]</a>&gt;
<br>
<b>Sent:</b> Wednesday, 7 February 2024 15:29<br>
<b>To:</b> <a href=3D"mailto:[email protected]" target=3D"_blank">j=
[email protected]</a><br>
<b>Subject:</b> Re: [Axis2] - Problem with authentication Negotiate<u></u><=
u></u></span></p>
</div>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
<div>
<div>
<p class=3D"MsoNormal">It might take me a few days to look at this but I ca=
n probably help.
<u></u><u></u></p>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
</div>
<div>
<p class=3D"MsoNormal">I&#39;m about to make commits that upgrade Axis2 fro=
m httpclient 4.x to 5.x for the next release and this feature will need to =
be fixed for that too.
<u></u><u></u></p>
</div>
</div>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
<div>
<div>
<p class=3D"MsoNormal">On Wed, Feb 7, 2024 at 4:32=E2=80=AFAM Luis Silva &l=
t;<a href=3D"mailto:[email protected]" target=3D"_blank">lu=
[email protected]</a>&gt; wrote:<u></u><u></u></p>
</div>
<blockquote style=3D"border-width:medium medium medium 1pt;border-style:non=
e none none solid;border-color:currentcolor currentcolor currentcolor rgb(2=
04,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class=3D"MsoNormal"><a name=3D"m_5346911566523641790_m_60900716757512360=
50__Hlk139287544">Hi,</a><u></u><u></u></p>
<p class=3D"MsoNormal">=C2=A0<u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I=E2=80=99m having a problem up=
grading one application that uses axis2 version 1.6.0 to the 1.8.2 version.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">The situation is that I=E2=80=
=99m trying to connect to one IIS webservice from a linux server, and the I=
IS use in the authentication Negotiate. In version 1.6.0 its working
 using a custom class to handle the request.</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I try to upgrade the client par=
t to use axis2 1.8.2 but there are changes on axis in HttpTransportProperti=
es class that now doesn=E2=80=99t have Authenticator. I=E2=80=99m trying
 to use the HttpTransportPropertiesImpl class but it=E2=80=99s not working.=
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Using HttpTransportPropertiesIm=
pl I can=E2=80=99t use the custom class that handles the Negotiate authenti=
cation. I=E2=80=99m going to expose the situation using the code.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This is the code using axis2 1.=
6.0, and using wsdl2java to create the stub
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0=C2=A0</span><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ProfilesStub stub =3D new Pr=
ofilesStub(wsURL);=C2=A0 // Stub created by wsdl2java</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.auth.login.config&quot;, kbr5LoginConfigFile);
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.krb5.conf&quot;, kbr5ConfigFile);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
ax.security.auth.useSubjectCredsOnly&quot;, &quot;false&quot;);</span></i><=
u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.krb5.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.jgss.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.debug&quot;, &quot;logincontext,policy,scl,gssloginconfig&quot;)=
;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;BASIC&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;DIGEST&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;NTLM&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ArrayList authSchemes =3D ne=
w ArrayList();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">if ( AuthSchemeId.equals(&qu=
ot;Negotiate&quot;) )=C2=A0 //
</span></i><i><span lang=3D"EN-US" style=3D"font-family:Wingdings">=C3=9F</=
span></i><i><span lang=3D"EN-US"> I=E2=80=99m using AuthSchemeId=3DNegotiat=
e</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 AuthPolicy.registerAuthScheme(&quot;Negotiate&quot;, NegotiateSchemeCus=
tom.class);=C2=A0=C2=A0 //</span></i><i><span lang=3D"EN-US" style=3D"font-=
family:Wingdings">=C3=9F</span></i><i><span lang=3D"EN-US">
 the custom class that handles the Negotiate authentication</span></i><u></=
u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 authSchemes.add(&quot;Negotiate&quot;);</span></i><u></u><u></u><=
/p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">}</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">else</span></i><u></u><u></u=
></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0if ( AuthSchemeId.equa=
ls(&quot;Kerberos&quot;) )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0 {</span></i><u></u><u=
></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0AuthPolicy.registerAuthScheme(&quot;Kerberos&quot;, Ke=
rberosSchemeCustom.class);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0authSchemes.add(&quot;Kerberos&quot;);=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0else</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0throw new Exception(&quot;Invalid au=
thentication scheme &#39;&quot; + (AuthSchemeId =3D=3D null ?
</span>&quot;(null)&quot; : AuthSchemeId) + &quot;&#39;&quot;);</i><u></u><=
u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0}</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 HttpTransportProperties.Authenticator auth =3D new HttpTransportP=
roperties.Authenticator();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setDomain(userDomain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setHost((new URL(wsURL)).getHost());</span></i><u></u>=
<u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 java.util.Properties properties =3D new java.util.Propertie=
s();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 // absolute from the classpath</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String configFileName =3D &quot;wsURL.config&quot;;</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 try</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 properties.load(new java.io.FileInp=
utStream(configFileName));</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 catch ( Exception exception )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;ERROR oppe=
ning file &quot; + configFileName + &quot;--&quot;);</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;EX:&quot; =
+ exception.getMessage() +&quot;--&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String username =3D properties.getProperty(&quot;username&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String password =3D properties.getProperty(&quot;password&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setUsername(username);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setPassword(password);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0auth.setAuthSchemes(authSchemes);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 HttpParams params =3D DefaultHttpParams.getDefaultParams();=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authSc=
hemes);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 Options options =3D stub._getServiceClient().getOptions();<=
/span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.AUTHENTICATE, auth);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.CHUNKED, Boolean.FALSE);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.REUSE_HTTP_CLIENT, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 stub._getServiceClient().setOptions(options);</span></i><u>=
</u><u></u></p>
<p class=3D"MsoNormal"><i>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
</i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); =
// GetUserInfo class created by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSUserName(userName);</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSDomain(domain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSApplication(application);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0GetUserInfoDocument getUserInfoDocument =3D GetUserInf=
oDocument.Factory.newInstance();// GetUserInfoDocument class created by wsd=
l2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0</span>getUserInfoDocument.setGetUserInfo(userInfo);
</i><u></u><u></u></p>
<p class=3D"MsoNormal"><i>=C2=A0</i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 GetUserInfoResponseDocument response =3D stub.getUserInfo(g=
etUserInfoDocument); // getUserInfo method to invoke, GetUserInfoResponseDo=
cument class created
 by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String userData =3D response.getGetUserInfoResponse().getGe=
tUserInfoResult().toString();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">And using trace on the Negotiat=
eSchemeCustom.class I confirm that this class is used</span><u></u><u></u><=
/p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">In the class
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">public NegotiateSchemeCustom=
 () {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 super();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 state =3D UNINITIATED;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 System.out.println(&quot;Created NegotiateSchemeCustom()&qu=
ot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">The output</span><u></u><u></u>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Jan 31, 2024 5:09:09 PM org.apa=
che.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme</span><=
u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">INFO: negotiate authentication =
scheme selected</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Created NegotiateSchemeCustom()=
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">And the invocation is successfu=
l.</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But when I try using 1.8.2 vers=
ion</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ProfilesStub stub =3D new Pr=
ofilesStub(wsURL);=C2=A0 // Stub created by wsdl2java version 1.8.2</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.auth.login.config&quot;, kbr5LoginConfigFile);
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.krb5.conf&quot;, kbr5ConfigFile);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
ax.security.auth.useSubjectCredsOnly&quot;, &quot;false&quot;);</span></i><=
u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.krb5.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.jgss.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.debug&quot;, &quot;logincontext,policy,scl,gssloginconfig&quot;)=
;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;BASIC&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;DIGEST&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;NTLM&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ArrayList authSchemes =3D ne=
w ArrayList();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">if ( AuthSchemeId.equals(&qu=
ot;Negotiate&quot;) )=C2=A0 //
</span></i><i><span lang=3D"EN-US" style=3D"font-family:Wingdings">=C3=9F</=
span></i><i><span lang=3D"EN-US"> I=E2=80=99m using AuthSchemeId=3DNegotiat=
e</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 AuthPolicy.registerAuthScheme(&quot;Negotiate&quot;, NegotiateSchemeCus=
tom.class);=C2=A0=C2=A0 //</span></i><i><span lang=3D"EN-US" style=3D"font-=
family:Wingdings">=C3=9F</span></i><i><span lang=3D"EN-US">
 the custom class that handles the Negotiate authentication, same as the 1.=
6.0</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 authSchemes.add(&quot;Negotiate&quot;);</span></i><u></u><u></u><=
/p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">}</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">else</span></i><u></u><u></u=
></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0if ( AuthSchemeId.equa=
ls(&quot;Kerberos&quot;) )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0 {</span></i><u></u><u=
></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0AuthPolicy.registerAuthScheme(&quot;Kerberos&quot;, Ke=
rberosSchemeCustom.class);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0authSchemes.add(&quot;Kerberos&quot;);=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0else</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0throw new Exception(&quot;Invalid au=
thentication scheme &#39;&quot; + (AuthSchemeId =3D=3D null ? &quot;(null)&=
quot; : AuthSchemeId) + &quot;&#39;&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0}</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 HttpTransportPropertiesImpl.Authenticator auth =3D new HttpTransp=
ortPropertiesImpl.Authenticator(); //
</span></i><i><span lang=3D"EN-US" style=3D"font-family:Wingdings">=C3=9F</=
span></i><i><span lang=3D"EN-US"> Using HttpTransportPropertiesImpl that ha=
s Authenticator</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setDomain(userDomain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setHost((new URL(wsURL)).getHost());</span></i><u></u>=
<u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 java.util.Properties properties =3D new java.util.Propertie=
s();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 // absolute from the classpath</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String configFileName =3D &quot;wsURL.config&quot;;</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 try</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 properties.load(new java.io.FileInp=
utStream(configFileName));</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 catch ( Exception exception )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;ERROR oppe=
ning file &quot; + configFileName + &quot;--&quot;);</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;EX:&quot; =
+ exception.getMessage() +&quot;--&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String username =3D properties.getProperty(&quot;username&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String password =3D properties.getProperty(&quot;password&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setUsername(username);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setPassword(password);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0auth.setAuthSchemes(authSchemes);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 HttpParams params =3D DefaultHttpParams.getDefaultParams();=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authSc=
hemes);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 Options options =3D stub._getServiceClient().getOptions();<=
/span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.AUTHENTICATE, auth);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.CHUNKED, Boolean.FALSE);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.REUSE_HTTP_CLIENT, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 stub._getServiceClient().setOptions(options);</span></i><u>=
</u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); =
// GetUserInfo class created by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSUserName(userName);</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSDomain(domain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSApplication(application);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0GetUserInfoDocument getUserInfoDocument =3D GetUserInf=
oDocument.Factory.newInstance();// GetUserInfoDocument class created by wsd=
l2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0getUserInfoDocument.setGetUserInfo(userInfo);
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 GetUserInfoResponseDocument response =3D stub.getUserInfo(g=
etUserInfoDocument); // getUserInfo method to invoke, GetUserInfoResponseDo=
cument class created
 by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String userData =3D response.getGetUserInfoResponse().getGe=
tUserInfoResult().toString();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">My problems started, first is w=
ith HttpTransportPropertiesImpl, it does not recognizes Negotiate schema.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I checked the code and when the=
 method getAuthPolicyPref of the Authenticator class of the HttpTransportPr=
opertiesImpl is called with Negotiate its returns null.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Where is part of the code of ax=
is2-1.8.2\modules\transport\http\src\org\apache\axis2\transport\http\impl\h=
ttpclient4\HttpTransportPropertiesImpl.java</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">@Override</span></i><u></u><=
u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public Object getAuthPolicyPref(String scheme) {</span></i>=
<u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BASIC.equals(scheme)) {</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return Auth=
Policy.BASIC;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (NTLM.equals(scheme)) {</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return Auth=
Policy.NTLM;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (DIGEST.equals(scheme)) {=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return Auth=
Policy.DIGEST;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return null;</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">There is no Negotiate so it ret=
urns null and in the AuthenticationStrategyImpl select method it causes one=
 exception bellow, because id is null</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">for (final String id: authPr=
efs) {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 final Header challenge =3D challeng=
es.get(id.toLowerCase(Locale.ROOT));</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">My solution to this was to crea=
te a custom HttpTransportPropertiesImplCustom that includes Negotiate and K=
erberos</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This is my custom class.</span>=
<u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">public class HttpTransportPr=
opertiesImplCustom extends HttpTransportProperties {</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 protected=
 HttpVersion httpVersion;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 @Override=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 public vo=
id setHttpVersion(Object httpVerion) {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 this.httpVersion =3D (HttpVersion) httpVerion;</span></i><u=
></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 @Override=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 public Ob=
ject getHttpVersion() {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 return this.httpVersion;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 public st=
atic class Authenticator extends HTTPAuthenticator {</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 private int port =3D -1;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 private String realm =3D null;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0public static final String NTLM =3D &quot;NTLM&quot;;<=
/span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String DIGEST =3D &quot;Digest&quot;;</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String BASIC =3D &quot;Basic&quot;;</sp=
an></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String SPNEGO =3D &quot;Negotiate&quot;=
;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String KERBEROS =3D &quot;Kerberos&quot=
;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public int getPort() {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return port;</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public void setPort(int port) {</span></i><u></u><u></u></p=
>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 this.port =3D port;</span></i><u></=
u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public String getRealm() {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return realm;</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public void setRealm(String realm) {</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 this.realm =3D realm;</span></i><u>=
</u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 @Override</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public Object getAuthPolicyPref(String scheme) {</span></i>=
<u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BASIC.equals(scheme)) {</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Basic&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (NTLM.equals(scheme)) {</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;NTLM&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (DIGEST.equals(scheme)) {=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Digest&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else if (SPNEGO.equals(scheme)) {</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Negotiate&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else if (KERBEROS.equals(scheme)) {=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Kerberos&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return null;</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">}</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">With this now I have a valid sc=
hema for Negotiate but still can=E2=80=99t invoke my custom class. Debuggin=
g I see that the class used when the schema is Negotiate is
 SPNegoScheme of the package org.apache.http.impl.auth. It ignores my Negot=
iateSchemeCustom.class</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I also tried to create a custom=
 SPNegoScheme with the code of NegotiateSchemeCustom.class but have other p=
roblems.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But instead of trying to use th=
is solution why my custom class =C2=A0NegotiateSchemeCustom.class isn=E2=80=
=99t used as the schema for Negotiate?</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I=E2=80=99m I missing some new =
configuration?
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Any help/suggestion is apprecia=
ted .</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Best Regards,</span><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Luis Silva</span><u></u><u></u>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>

</div></blockquote></div>

--000000000000bfd50d061189573d--