使用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. 多路复用 阻塞/非阻塞IO模型 网络IO两个阶段

    1.网络IO的两个阶段 waitdata copydata send 先经历:copydata阶段 recv 先经历:waitdata阶段 再经历 copydata阶段 2.阻塞的IO模型 之前写的都 ...

  2. python day03--字符串

    一.字符串 1.索引 s1 = "python最牛B" S1[0]第0个,从零开始算 s1[8]“B” 2.切片 语法: str[start: end]规则: 顾头不顾腚, 从st ...

  3. Makefile内置变量,递归式变量,直接展开式变量,条件赋值,追加赋值

    将shell命令的输出赋值给变量: VALUE = $(shell   命令) Makefile中给变量赋值: =     是递归展开式变量 value1 = 5 value2 = $(value1) ...

  4. 大数据-12-Spark+Kafka构建实时分析Dashboard

    转自 http://dblab.xmu.edu.cn/post/8274/ 0.案例概述 本案例利用Spark+Kafka实时分析男女生每秒购物人数,利用Spark Streaming实时处理用户购物 ...

  5. C#类中字段封装为属性

    本文描述内容转载 https://zhidao.baidu.com/question/1174413218458798139.html 感谢 冥冥有你PD 的解答!!! 问题思索1 类成员包括变量和方 ...

  6. TCP三次握手及释放连接详解(转)

    一.TCP头部简介 ACK :即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符.表示发来的数据已确认接收无误.TCP报文格式中的控制位由6个标志比特构成,其中一个就是ACK,ACK为1表 ...

  7. maven初级

    ANT 和 分布式 ANT 是一种构建工具,就是eclips中项目,建立,删除..等等都是. 高负载访问一个服务器的时候,服务器会出现卡机或者访问速率降低的问题,这个时候就需要分布式的使用,将一个项目 ...

  8. jupyter notebook远程服务器终端连接

    如下图

  9. {"errcode":48001,"errmsg":"api unauthorized}

    微信公众号基础知识说明 网页授权获取微信用户信息:两种 scope 域 https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&am ...

  10. django HttpResponse的用法

    一.传json字典 def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http im ...