spring项目在idea中最简单的调用webservice接口方法

  很长时间不调用webservice接口了,记得当初调webservice的时候,还要结合CxfXFire等框架。但是今天忽然给我一个这样的第三方wsdl地址,需要推送数据。
  难道还要配置webservice框架吗?费那么大劲,最后就调一个接口。

在这里插入图片描述
  然后,我本着执着的思想,坚决不配置webservice的东西,就要调通这个接口。最后真的发现了。真的太方便了。。。

具体步骤
1、第三方提供的接口文档

  调过webservice接口的同学们,肯定知道,接口提供方会给出一个类似http://123.21.11.223:19080/project-uniform-code-service?wsdl这样的地址。然后再配一个接口文档,比如下边:
在这里插入图片描述
  对,没毛病,这就是正常的提供,因为webservice的调用时,需要根据给的wsdl地址,自己来生成里边的接口等调用接口所需要的类。
  我们根据wsdl地址生成所需接口的代码,方式很多。可以用jdk自带的wsimport,我是用的idea开发工具生成的。主要介绍它的办法。

2、idea根据wsdl生成接口代码

  首先你要确定你要确定将代码生成在哪里。比如我打算在我新建的webservice文件夹里生成代码,那右击webservice文件夹,如下:
在这里插入图片描述
  如上图,点击Genarate Java Code From Wsdl... ,弹出如下页面,进行如下填写:
在这里插入图片描述
  填写完成后,点击ok,即可在文件夹里生成很多类,其中包含一些class文件,删掉class文件,具体如下:
在这里插入图片描述
  到这里,生成代码的步骤就完成了。

3、客户端调用接口

  首先我要按照上边,第三方提供的文档,找到要求我调用的那个方法,它就在生成的第一个接口里:

@WebService(name = "IProjectUniformCodeService", targetNamespace = "http://service.exchange.gfm.glodon")
@XmlSeeAlso({
    ObjectFactory.class
})
public interface IProjectUniformCodeService {


    /**
     * 
     * @param uniformCodeJournalReceiveBean
     * @return
     *     returns cloud.user.service.webservice.UniformCodeResponse
     */
    @WebMethod
    @WebResult(targetNamespace = "")
    @RequestWrapper(localName = "projectUniformMethodService", targetNamespace = "http://service.exchange.gfm.glodon", className = "cloud.user.service.webservice.ProjectUniformMethodService")
    @ResponseWrapper(localName = "projectUniformMethodServiceResponse", targetNamespace = "http://service.exchange.gfm.glodon", className = "cloud.user.service.webservice.ProjectUniformMethodServiceResponse")
    public UniformCodeResponse projectUniformMethodService(
        @WebParam(name = "uniformCodeJournalReceiveBean", targetNamespace = "")
        UniformCodeJournalReceiveBean uniformCodeJournalReceiveBean);

}

  但它是一个接口,我也没法获取到它的实体,怎么点到这个方法呢?反正我决定,不会去合webservice框架的,再看看其他的文件吧。
  生成的时候,觉得生成的内容里,有很多感觉不知道是些什么东西的文件,后来我就点开了看了下。这一看我恍然大悟。。。
在这里插入图片描述
  比如生成的文件中的第二个文件,为什么名字叫的那么奇怪,**ServiceService ,点开后,我发现了如下的代码:

 static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://123.21.11.223:19080/project-uniform-code-service?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        IPROJECTUNIFORMCODESERVICESERVICE_WSDL_LOCATION = url;
        IPROJECTUNIFORMCODESERVICESERVICE_EXCEPTION = e;
    }

更重要的是它继承了javax.xml.ws.Service

@WebServiceClient(name = "IProjectUniformCodeServiceService", targetNamespace = "http://service.exchange.gfm.glodon", 
wsdlLocation = "http://123.21.11.223:19080/project-uniform-code-service?wsdl")
public class IProjectUniformCodeServiceService
    extends Service
{

  此处的代码有情况啊。。哈哈。无缘无故new URL,还是我要调的接口地址,这明显是在调用接口嘛。这很明显了。肯定会有后续步骤。
  在本类里我又继续往下找,看到了如下代码:

 @WebEndpoint(name = "IProjectUniformCodeServicePort")
    public IProjectUniformCodeService getIProjectUniformCodeServicePort() {
        return super.getPort(new QName("http://service.exchange.gfm.glodon", 
        "IProjectUniformCodeServicePort"), IProjectUniformCodeService.class);
    }

  为什么我注意到这个接口呢?因为在上边已经贴出来了,就是该接口里,有我要调用的方法,我前边因为它是接口没法new出来,这里却返回了这个。
在这里插入图片描述
  缺啥给啥,“对象“”有了。。。哈哈
  最后我赶紧写了一个main方法,内容如下:

 IProjectUniformCodeServiceService serviceService = new IProjectUniformCodeServiceService();
IProjectUniformCodeService codeService = serviceService.getIProjectUniformCodeServicePort();
UniformCodeResponse uniformCodeResponse = codeService.projectUniformMethodService(receiveBean);
 if(uniformCodeResponse != null){
     if("200".equals(uniformCodeResponse.getCode())){
         return uniformCodeResponse.getUniformCodeJournalReturn().getUnifiedDealCode();
     }
 }

  上边的receiveBean是个实体类,即要求我给他把参数封装成的对象,这个好理解,我把它省略没贴出来,我就这么写完,接口一调,果然通了。
在这里插入图片描述

  原来wsdl生成的类里,已经有了客户端直接调用接口的方法。

  其实上边可以写的再好点,生成类里还有个ObjectFactory类,该类是所需类的一个工厂类,可以拿到具体的要用的类。我后来也改成了用它调用。

  • 25
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茁壮成长的凌大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值