Hi Jerry,
Thanks for the clarification on axis and axis2. It makes sense now.
We are using tomcat and jax-rpc. We need jax-rpc because a jax-ws does not seem to work with an external service we are consuming.
I have found a work around, using axis 1 and the deprecated commons http client version 3.1:
public void test() throws ServiceException, RemoteException{ Customers_ServiceLocator cl = new Customers_ServiceLocator(getEngineConfiguration()); Customers_Port cp = cl.getCustomers_Port(); ((Stub) cp).setUsername("domain\\username"); ((Stub) cp).setPassword(password); Customers_Filter cf = new Customers_Filter(); cf.setField(Customers_Fields.Name); cf.setCriteria("AS*"); // all customers starting with AS Customers_Filter[] filters = {cf}; Customers[] custs = cp.readMultiple(filters, "", 100); for (Customers c : custs){ System.out.println(c.getName()); }}public static org.apache.axis.EngineConfiguration getEngineConfiguration() { java.lang.StringBuffer sb = new java.lang.StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); sb.append("<deployment name=\"defaultClientConfig\"\r\n"); sb.append("xmlns=\"http://xml.apache.org/axis/wsdd/\"\r\n"); sb.append("xmlns:java=\"http://xml.apache.org/axis/wsdd/providers/java\">\r\n"); sb.append("<globalConfiguration>\r\n"); sb.append("<parameter name=\"disablePrettyXML\" value=\"true\"/>\r\n"); sb.append("<parameter name=\"enableNamespacePrefixOptimization\" value=\"true\"/>\r\n"); sb.append("</globalConfiguration>\r\n"); sb.append("<transport name=\"http\" pivot=\"java:org.apache.axis.transport.http.CommonsHTTPSender\"/>\r\n"); sb.append("<transport name=\"local\" pivot=\"java:org.apache.axis.transport.local.LocalSender\"/>\r\n"); sb.append("<transport name=\"java\" pivot=\"java:org.apache.axis.transport.java.JavaSender\"/>\r\n"); sb.append("</deployment>\r\n"); return new org.apache.axis.configuration.XMLStringProvider(sb.toString());}
Hopefully we will be able to use jax-ws in the future, and migrate to axis2. We can then ommit the deprecated commons http client and use proper authentication to the ntlm web service:
public static void main(String[] args) throws RemoteException { Customers_ServiceStub cs = new Customers_ServiceStub(); setOptions(cs._getServiceClient().getOptions()); ReadMultiple rm = new ReadMultiple(); Customers_Filter filter = new Customers_Filter(); Customers_Fields cf = Customers_Fields.No; filter.setField(cf); filter.setCriteria("AS*"); Customers_Filter[] arr = {filter}; rm.setFilter(arr); ReadMultiple_Result result = cs.readMultiple(rm); Customers_List listResults = result.getReadMultiple_Result(); Customers[] customers = listResults.getCustomers(); for(Customers cust : customers){ System.out.println(cust.getName()); } } private static void setOptions(Options options){ Authenticator auth = new Authenticator(); auth.setUsername(username); auth.setPassword(password); auth.setDomain(domain); auth.setHost(host); List<String> authSchemes = new ArrayList<String>(); authSchemes.add(Authenticator.NTLM); auth.setAuthSchemes(authSchemes); options.setProperty(HTTPConstants.AUTHENTICATE, auth); options.setProperty(HTTPConstants.CHUNKED, "false"); }
I hope this can help someone in the future.
Kind regards,
Bram
Bram_Callewaert