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.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.1.5</version> </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.xfire</groupId> <artifactId>xfire-all</artifactId> <version>${xfire.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency>
缺点是jar包太旧了,很容易与其他包冲突
如果我的文章对你有帮助,就点一下推荐吧.(*^__^*)