半新手向,webservice开发调用wsdl,调用他人的服务
2023-12-26 17:57:14
背景
调用别人的服务
首先得有一个wsdl文件
这个文件可以手动发你,也可以通过链接网页,复制网页上的所有内容保存为wsdl文件。
以上为前提。
假设你已经有了wsdl文件。
wsdl文件有两种方式转成java文件
第一种wsimport
E:\temp\webservice>wsimport -keep -p com.test test.wsdl
正在解析 WSDL...
正在生成代码...
正在编译代码...
E:\temp\webservice>
这很正常,就结束了。
如果出现问题,比如说首行不对,看一看,改一改即可。
如果说出现重复
注意一下啊,wsimport上暂时没找到解决方案得用第二种
第二种wsdl2java
这种是用一个apache-cxf里的工具
文件全名为 apache-cxf-3.1.15
你从csdn找个链接下,找官网也行,就是贼慢,那个版本都行。
然后下完了配一下环境变量path里加一行指向这个文件的bin文件
之后在cmd中使用命令
wsdl2java -p com.example.generated -d output_directory -autoNameResolution wsdl.wsdl
wsdl2java :顾名思义,wsdl文件转为java文件;
-p com.example.generated:生成的java文件所保存的文件路径;【可以先用上之后再改也可】
-d output_directory:生成的java文件所保存的文件路径的文件夹;【当src用】
-autoNameResolution;自动选择自动名称,【就是把重复名字的加上路径前缀】
wsdl.wsdl;就是一个名字叫做wsdl的wsdl文件;
生成的java文件使用
这玩意比较麻烦
你需要找你的生成的文件中的Service,东西多的话比较难找,因为他把所有东西都放在了com.example.generated包下;
我自己写了个代码把所有文件名取出来,筛选出后缀为Service的
代码丑陋,能用上就行
import java.io.File;
/**
* getmulu
*
* @author: Myli c
* @Date: 2023/12/26 10:34
* @version: 1.0
*/
public class PackageScanner {
public static void main(String[] args) {
String packageName = "E:\\output_directory\\com\\example\\"; // 替换成你的包名
PackageScanner packageScanner = new PackageScanner();
packageScanner.scanPackage(packageName);
}
public void scanPackage(String packagePath) {
File packageDirectory = new File(packagePath);
if (packageDirectory.isDirectory()) {
System.out.println("Files in package " + packagePath + ":");
listFiles(packageDirectory);
} else {
System.err.println(packagePath + " is not a valid package directory.");
}
}
private void listFiles(File directory) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
listFiles(file);
} else {
// 仅在文件名以"service"结尾时输出
if (file.getName().toLowerCase().endsWith("service.java")) {
System.out.println(file.getName());
}
}
}
}
}
}
Connected to the target VM, address: '127.0.0.1:56671', transport: 'socket'
Files in package E:\\output_directory\com\example\:
xxxx_Service.java
Disconnected from the target VM, address: '127.0.0.1:56671', transport: 'socket'
这个xxxx_Service.java
就是你的实例化服务
写完才发现,直接在生成的文件中全局搜 extends Service
更快(⊙﹏⊙)
总结一下
//导入生成的类: 在您的Java代码中,导入生成的客户端类。例如:
import com.example.generated.YourWebServicePortType;
import com.example.generated.YourWebServiceService;
//创建服务实例: 创建WebService服务实例。这通常涉及到使用生成的服务类创建一个实例。例如:
YourWebServiceService service = new YourWebServiceService();
YourWebServicePortType port = service.getYourWebServicePortTypePort();
//调用WebService方法: 使用生成的客户端类的方法调用WebService方法。
//方法的签名和命名通常基于WSDL中定义的操作。例如:
// 调用WebService的方法
String result = port.yourWebServiceMethod(parameter1, parameter2);
//请替换yourWebServiceMethod和parameter1,parameter2等与您的WebService方法和参数相对应的内容。
//处理结果: 处理WebService方法的返回值,如果有的话。
System.out.println("WebService Result: " + result);
//异常处理: 添加适当的异常处理,以处理可能发生的错误。
try {
// 调用WebService的方法
String result = port.yourWebServiceMethod(parameter1, parameter2);
System.out.println("WebService Result: " + result);
} catch (Exception e) {
e.printStackTrace();
// 处理异常
}
文章来源:https://blog.csdn.net/m0_54765221/article/details/135224226
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!