JAVA如何调用wsdl过程详解
作者:徐小木L 发布时间:2021-08-12 22:00:18
前提:① 已经提供了一个wsdl接口② 该接口能正常调用
总体分为两种方式:
1.使用cxf的wsdl2java工具生成本地类(使用方式就是本地类的使用)。
2.调用远程的web service方法:创建client来远程调用接口。
因为第二种方式,需要熟悉wsdl,没深入了解不太好操作,主要说下第一种方式。
使用cxf的wsdl2java工具生成本地类主要步骤如下:
1、安装JDK环境(jdk版本是1.6的话,后续会报错jdk6最高只支持ws2.1规范版本)
2、下载apache-cxf发布包,下载CXF:http://cxf.apache.org/download.html 目前最新版本为3.1.7,解压发布包,设置CXF_HOME,并添加%CXF_HOME %/bin到path环境变量。
3、CMD命令行输入wsdl2java -help,有正常提示说明环境已经正确配置。
4、CMD运行命令 :
wsdl2java -encoding utf-8 -d D:\javalib\web http://m.zsjsjy.com/services/resource?wsdl
(wsdl 的路径)
-encoding表示生成的Java文件编码格式为utf8,-d表示代码生成路径为D:\javalib\we。运行后会在运行命令的当前路径生成以供使用的类
5、把生成的类导入项目。一般服务都叫XXXService,这个是我们要用到的接口文件
上述过程中的遇到的问题:
1、因为jdk是1.6版本的,导致下载的apache-cxf发布包解压后使用报错,这是cxf和jdk的jar包有冲突引起的!
就下载了老版本的apache-cxf-2.6.12.zip ,查了一些资料,保险起见接着把jdk换成了1.7,
如果还报错 就在jdk1.7文件夹下的jre下的lib文件下创建一个endorsed文件夹(D:\java\jdk1.7.0_16\jre\lib\endorsed),
把apache-cxf中jaxb对应的三个2.2jar包复制到endorsed中,最后成功生产本地java类。
2、成功生成java文件导入项目后,调整完java中报错的包文件,结果serviece类中还是有构造函数报错,注释说需要jaxws2.2来重新生成才可。
查了下资料说其不能正常编译通过是由于jax-ws2.2规约与java6冲突。 但程序又不能仅以java5来编译,故需要降低jax-ws规约版本。
解决办法:执行命令: wsdl2java -frontend jaxws21 -d D:\javalib\cn http://m.zszsjsjy.com/services/resource?wsdl
重新生成来解决。
3、接口调用测试时报错,Exception in thread "main" org.apache.cxf.service.factory.ServiceConstructionException
原因是生成接口java类,namespace路径是它原来默认的,而我放进项目时类的路径已经是现在的了。
解决办法:需要 自定义-p路径 重新生成:
wsdl2java -frontend jaxws21 -encoding utf-8 -p cn.teacheredu.app.projectconfigcenter.proj.module.screen.tlogin.zswebservice -d D:\javalib\cn http://m.zszsjsjy.com/services/resource?wsdl
来源:https://www.cnblogs.com/xuxiaomu/p/9537626.html


猜你喜欢
- C# 的类型转换有显式转型 和 隐式转型 两种方式。显式转型:有可能引发异常、精确度丢失及其他问题的转换方式。需要使用手段进行转换操作。隐式
- 1.配置自定义共享线程池(Spring线程池)@Configuration@EnableAsyncpublic class ThreadPo
- 1:新建一个项目运行起来,可以看到顶部一直有个标题栏看着不是很美观2:有两种方法可以去除顶部标题栏(1)将代码中AndroidManifes
- 本文实例讲述了C#实现生成所有不重复的组合功能。分享给大家供大家参考,具体如下:给你几个字母,比如(a,b,c,d,e,f),要求生成所有不
- 具体代码如下所示:public class Parent { public static int a = parentStati
- package com.qhdstar.java.pdf;import java.awt.Color;import java.io.File
- 先来看看效果实现效果模拟水波纹的效果:点击屏幕就有圆环出现,半径从小到大,透明度从大到小(0为透明)实现思路 &nbs
- 一:将String字符串放在最前面防止发生NullPointerException异常,我们通常把String字符串放在equals方法的左
- 本文实例讲述了Java Socket实现传输压缩对象的方法。分享给大家供大家参考,具体如下:前面文章《Java Socket实现的传输对象功
- 找入口对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方
- C#实现修改文件的创建、修改和访问时间方法,主要是用到了File类的SetCreationTime、SetLastWriteTime、Set
- 需求有时候我们想快速通过http访问本地的一些资源,但是安装一些web服务器又很费时和浪费资源,而且也不是长期使用的。这时候我们可以启动一个
- 最近有个需求,需要统计APP的在线人数,其实以前也统计过,采取的是上线发送一个请求$this->cache->incr()加1,
- 那么Http协议中的Multipart是个什么东东?下面是摘抄http协议1.1的一段话:
- 前言最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经
- 前言枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型:public enum Color
- 1、右值1.1 简介首先区分一下左右值:左值是指存储在内存中、有明确存储地址(可取地址)的数据;右值是指可以提供数据值的数据(不可取地址)如
- 开发过程, 我们习惯把数据源配置, 项目常量, 日志配置等基础数据配置写到一个个单独的的文件中. 如jdbc.properties等各种.格
- 本文实例讲述了Android编程设计模式之迭代器模式。分享给大家供大家参考,具体如下:一、介绍迭代器模式(Iterator Pattern)
- 简介一般情况下我们在flutter中搭建的app基本上都是用的是MaterialApp这种设计模式,MaterialApp中为我们接下来使用