java动态调用webservice
cxf方式
public static Object[] invokeRemoteMethod(String url, String method, Object[] parameters) { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); if (!url.endsWith("wsdl")) { url += "?wsdl"; } org.apache.cxf.endpoint.Client client = dcf.createClient(url); try { Object[] objects = client.invoke(method, parameters); return objects; } catch (Exception e) { e.printStackTrace(); } return null; }
maven引用
<dependency> <groupId>org.apache.cxfgroupId> <artifactId>cxf-rt-frontend-jaxwsartifactId> <version>3.1.5version> dependency> <dependency> <groupId>org.apache.cxfgroupId> <artifactId>cxf-coreartifactId> <version>3.1.5version> dependency> <dependency> <groupId>org.apache.cxfgroupId> <artifactId>cxf-rt-transports-httpartifactId> <version>3.1.5version> dependency>
缺点是效率低,调用速度慢
Xfire方式调用
public static String getData(String wsUrl, String invoke, Object[] objParams) throws MalformedURLException, Exception { URL url = new URL(wsUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.connect(); Client client = new Client(connection.getInputStream(), (Class)null); client.setProperty("disable-keep-alive", "true"); client.setProperty("disable.expect-continue", "true"); client.setUrl(wsUrl); Object[] result = client.invoke(invoke, objParams); String resultStr = result[0].toString(); return "".equals(resultStr)?"":resultStr; }
maven引用
<dependency> <groupId>org.codehaus.xfiregroupId> <artifactId>xfire-allartifactId> <version>${xfire.version}version> <exclusions> <exclusion> <groupId>org.springframeworkgroupId> <artifactId>springartifactId> exclusion> exclusions> dependency>
缺点是jar包太旧了,很容易与其他包冲突