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

原创

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

         
        
                                    

  很长时间不调用webservice接口了,记得当初调webservice的时候,还要结合CxfXFire等框架。但是今天忽然给我一个这样的第三方wsdl地址,需要推送数据。

难道还要配置webservice框架吗?费那么大劲,最后就调一个接口。

spring项目在idea中最简单的调用webservice接口方法_第1张图片
  然后,我本着执着的思想,坚决不配置webservice的东西,就要调通这个接口。最后真的发现了。真的太方便了。。。

具体步骤

1、第三方提供的接口文档

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

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

  首先你要确定你要确定将代码生成在哪里。比如我打算在我新建的webservice文件夹里生成代码,那右击webservice文件夹,如下:
spring项目在idea中最简单的调用webservice接口方法_第3张图片
  如上图,点击Genarate Java Code From Wsdl... ,弹出如下页面,进行如下填写:
spring项目在idea中最简单的调用webservice接口方法_第4张图片
  填写完成后,点击ok,即可在文件夹里生成很多类,其中包含一些class文件,删掉class文件,具体如下:
spring项目在idea中最简单的调用webservice接口方法_第5张图片
  到这里,生成代码的步骤就完成了。

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);

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

  但它是一个接口,我也没法获取到它的实体,怎么点到这个方法呢?反正我决定,不会去合webservice框架的,再看看其他的文件吧。
  生成的时候,觉得生成的内容里,有很多感觉不知道是些什么东西的文件,后来我就点开了看了下。这一看我恍然大悟。。。
spring项目在idea中最简单的调用webservice接口方法_第6张图片
  比如生成的文件中的第二个文件,为什么名字叫的那么奇怪,**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;
    }

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

更重要的是它继承了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
{

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

  为什么我注意到这个接口呢?因为在上边已经贴出来了,就是该接口里,有我要调用的方法,我前边因为它是接口没法new出来,这里却返回了这个。
spring项目在idea中最简单的调用webservice接口方法_第7张图片
  缺啥给啥,“对象“”有了。。。哈哈
  最后我赶紧写了一个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();
     }
 }

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

  上边的receiveBean是个实体类,即要求我给他把参数封装成的对象,这个好理解,我把它省略没贴出来,我就这么写完,接口一调,果然通了。
spring项目在idea中最简单的调用webservice接口方法_第8张图片

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

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

                                
文章最后发布于: 2018-12-28 20:02:44

你可能感兴趣的:(java)