使用Axis或XFire实现WebService:

Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。
 
XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的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());
}
}
}

java-webService(调用wsdl接口)的更多相关文章

  1. C# 不添加WEB引用调用WSDL接口

    在项目中添加WEB引用耦合度较高,更新时要更新引用,所以我建议不添加WEB引用调用WSDL接口,废话不多说,直接上代码 例如WSDL地址为:http://XXX.XX.XXX.XXX:9115/WsP ...

  2. php7-soap调用wsdl接口报错:Could not connect to host

    由php5.6升级到php7.1以上版本,在用soap调用wsdl接口是报错:Could not connect to host 后来经过排查是centos服务器上装有2个版本的openssl造成的. ...

  3. java springboot调用第三方接口 借助hutoool工具类 爬坑

    楼主是个后端小白一枚,之前没接触过后端,只学了java基本语法,还是在学校老师教的,学的很浅,什么ssh.ssm框架都没有学,最近在自学spring boot,看书学也看不是很懂,就在b站上看教学视频 ...

  4. [Java] java调用wsdl接口

    前提: ① 已经提供了一个wsdl接口 ② 该接口能正常调用 步骤1:使用cxf的wsdl2java工具生成本地类 下载CXF:http://cxf.apache.org/download.html ...

  5. C#/Java 调用WSDL接口及方法

    一.C#利用vs里面自带的“添加web引用”功能: 1.首先需要清楚WSDL的引用地址  如:http://www.webxml.com.cn/Webservices/WeatherWebServic ...

  6. [Java] webservice soap,wsdl 例子

    java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...

  7. java反射调用dubbo接口

    需求:项目增加幂等 场景:1.三个项目:a .b.c2.a项目加幂等3.b项目dubbo调用项目a的时候超时没有获取返回结果,增加重试机制(非立即重试,3min or 5min 后重试)4.c项目是一 ...

  8. axis2调用WSDL接口

    public static JSONObject sendWsdl(String url,String xmlStr){ JSONObject res=new JSONObject(); try { ...

  9. Java调用WSDL接口

    1.首先准备jar包: 2.代码调用如下: String url="url地址"; QName qName=new QName("命名空间","接口名 ...

随机推荐

  1. Delphi 10.3最新消息

    因为Google Play的要求,使Delphi官方被动的透出点消息:https://community.embarcadero.com/blogs/entry/deadline-approachin ...

  2. Python写一个批量生成账号的函数

    批量生成账户信息,产生的账户由@sina.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母.小写字母和数字组成. def Users(num,len): # n ...

  3. 看我怎么扒掉CSDN首页的底裤(python selenium+phantomjs爬取CSDN首页内容)

    这里只是学习一下动态加载页面内容的抓取,并不适用于所有的页面. 使用到的工具就是python selenium和phantomjs,另外调试的时候还用了firefox的geckodriver.exe. ...

  4. python2和Python3的区别(长期更新)

    1.在Python2中无需将打印的内容放在括号内,但是Python3中必须将打印的内容放在括号内,从技术上看Python3中的print是函数. 2.对于用户交互终点额输入input,在python2 ...

  5. ArcGIS中的数据连接问题——数据类型不统一

    博主在研究空间数据分布的时候经常会用到 ArcGIS 进行空间数据可视化.但是有时候会由于数据类型不统一而无法将 csv 中的数据连接到底图上.比如在底图中的数据是字符串格式,而 csv 中是数字格式 ...

  6. Scrum_Sprint

    1.计划会议过程 经过一天的讨论研究,我们对该项目进行了需求分析,确定了这周所要实现的各个功能 并做好了任务看板,并将项目的各个功能分成一个个任务,进行了初步的分工 2.backlog BACKLOG ...

  7. js获取当天零点的时间戳

    var now_date = new Date();//获取Date对象now_date.setHours(0);//设置小时now_date.setMinutes(0);//设置分钟now_date ...

  8. DQN-深度Q网络

    深度Q网络是用深度学习来解决强化中Q学习的问题,可以先了解一下Q学习的过程是一个怎样的过程,实际上就是不断的试错,从试错的经验之中寻找最优解 关于Q学习,我看到一个非常好的例子,另外知乎上面也有相关的 ...

  9. Wifi设备接入流程

    这是硬件平台下文档结构图,详细了解戳这里具体了解这里. 什么意思呢?要想实现控制wifi设备,基本流程是: 咱自己的wifi设备----------自己的服务器(指图中的厂商服务器)-------微信 ...

  10. 20155219 2016-2017-2 《Java程序设计》第9周学习总结

    20155219 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...