Java调用WebService服务的方法主要有以下几种:
1、使用JAX-WS(Java API for XML Web Services)
JAX-WS是Java SE的一部分,它提供了一组API,用于创建和调用Web服务,JAX-WS支持两种类型的Web服务:RPC(远程过程调用)和文档导向的Web服务,RPC风格的Web服务通常用于客户端/服务器应用程序,而文档导向的Web服务则用于发布和发现基于文档的信息。
要使用JAX-WS调用WebService服务,需要遵循以下步骤:
1、1 生成代理类:使用wsimport工具从WSDL文件生成Java代理类。
1、2 创建WebService客户端:使用javax.xml.ws.Service接口创建WebService客户端。
1、3 调用WebService方法:通过代理类的对象调用WebService方法。
示例代码:
import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class JAXWSClient { public static void main(String[] args) throws Exception { // 1. 创建URL对象,指向WSDL文件的位置 URL wsdlURL = new URL("http://localhost:8080/mywebservice?wsdl"); // 2. 创建QName对象,指定服务的名称和命名空间 QName serviceName = new QName("http://example.com/", "MyWebService"); QName portName = new QName("http://example.com/", "MyWebServicePort"); // 3. 创建Service对象,传入WSDL文件的URL和服务名称、端口名称 Service service = Service.create(wsdlURL, serviceName); // 4. 调用getPort方法,获取服务的端口对象 MyWebService myWebService = service.getPort(portName, MyWebService.class); // 5. 调用WebService方法,传入参数并获取返回值 String result = myWebService.myMethod("Hello, World!"); System.out.println("Result: " + result); } }
2、使用Apache CXF(Apache Software Foundation's Contract First Web Services)
Apache CXF是一个开源的实现SOAP协议的Web服务框架,它提供了一套丰富的API,用于创建和调用Web服务,CXF支持多种编程语言,包括Java、Python、Ruby等。
要使用Apache CXF调用WebService服务,需要遵循以下步骤:
2、1 添加CXF依赖:在项目的pom.xml文件中添加Apache CXF的依赖。
2、2 生成客户端代码:使用cxf-codegen-plugin插件从WSDL文件生成客户端代码。
2、3 创建WebService客户端:使用生成的客户端代码创建WebService客户端。
2、4 调用WebService方法:通过客户端对象调用WebService方法。
示例代码:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.wsdl11.WSDLManagerImpl; import javax.xml.namespace.QName; import java.util.List; import java.util.Map; public class CXFClient { public static void main(String[] args) throws Exception { // 1. 创建WSDLManager对象,用于处理WSDL文件的加载和解析 WSDLManagerImpl wsdlManager = new WSDLManagerImpl(); wsdlManager.setWsdlLocation("http://localhost:8080/mywebservice?wsdl"); wsdlManager.setServiceClass(MyWebService.class); wsdlManager.setEndpointAddress("http://localhost:8080/mywebservice"); wsdlManager.setFeatures(new String[]{"javax.wsdl.Binding"}); // 如果需要,可以设置其他特性,如安全、事务等 wsdlManager.initialize(); // 2. 创建JaxWsProxyFactoryBean对象,用于生成代理类实例 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(MyWebService.class); // 设置服务接口类型 factory.setAddress("http://localhost:8080/mywebservice"); // 设置服务的地址和端口号 factory.setWsdlDocumentationLocation("http://localhost:8080/mywebservice?wsdl"); // 如果需要,可以设置WSDL文档的位置和版本信息 factory.setDataBindingId("java:compact"); // 如果需要,可以设置数据绑定的类型和版本信息,如javax.xml.datatype等 factory.setFeatures(new String[]{"javax.xml.ws.soap"}); // 如果需要,可以设置其他特性,如安全、事务等 factory.setEndpointInterface(MyWebServicePortType.class); // 如果需要,可以设置服务的端口类型和名称,如MyWebServicePortType等 factory.setBus(new SpringBus()); // 如果使用Spring框架,可以设置Spring上下文的引用,以便进行依赖注入等操作 factory.afterPropertiesSet(); // 初始化工厂对象后,会触发一系列事件,如加载WSDL文件、生成代理类等操作 MyWebService myWebService = (MyWebService) factory.create(); // 通过工厂对象生成代理类实例,并转换为服务接口类型或端口类型等对象类型
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/325123.html