使用Axis或XFire實現WebService:
參考路徑:
https://blog.csdn.net/rockstar541/article/details/21106407
axis2:
參考路徑:
https://ldzyz007.iteye.com/blog/1065927
https://blog.csdn.net/qq_22067469/article/details/83652562
http://blog.sina.com.cn/s/blog_b18fc8d60102wwhm.html
private static Object[] requestFunctionWebService(String url,String parameters,String namespance,String methodName) { try { RPCServiceClient rpcServiceClient = new RPCServiceClient(); EndpointReference endpointReference = new EndpointReference(url);//url后綴不加"?wsdl" Options options = rpcServiceClient.getOptions(); options.setTimeOutInMilliSeconds(30000); options.setProperty(HTTPConstants.SO_TIMEOUT, 30000); options.setTo(endpointReference); rpcServiceClient.setOptions(options); QName qName = new QName(namespance, methodName); Class[] classStr = new Class[] {String.class}; Object[] params = new Object[] {parameters}; Object[] objects = rpcServiceClient.invokeBlocking(qName,params,classStr); return objects; } catch (Exception e) { logger.error("requestFunctionWebService請求接口異常:"+ e.toString()); return null; } }
CXF:
參考路徑:
https://zhoshijie.iteye.com/blog/2189091
添加依賴:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.16</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.16</version> </dependency>
public static Object[] getService(String url,String parameters, String namespace,String methodName) { try { String newUrl =url+"?wsdl"; JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient(newUrl); QName name=new QName(namespace, methodName); Object[] params = new Object[] {parameters}; return client.invoke(name,params); } catch (Exception e) { logger.error(e); return null; } }
XFire:
參考路徑:
https://blog.csdn.net/zl834205311/article/details/51612207
https://blog.csdn.net/u010402228/article/details/50155767
http://www.cnblogs.com/toyz/p/6340269.html
① 通過WSDL地址來創建動態客戶端
② 通過服務端提供的接口來創建客戶端
③ 使用Ant通過WSDL文件來生成客戶端
第一種方式:通過WSDL地址來創建動態客戶端
package com.jadyer.client; import java.net.MalformedURLException; import java.net.URL; import org.codehaus.xfire.client.Client; /** * 通過WSDL來創建動態客戶端 * @see 此時需要在項目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries */ public class ClientFromWSDL { public static void main(String[] args) throws MalformedURLException, Exception { Client client = new Client(new URL("http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl")); Object[] results11 = client.invoke("sayHello", new Object[]{"Jadyer22"}); System.out.println(results11[0]); } }
第二種方式:通過服務端提供的端口來創建客戶端
package com.jadyer.client; import java.net.MalformedURLException; import java.util.List; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.jadyer.model.Person; import com.jadyer.model.User; import com.jadyer.server.HelloService; /** * 通過Web服務端提供的接口來創建客戶端 * @see 客戶端必須提供一個與服務端完全一致的接口,包名也要一致 * @see 在本例中,需要在客戶端(即該項目)中提供HelloService.java接口,以及Person和User兩個POJO類 * @see 並且此時需要在項目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries */ public class ClientFromInterface { public static void main(String[] args)throws MalformedURLException{ //首先使用XFire的ObjectServiceFactory從HelloService接口創建一個服務模型serviceModel //serviceModel包含服務的說明,換句話說,就是服務的元數據 //Create a metadata of the service Service serviceModel = new ObjectServiceFactory().create(HelloService.class); //訪問的地址 String serviceURL = "http://127.0.0.1:8080/XFire_demo/services/XFireServer"; //通過查看org.codehaus.xfire.client.XFireProxyFactory源碼發現 //下面兩行代碼與這里直接new XFireProxyFactory()的作用是等效的 //XFire xfire = XFireFactory.newInstance().getXFire(); //XFireProxyFactory factory = new XFireProxyFactory(xfire); //為XFire獲得一個代理工廠對象 //Create a proxy for the deployed service XFireProxyFactory factory = new XFireProxyFactory(); //通過proxyFactory,使用服務模型serviceModel和服務端點URL(用來獲得WSDL) //得到一個服務的本地代理,這個代理就是實際的客戶端 HelloService client = (HelloService)factory.create(serviceModel, serviceURL); /** * Invoke the service * @see 調用服務的本地代理(即實際的客戶端)中的方法,便得到我們需要的WebServcie */ /*--處理簡單對象--*/ String serviceResponse = client.sayHello("Jadyer11"); System.out.println(serviceResponse); /*--處理對象--*/ User u = new User(); u.setName("Jadyer99"); Person pp = client.getPerson(u); System.out.println(pp.getName()); /*--處理List--*/ List<Person> personList = client.getPersonList(24, "Jadyer88"); for(Person p : personList){ System.out.println(p.getName()); } } }
這是它要用到的接口和兩個POJO類
/** * Web服務提供給客戶端的接口 * @see 這是第二種方式創建的客戶端,要用到的接口 */ package com.jadyer.server; import java.util.List; import com.jadyer.model.Person; import com.jadyer.model.User; public interface HelloService { public String sayHello(String name); public Person getPerson(User u); public List<Person> getPersonList(Integer age, String name); } /** * 第二種方式創建的客戶端,要用到的兩個POJO類 */ package com.jadyer.model; public class User { private String name; /*--getter和setter略--*/ } package com.jadyer.model; public class Person { private Integer age; private String name; /*--getter和setter略--*/ }
Axis:
Java WebService接口生成和調用:
參考路徑:
https://blog.csdn.net/qazwsxpcm/article/details/70370490
調用:
引用jar包:axis.jar 、jaxrpc.jar
一、使用eclipse自動生成的wsdl接口
1、
2、
3、
調用接口
private static String requestFunctionWebService(String http,String message) { //http="http://203.48.27.97:85/dagl/service/TDHYxService?wsdl" String retMessage = ""; try { YxBrowseWSProxy yx = new YxBrowseWSProxy(http); retMessage = yx.yxBrowse(message);//方法名yxBrowse } catch (Exception e) { logger.error("requestFunctionWebService請求接口異常:"+ e.getMessage()); e.printStackTrace(); } return retMessage; }
二、直接AXIS調用遠程的web service
import java.util.Date; import java.text.DateFormat; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import javax.xml.namespace.QName; import java.lang.Integer; import javax.xml.rpc.ParameterMode; public class caClient { public static void main(String[] args) { try { String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl"; //直接引用遠程的wsdl文件 //以下都是套路 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); call.setOperationName("addUser");//WSDL里面描述的接口名稱 call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE, javax.xml.rpc.ParameterMode.IN);//接口的參數 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型 String temp = "測試人員"; String result = (String)call.invoke(new Object[]{temp}); //給方法傳遞參數,並且調用方法 System.out.println("result is "+result); } catch (Exception e) { System.err.println(e.toString()); } } }