CXF 客户端调用

xiaoxiao2021-02-28  41

客户端调用web service方法 首先要使用cxf的wsdl2java命令工具生成服务代理类,如:

wsdl2java -d E:\\zengyf\\download -all  http://124.89.118.212:13000/as_mas/WS/SMPlatform?wsdl 具体命令格式可使用wsdl2java /?查看。生成后的代理类名是:服务实现类名+Service

 

方法一:使用标准的JAX-WS的API完成客户端调用

//注意。此处http:http://www.itfad.net/queryUser是服务的命名空间,可查看wsdl文件中的targetNamespace

QName qName = new QName("http://www.itfad.net/queryUser","QueryUserImplService"); QueryUserImplService ImplService =new QueryUserImplService(new URL("http://localhost:8080/CXFDemo/queryUser?wsdl"),qName); IQueryUser service=(IQueryUser)ImplService.getPort(IQueryUser.class);

方法二:javax.xml.ws.Service 

String endPointAddress = "http://localhost:8080/queryUser";//服务实际地址 //此处http://charles.com/为命名空间,默认是包名的倒序。IQueryUserService=服务接口名+service javax.xml.ws.Service service = javax.xml.ws.Service.create(new QName("http://charles.com/","IQueryUserService")); //IQueryUserPort=服务接口名+Port service.addPort(new QName("http://charles.com/","IQueryUserPort"),javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, endPointAddress); IQueryUser queryService1 =service.getPort(IQueryUser.class);

System.out.println(queryService1.query(user));

这里其实利用wsdl2java工具为我们生成类时已经包含了这种方法。比如我们的服务接口是IQueryUser,那么我们会发现生成的文件下有个IQueryUserService类 该类正是继承至javax.xml.ws.Service,并封装以上代码的功能,调用代码如下: IQueryUserService queryUserService=new IQueryUserService();//默认构造函数里使用默认wsdl地址和服务的QName IQueryUser queryService1 =queryUserService.getIQueryUserPort();//方法内部调用了super.getPort(IQueryUserPort, IQueryUser.class); System.out.println(queryService1.query(user));

 

 方法三:使用CXF中JaxWsProxyFactoryBean客户端代理工厂调用web服务

JaxWsProxyFactoryBean soapFactoryBean = newJaxWsProxyFactoryBean(); soapFactoryBean.setAddress("http://localhost:8080/queryUser"); soapFactoryBean.setServiceClass(IQueryUser.class); Object o = soapFactoryBean.create(); IQueryUser service = (IQueryUser)o;

方法四:使用CXF的JaxWsDynamicClientFactory动态代理工厂

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient("people.wsdl", classLoader); Object person =Thread.currentThread().getContextClassLoader().loadClass("com.acme.Person").newInstance(); Method m = person.getClass().getMethod("setName", String.class); m.invoke(person, "Joe Schmoe"); client.invoke("addPerson", person);

 

针对SOAP12实现的服务,采用(建议SOAP11也采用该调用,比上述动态要有效率):

String http="http://127.0.0.1:8080/as_mas/WS/SMPlatform?wsdl"; JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance(); QName SERVICE = new QName(targetNamespace, wsdl:service.name); QName MASPort = new QName(targetNamespace, wsdl:port.name); Client client = factory.createClient(http, SERVICE, MASPort); Object[] result; System.out.println("success>>>>>>>>>>>>>>"); String method1="receiveTextMsg"; try { result = client.invoke(method1,"test","test","134123","123"); System.out.println(result[0]); } catch (Exception e) { e.printStackTrace(); }

转载请注明原文地址: https://www.6miu.com/read-2626081.html

最新回复(0)