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());
}
}
}
java-webService(调用wsdl接口)的更多相关文章
- C# 不添加WEB引用调用WSDL接口
在项目中添加WEB引用耦合度较高,更新时要更新引用,所以我建议不添加WEB引用调用WSDL接口,废话不多说,直接上代码 例如WSDL地址为:http://XXX.XX.XXX.XXX:9115/WsP ...
- php7-soap调用wsdl接口报错:Could not connect to host
由php5.6升级到php7.1以上版本,在用soap调用wsdl接口是报错:Could not connect to host 后来经过排查是centos服务器上装有2个版本的openssl造成的. ...
- java springboot调用第三方接口 借助hutoool工具类 爬坑
楼主是个后端小白一枚,之前没接触过后端,只学了java基本语法,还是在学校老师教的,学的很浅,什么ssh.ssm框架都没有学,最近在自学spring boot,看书学也看不是很懂,就在b站上看教学视频 ...
- [Java] java调用wsdl接口
前提: ① 已经提供了一个wsdl接口 ② 该接口能正常调用 步骤1:使用cxf的wsdl2java工具生成本地类 下载CXF:http://cxf.apache.org/download.html ...
- C#/Java 调用WSDL接口及方法
一.C#利用vs里面自带的“添加web引用”功能: 1.首先需要清楚WSDL的引用地址 如:http://www.webxml.com.cn/Webservices/WeatherWebServic ...
- [Java] webservice soap,wsdl 例子
java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...
- java反射调用dubbo接口
需求:项目增加幂等 场景:1.三个项目:a .b.c2.a项目加幂等3.b项目dubbo调用项目a的时候超时没有获取返回结果,增加重试机制(非立即重试,3min or 5min 后重试)4.c项目是一 ...
- axis2调用WSDL接口
public static JSONObject sendWsdl(String url,String xmlStr){ JSONObject res=new JSONObject(); try { ...
- Java调用WSDL接口
1.首先准备jar包: 2.代码调用如下: String url="url地址"; QName qName=new QName("命名空间","接口名 ...
随机推荐
- matlab xml文件交互
xml文件以文档对象模型表示,简称DOM(Document Object Model).在Matlab中,使用xmlread读取xml文件成DOM节点,对xml文件的操作转化成对DOM节点的操作,使用 ...
- day 51
一 window对象 window 对象表示一个浏览器窗口. 在客户端 JavaScript 中,Window 对象是全局对象,所有的表达式都在当前的环境中计算.也就是说,要引用当前窗口根本不需要特殊 ...
- Python 基础list 增删改查 解析
一 增加 1 append 增加到最后一个列表 li = [ 1,3,4 ,'wang',]li.append('wangyan')print(li)[1, 3, 4, 'wang' ...
- IE6以下版本对元素width和height的处理与CSS标准的兼容性问题
1.CSS使用width和height定义元素框的内容,Windows平台的IE6以下版本浏览器并未按照标准处理而是使用width和height来定义可见元素框的尺寸,IE/win使用width来描述 ...
- SQL注入之Sqli-labs系列第十五关和第十六关(基于POST的时间盲注)
开始挑战第十五关(Blind- Boolian Based- String)和 第十六关(Blind- Time Based- Double quotes- String) 访问地址,输入报错语句 ' ...
- Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ
文章目录 1. 什么是 RabitMQ 2. Spring Boot 整合 RabbitMQ 3. 实战演练4. 源代码 3.1. 一个简单的实战开始 3.1.1. Configuration 3.1 ...
- sublime text3 key
Sublime Text 3 3126 注册码 第一个测试通过 —– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8 ...
- thinkphp+redis实现秒杀功能(转)
1,安装redis,根据自己的php版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbinary.dll,php_redis.dll扩展此处需要注意你的php版本如图: ...
- NOI-1.1-04输出保留3位小数的浮点数
04:输出保留3位小数的浮点数 总时间限制: 1000ms 内存限制: 65536kB 描述 读入一个单精度浮点数,保留3位小数输出这个浮点数. 输入 只有一行,一个单精度浮点数. 输出 也只有一 ...
- mask-code-python
tf.sqeeze: 给定张量输入,此操作返回相同类型的张量,并删除所有尺寸为1的尺寸. 如果不想删除所有尺寸1尺寸,可以通过指定squeeze_dims来删除特定尺寸1尺寸.如果不想删除所有大小是1 ...