package com.redhat.qe.xmlrpc; import java.io.IOException; import java.net.URL; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.List; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthPolicy; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.contrib.auth.NegotiateScheme; import org.apache.commons.httpclient.params.DefaultHttpParams; import org.apache.commons.httpclient.params.HttpParams; import org.apache.ws.commons.util.NamespaceContextImpl; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory; import org.apache.xmlrpc.common.TypeFactoryImpl; import org.apache.xmlrpc.common.XmlRpcController; import org.apache.xmlrpc.common.XmlRpcStreamConfig; import org.apache.xmlrpc.parser.NullParser; import org.apache.xmlrpc.parser.TypeParser; import org.apache.xmlrpc.serializer.NullSerializer; import com.redhat.qe.tools.SSLCertificateTruster; public class Session { protected String userName; protected String password; protected URL url; protected XmlRpcClient client; public Session(String userName, String password, URL url) { this.userName = userName; this.password = password; this.url = url; } public void init() throws XmlRpcException, GeneralSecurityException, IOException { SSLCertificateTruster.trustAllCertsForApacheXMLRPC(); // setup client XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(url); client = new XmlRpcClient(); client.setConfig(config); XmlRpcCommonsTransportFactory factory = new XmlRpcCommonsTransportFactory(client); client.setTransportFactory(factory); factory.setHttpClient(new HttpClient()); client.setTypeFactory(new MyTypeFactory(client)); List<String> schemes = new ArrayList<String>(); String jaas_user = "not_needed_for_kerb"; String jaas_pw = "not_needed_for_kerb"; if (userName != null && password != null) { factory.getHttpClient().getState().setCredentials( new AuthScope(url.getHost(), 443, AuthScope.ANY_REALM), new UsernamePasswordCredentials(userName, password)); schemes.add(AuthPolicy.BASIC); jaas_user = userName; jaas_pw = password; } // register the auth scheme AuthPolicy.registerAuthScheme("Negotiate", NegotiateScheme.class); // include the scheme in the AuthPolicy.AUTH_SCHEME_PRIORITY preference schemes.add("Negotiate"); HttpParams params = DefaultHttpParams.getDefaultParams(); params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, schemes); Credentials use_jaas_creds = new UsernamePasswordCredentials(jaas_user, jaas_pw); factory.getHttpClient().getState().setCredentials( new AuthScope(null, -1, AuthScope.ANY_REALM), use_jaas_creds); } public XmlRpcClient getClient() { return client; } public class MyTypeFactory extends TypeFactoryImpl { public MyTypeFactory(XmlRpcController pController) { super(pController); } @Override public TypeParser getParser(XmlRpcStreamConfig pConfig, NamespaceContextImpl pContext, String pURI, String pLocalName) { if ("".equals(pURI) && NullSerializer.NIL_TAG.equals(pLocalName)) { return new NullParser(); } else { return super.getParser(pConfig, pContext, pURI, pLocalName); } } } }