Java SpringBoot项目通过Eclipse反编译调用webservice

62 阅读2分钟

写这篇文章原由是前些天有需求要调用ERP接口,但对方提供的webservice路径通过访问生成的wsdl文件与常见的webservice发布的wsdl有些许不同用hutool的工具调用一直请求不成功

生成的wsdl大致长这样 image.png

image.png

ps: 可能先前接触的webservice接口比较少的原因 这个发布的location与targetNamespace与我印象中的完全不一样。。。

进入正题将wsdl访问路径通过Eclipse反编译可以生成java类然后通过类方法进行调用

这里的调用是个规范性写法填上对应的参数照抄就行

public Result webserviceDemo() {

   DT_FI_HT_CUSTOMER_RESPITEM[] customerArray = new DT_FI_HT_CUSTOMER_RESPITEM[0];
   try
   {
       SI_FI_HT_CUSTOMER_OUTServiceLocator sl = new SI_FI_HT_CUSTOMER_OUTServiceLocator();
       SI_FI_HT_CUSTOMER_OUTBindingStub bs;
       bs = (SI_FI_HT_CUSTOMER_OUTBindingStub) sl.getHTTP_Port();

       // 用户名密码
       bs.setUsername("******");
       bs.setPassword("******");

       // 表数据请求
       DT_FI_HT_CUSTOMER_REQITEM[] req = new DT_FI_HT_CUSTOMER_REQITEM[1];

       // 接收参数的是个数组把参数传数组里就可以了
       DT_FI_HT_CUSTOMER_REQITEM req1 = new DT_FI_HT_CUSTOMER_REQITEM(
               companyCode, customerName, threeCertificatesOneNum);

       req[0] = req1;
       // 发送请求,获取响应值
       DT_FI_HT_CUSTOMER_RESP rp = bs.SI_FI_HT_CUSTOMER_OUT(req);
       log.info(" 发送请求,获取响应值 ===> {} ",rp);
       customerArray = rp.getITEM();
       log.info(" 接收返回值 ===> {} ",customerArray);
   }
   catch (Exception e)
   {
       log.error("失败了!!!!");
       e.printStackTrace();
   }
   return Result.succeed(customerArray);
}

Eclipse反编译生成的Java类引用一般都在方法前这种的即使不报错在SpringBoot中也是没法使用的可以像我这样注释掉或者直接去掉

image.png

引入的POM依赖与需要的JAR包

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis-jaxrpc</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>axis</groupId>
    <artifactId>axis-wsdl4j</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>commons-discovery</groupId>
    <artifactId>commons-discovery</artifactId>
    <version>0.2</version>
</dependency>

JAR包可以选择直接放入maven仓库然后引入或者是在对应项目下建立个lib包然后通过包路径引入,我这里是通过放到项目下引用的方式与src同级 ${project.basedir} 根节点的下级节点 image.png JAR包路径:链接: pan.baidu.com/s/1IGrRUSoK… 提取码: 0831

<dependency>
    <groupId>1</groupId>
    <artifactId>axis</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/axis.jar</systemPath>
</dependency>
<dependency>
    <groupId>1</groupId>
    <artifactId>commons-discovery-0.2</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/commons-discovery-0.2.jar</systemPath>
</dependency>
<dependency>
    <groupId>1</groupId>
    <artifactId>commons-logging-1.0.4</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/commons-logging-1.0.4.jar</systemPath>
</dependency>
<dependency>
    <groupId>1</groupId>
    <artifactId>jaxrpc</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/jaxrpc.jar</systemPath>
</dependency>
<dependency>
    <groupId>1</groupId>
    <artifactId>log4j-1.2.8</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/log4j-1.2.8.jar</systemPath>
</dependency>
<dependency>
    <groupId>1</groupId>
    <artifactId>saaj</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/saaj.jar</systemPath>
</dependency>
<dependency>
    <groupId>1</groupId>
    <artifactId>wsdl4j-1.5.1</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/wsdl4j-1.5.1.jar</systemPath>
</dependency>