半新手向,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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。