java-webService(调用wsdl接口)
使用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()); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构