java 调用webservice的各种方法总结
- 格式:doc
- 大小:45.00 KB
- 文档页数:10
调用webservice的几种方式webservice是一种服务,它可以让不同类型的应用程序通过网络交换数据和信息,通过联网,客户可以与服务器端通信,而服务器端可以生成一些特定的网络服务。
webservice使得手机端客户可以实时调用服务器端的接口,从而获取相应的资源和信息,也就是说客户和服务器端之间的计算机网络协议可以实现webservice方式的交互。
通常情况下,webservice有几种不同的实现方式。
下面简单介绍几种可以实现webservice的方式。
1. 使用Axios或低层Javascript原生api发起HTTP请求。
Axios是一个支持浏览器和node.js的客户端框架,用来发起http请求。
它可以实现前后端数据交互,实现webservice。
2. 使用传统soap协议发起HTTP请求。
soap(simple object access protocol)是一种基于XML的协议,它可以通过HTTP使得应用程序交互,它可以使用简单的消息来交互数据,而不用编写特定的代码。
3. 使用REST协议发起HTTP请求。
REST协议是一种使用RESTful API的软件设计架构,它是用来构建及交互分布式系统的一种设计方法。
4. 使用JSON API发起HTTP请求。
JSON API是一种用以支持数据并行关系的API,可以让JSON数据分发,并且提供资源定位、数据多态、查询、及内容引用等功能,从而构建实现交互的webservice系统。
5. 使用gRPC发送HTTP请求。
gRPC是一种开放源的远程过程调用(RPC)系统,可以通过http2发起请求。
它的实现允许你在任何语言之间实现客户端/服务器端通信,以及实现webservice功能。
以上就是实现web service的几种方式,它们可以帮助我们将不同的应用程序通过网络交换数据和信息,实现webservice的功能,它可以帮助我们更好地构建客户端/服务器端通信环境,让客户可以实时调用服务器端接口,实现我们想要的功能,方便地实现我们服务器与客户端之间的交互和通信。
resttemplate方式调用webservice在Java中,RestTemplate是一个非常方便的HTTP客户端,可以用来调用RESTful风格的Web服务。
以下是如何使用RestTemplate调用Webservice的步骤:首先,需要导入相关的依赖包。
在Maven项目中,可以在pom.xml文件中添加以下依赖:```xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>```然后,你可以创建一个RestTemplate的Bean,并在需要的地方注入它。
如果你正在编写一个Spring Boot应用,你可以在Application类中创建一个RestTemplate的Bean:```javaimport org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;@Configurationpublic class AppConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}}```然后,在你需要调用Web服务的地方,注入RestTemplate,并使用它来发送HTTP 请求。
例如,如果你想调用一个GET请求到Web服务,你可以这样做:```javaimport org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.client.RestTemplate;import org.springframework.web.util.UriComponentsBuilder;public class MyServiceCaller {private final RestTemplate restTemplate;@Autowiredpublic MyServiceCaller(RestTemplate restTemplate) {this.restTemplate = restTemplate;}public String callWebService(String url) {String result = restTemplate.getForObject(url, String.class); return result;}}```在上述代码中,我们使用了RestTemplate的getForObject方法来发送一个GET 请求到Web服务。
Java WebService 接口实现方式什么是 WebServiceWebService 是一种基于 Web 的服务通信协议,通过使用标准的 HTTP 协议传输数据,使得不同平台、不同语言的应用程序能够进行互操作。
它使用 XML 格式来描述请求和响应的数据,并使用 SOAP(简单对象访问协议)来封装和传输这些数据。
WebService 可以提供各种功能,例如数据查询、数据传输、远程过程调用等。
它是一种跨平台、跨语言的解决方案,能够实现不同系统之间的集成和通信。
Java WebService 实现方式Java 提供了多种方式来实现 WebService 接口,下面介绍两种常用的实现方式。
JAX-WSJAX-WS(Java API for XML Web Services)是 Java EE 的一部分,用于开发和部署 WebService。
它提供了一种简单的方式来创建和发布 WebService 接口。
创建接口首先,我们需要定义一个接口,用于描述我们要提供的服务。
接口中的每个方法都将成为可远程调用的操作。
import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic interface MyWebService {@WebMethodString sayHello(String name);}在上面的例子中,我们定义了一个名为MyWebService的接口,其中有一个名为sayHello的方法,该方法接受一个字符串参数并返回一个字符串结果。
实现接口接下来,我们需要实现上述接口。
这里我们可以使用一个普通的 Java 类来实现接口中的方法。
@WebService(endpointInterface = "com.example.MyWebService")public class MyWebServiceImpl implements MyWebService {@Overridepublic String sayHello(String name) {return "Hello, " + name + "!";}}在上面的例子中,我们创建了一个名为MyWebServiceImpl的类,并实现了MyWebService接口中的sayHello方法。
Java调用.net的WebService-阿善的日志-网易博客这几天公司需要做一个java和.net项目的整合,其中.net做了一个WebService,需要java来调用。
本以为很容易的一个东西,结果弄了几天才弄好。
最开始.net的Service代码如下(黄色背景是自己增加的代码)://<%@ WebService Language="C#" Class="Service" Debug=true %>using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;namespace Service{[WebService(Namespace="")]/// <summary>/// Service1 的摘要说明。
/// </summary>public class Service : System.Web.Services.WebService{public Service(){//CODEGEN: 该调用是 Web 服务设计器所必需的InitializeComponent();}#region 组件设计器生成的代码//Web 服务设计器所必需的private IContainer components = null;/// <summary>/// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。
/// </summary>private void InitializeComponent(){}/// <summary>/// 清理所有正在使用的资源。
/// </summary>protected override void Dispose( bool disposing ){if(disposing && components != null){components.Dispose();}base.Dispose(disposing);}#endregion[WebMethod(Description="test")]public string GetTestQuestions(string TeacherName,string Subject){return "11111";}}}=================Java调用代码:public static String GetTestQuestions(String TeacherName,String Subject){String result = "";try{Service service = new Service();Call call = (Call) service.createCall();call.setOperationName(new QName("", "GetTestQuestions"));call.addParameter("TeacherName", XMLType.XSD_STRING, ParameterMode.IN);call.addParameter("Subject", XMLType.XSD_STRING, ParameterMode.IN);call.setTargetEndpointAddress(new URL(""));result = (String) call.invoke(new Object[] { TeacherName, Subject});}catch(Exception e){e.printStackTrace();}return result;}public static void main(String args[]){System.out.println(UserWebService.GetTestQuestions("aaa", "HOMA060E"));}--------------------结果用java调用时总提示:faultString: 服务器未能识别 HTTP 标头 SOAPAction 的值:。
1、什么是webservice从表面上看 Web service 就是一个应用程序 它向外界暴露出一个能够通过Web进行调用的API。
这就是说 你能够用编程的方法通过Web来调用这个应用程序。
对Web service 更精确的解释 Web services是建立可互操作的分布式应用程序的新平台。
作为一个Windows 程序员 你可能已经用COM或DCOM建立过基于组件的分布式应用程序。
COM是一个非常好的组件技术 但是我们也很容易举出COM并不能满足要求的情况。
Web service平台是一套标准 它定义了应用程序如何在Web上实现互操作性。
你可以用任何你喜欢的语言 在任何你喜欢的平台上写Web service 只要我们可以通过Web service标准对这些服务进行查询和访问。
不管你的Web service是用什么工具 什么语言写出来的 只要你用SOAP 协议通过HTTP来调用它 总体结构都应如下图所示。
通常 你用你自己喜欢的语言(如VB 6或者)来构建你的Web service 然后用SOAP Toolkit或者.NET的内建支持来把它暴露给Web客户。
于是 任何语言 任何平台上的客户都可以阅读其WSDL文档 以调用这个Web service。
客户根据WSDL描述文档 会生成一个SOAP请求消息。
Web service都是放在Web服务器(如IIS) 后面的 客户生成的SOAP请求会被嵌入在一个HTTP POST 请求中 发送到Web服务器来。
Web服务器再把这些请求转发给Web service请求处理器。
对VB 6程序来说 Web service请求处理器是一个与SOAP Toolkit组件协同工作的ASP页面或ISAPI extension。
而对程序来说 Web service请求处理器则是一个.NET Framework自带的ISAPI extension。
请求处理器的作用在于 解析收到的SOAP请求 调用Web service 然后再生成相应的SOAP应答。
Hutool是一个Java工具库,它提供了许多实用的工具类和方法,可以简化Java开发中的常见任务。
关于Hutool中的Webservice调用方式,可以参考以下步骤:
1.引入Hutool依赖:在项目的构建文件(如Maven的pom.xml或Gradle的
build.gradle)中添加Hutool的依赖。
2.创建Webservice客户端:使用Hutool提供的工具类创建Webservice客户端对象。
Hutool提供了多种方式来创建Webservice客户端,例如使用Hutool提供的HttpClient或者通过使用Java内置的HttpURLConnection。
3.调用Webservice方法:使用创建的Webservice客户端对象调用Webservice方法。
调用方法时需要指定Webservice的URL、方法名以及传递的参数等。
4.处理返回结果:根据Webservice方法的返回类型,对返回的结果进行处理。
如果返回
的是XML数据,可以使用Hutool提供的XML解析工具类进行解析。
需要注意的是,具体的调用方式可能会根据Webservice的具体实现和要求有所不同。
因此,在实际使用中,建议仔细阅读Hutool的文档和示例代码,并根据实际情况进行调整和修改。
javawebservice-cxf使⽤总结⼀1.创建maven项⽬加⼊pom依赖<dependency><groupId>org.apache.cxf</groupId><artifactId>apache-cxf</artifactId><version>3.0.2</version><type>pom</type></dependency>2.编写实体类,接⼝类与接⼝实现User.javapackage com.itstudy.domain;import javax.xml.bind.annotation.*;@XmlRootElement(name = "User")@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "User")public class User {@XmlElement(nillable = true)private Long id;@XmlElement(nillable = true)private String name;@XmlElement(nillable = true)private int age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}HelloService.javapackage com.itstudy.service;import er;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import java.util.List;@WebServicepublic interface HelloService {@WebMethodpublic String say(@WebParam(name="name")String name);@WebMethodpublic String sayHello(@WebParam(name="user") User user);@WebMethodpublic List<User> getList(Long id);}HelloServiceImpl.javapackage com.itstudy.service.impl;import er;import com.itstudy.service.HelloService;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import java.util.ArrayList;import java.util.List;@WebServicepublic class HelloServiceImpl implements HelloService {@WebMethodpublic String say(@WebParam(name = "name") String name) {return name + ",您好!";}@WebMethodpublic String sayHello(@WebParam(name = "user") User user) {return user.getName() + ",您好!";}@WebMethodpublic List<User> getList(Long id) {List<User> list = new ArrayList<User>();User user = new User();Long sid = 1L;user.setId(sid);user.setName("张三" + sid);list.add(user);user = new User();sid = 2L;user.setId(sid);user.setName("张三" + sid);list.add(user);return list;}}3.启动服务package com.itstudy;import com.itstudy.service.HelloService;import com.itstudy.service.impl.HelloServiceImpl;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class App {public static void main(String[] args) {//启动⽅式1 此⽅式接⼝实现必须添加注解 @WebService @WebMethod等// System.out.println( "Hello World!" );// HelloServiceImpl implementor = new HelloServiceImpl();// String address = "http://localhost:8080/ws/" + HelloService.class.getSimpleName(); // Endpoint.publish(address, implementor);//启动⽅式2 此⽅式接⼝实现不需要添加注解JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();factory.setServiceClass(HelloService.class);// 发布接⼝factory.setAddress("http://localhost:8080/ws/" + HelloService.class.getSimpleName()); factory.setServiceBean(new HelloServiceImpl());factory.create(); //发布多个接⼝,多定义⼏个factory即可}}4.动态调⽤webservicepackage com.itstudy;import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;public class HelloWorldClient {public static void main(String[] argv) {JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client =dcf.createClient("http://localhost:8080/ws/HelloService?wsdl");//sayHello为接⼝中定义的⽅法名称张三为传递的参数返回⼀个Object数组Object[] objects = new Object[0];try {objects = client.invoke("getList", 1L);} catch (Exception e) {e.printStackTrace();}//输出调⽤结果System.out.println(objects[0]);}}总结1.两种创建⽅式 1.1 JaxWsServerFactoryBean启动(接⼝实现不需要相关注解) 1.2 Endpoint启动 (接⼝实现与需要相关注解)2.三种调⽤⽅式 2.1动态代理 2.2拿到现有接⼝与类 2.3⽣成相关代理类参考⽂档cxf 发布多个接⼝https:///qq_21399933/article/details/78818240cxf 三种发布⽅式与4种调⽤⽅式https:///u011498933/article/details/75355338cxf 客户端调⽤2https:///z69183787/article/details/53488887cxf 客户端调⽤3https:///nba/blog/482117cxf 安全认证1https:///rangqiwei/article/details/19282271cxf 安全认证2https:///weixin_41138656/article/details/79393366cxf实战创建webservice 与创建restfulapihttps:///kongxx/article/details/7534035。
Web服务是一种基于网络的软件系统,它使用标准化的XML消息格式来交换数据。
这篇文章将介绍如何在Java中调用Web服务的示例。
1. 准备工作在开始调用Web服务之前,我们需要确保已经安装了Java开发环境,并且已经了解了Web服务的基本概念和相关知识。
2. 创建Java项目我们需要创建一个新的Java项目。
可以使用Eclipse、IntelliJ IDEA或者其他Java集成开发环境来创建项目。
在项目中,我们需要创建一个新的Java类来进行Web服务的调用。
3. 导入Web服务接口在Java项目中,我们需要导入Web服务的接口。
这可以通过WSDL (Web服务描述语言)文件来实现。
WSDL文件定义了Web服务的接口和可用操作。
可以使用wsimport工具来生成Java代码,该工具在Java的安装目录下的bin目录中可以找到。
4. 调用Web服务一旦导入了Web服务的接口,我们就可以使用Java代码来调用Web 服务了。
我们可以通过创建代理对象来调用Web服务的操作。
以下是一个简单的示例代码:```javaimport.example.webservice.MyWebService;import.example.webservice.MyWebServiceService;public class WebServiceClient {public static void main(String[] args) {MyWebServiceService service = new MyWebServiceService();MyWebService port = service.getMyWebServicePort();// 调用Web服务的操作String result = port.sayHello("World");System.out.println(result);}}```在这个示例中,我们首先创建了Web服务的代理对象,然后调用了Web服务的sayHello操作,并打印出了返回的结果。
Java调⽤CXFWebService接⼝的两种⽅式实例1.静态调⽤// 创建WebService客户端代理⼯⼚JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();// 判断是否抛出异常factory.getOutInterceptors().add(new LoggingInInterceptor());// 注册webservice接⼝factory.setServiceClass(DeductionService.class);// 配置webservice地址factory.setAddress("http://localhost:7002/card/services/HelloWorld?wsdl");// 获得接⼝对象CxfService service = (CxfService) factory.create();// 调⽤接⼝⽅法String result = service.sayHello("aaaaaaaaaa");System.out.println("调⽤结果:" + result);// 关闭接⼝连接System.exit(0);2.动态调⽤:JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:7002/card/services/HelloWorld?wsdl");// url为调⽤webService的wsdl地址QName name = new QName("/", "sayHello");// namespace是命名空间,methodName是⽅法名String xmlStr = "aaaaaaaa";// paramvalue为参数值Object[] objects;try {objects = client.invoke(name, xmlStr);System.out.println(objects[0].toString());} catch (Exception e) {e.printStackTrace();}区别:静态调⽤需要依赖service类,因为客户端调⽤cxf webservice接⼝的过程中需要服务器端提供service,很不⽅便,如果同⼀个项⽬中则没有区别。
C#调⽤Java的WebService的3种⽅式关于soapheader调⽤,可以参考1.问题描述调⽤的Java的webservicestring Invoke(string func, string reqXml) 使⽤C#直接调⽤⼀直报错。
webservice提供⽅有说明如下:1 2 3 4 5 6 7 8 9 10 11 12 13⾝份验证采⽤对SOAP⾝份认证(⽤户名/密码验证/序列号)的⽅式部署,设定⽤户名和密码由系统配置,所有⽂本内容编码选择UTF-8编码规范<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="/soap/envelope/"><soapenv:Header><vc:Authentication xmlns: vc =""><vc:Username>[系统配置] </vc:Username><vc:Password>[系统配置]</vc:Password><vc:SerialNo>[系统配置]</vc:SerialNo></vc:Authentication></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>相信就是soapenv:Header这⾥的问题了,C# 没soapenv:Header这些东西的⽹上查了好多类似下⾯的都没有⽤后来尝试sopui及xmlspy创建soap,直接发送xml,终于试出来了,然后C#使⽤http post调⽤webservice,成功了。
java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用方法。
一、利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务 1.首先建立一个Web services EndPoint: package Hello; import javax.jws.WebService; import javax.jws.WebMethod; import javax.xml.ws.Endpoint;
@WebService public class Hello {
@WebMethod public String hello(String name) { return "Hello, " + name + "/n"; }
public static void main(String[] args) { // create and publish an endpoint Hello hello = new Hello(); Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello); } } 2.使用 apt 编译 Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成 jaws目录 3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示
4.使用wsimport 生成客户端
使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl
这时,会在当前目录中生成如下文件:
5.客户端程序: 1class HelloClient{ 2public static void main(String args[]) { 3 HelloService service = new HelloService(); 4 Hello helloProxy = service.getHelloPort(); 5 String hello = helloProxy.hello("你好"); 6 System.out.println(hello); 7 } 8} 9 以上方法还稍显繁琐,还有更加简单的方法
二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的 利用xfire开发WebService,可以有三种方法: 1一种是从javabean 中生成; 2 一种是从wsdl文件中生成; 3 还有一种是自己建立webservice 步骤如下: 用myeclipse建立webservice工程,目录结构如下:
首先建立webservice接口, 代码如下:
1package com.myeclipse.wsExample; 2//Generated by MyEclipse 3 4public interface IHelloWorldService { 5 6 public String example(String message); 7 8} 接着实现这个借口: 1package com.myeclipse.wsExample; 2//Generated by MyEclipse 3 4public class HelloWorldServiceImpl implements IHelloWorldService { 5 6 public String example(String message) { 7 return message; 8 } 9 10} 修改service.xml 文件,加入以下代码: 1 2 HelloWorldService 3 4 com.myeclipse.wsExample.IHelloWorldService 5 6 7 com.myeclipse.wsExample.HelloWorldServiceImpl 8 9 10 literal 11 application 12 把整个项目部署到tomcat服务器中 ,打开浏览器,输入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:
然后再展开HelloWorldService后面的wsdl可以看到:
客户端实现如下: 1package com.myeclipse.wsExample.client; 2 3import java.net.MalformedURLException; 4import java.net.URL; 5 6import org.codehaus.xfire.XFireFactory; 7import org.codehaus.xfire.client.Client; 8import org.codehaus.xfire.client.XFireProxyFactory; 9import org.codehaus.xfire.service.Service; 10import org.codehaus.xfire.service.binding.ObjectServiceFactory; 11 12import com.myeclipse.wsExample.IHelloWorldService; 13 14public class HelloWorldClient { 15public static void main(String[] args) throws MalformedURLException, Exception { 16// TODO Auto-generated method stub 17Service s=new ObjectServiceFactory().create(IHelloWorldService.class); 18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 19String url="http://localhost:8989/HelloWorld/services/HelloWorldService"; 20 21 try 22 { 23 24 IHelloWorldService hs=(IHelloWorldService) xf.create(s,url); 25 String st=hs.example("zhangjin"); 26 System.out.print(st); 27 } 28 catch(Exception e) 29 { 30 e.printStackTrace(); 31 } 32 } 33 34} 35 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下: 1public static void main(String[] args) throws MalformedURLException, Exception { 2 // TODO Auto-generated method stub 3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class); 4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 5 6 7//远程调用.net开发的webservice 8Client c=new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl")); 9 Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"}); 10 11//调用.net本机开发的webservice 12Client c1=new Client(new URL("http://localhost/zj/Service.asmx?wsdl")); 13Object[] o1=c1.invoke("HelloWorld",new String[]{}); 14 15} 三、使用axis1.4调用webservice方法 前提条件:下载axis1.4包和tomcat服务器 ,并将axis文件夹复制到tomcat服务器的webapp文件夹中 这里我就说一下最简单的方法: 首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个wsdl文件,其客户端调用方法如下: 1import javax.xml.rpc.Service; 2import javax.xml.rpc.ServiceException; 3import javax.xml.rpc.ServiceFactory; 4 5import java.net.MalformedURLException; 6import java.net.URL; 7import java.rmi.RemoteException; 8 9import javax.xml.namespace.QName; 10 11public class TestHelloWorld { 12 13 14 public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException { 15 // TODO Auto-generated method stub 16 17 String wsdlUrl ="http://localhost:8989/axis/HelloWorld.jws?wsdl"; 18 String nameSpaceUri ="http://localhost:8989/axis/HelloWorld.jws"; 19 String serviceName = "HelloWorldService"; 20 String portName = "HelloWorld"; 21