org.apache.axis.wsdl.Java2WSDL通过?wsdl生成WebService及Axis的全部依赖jar

发布一个WebService服务: 

    a,在类上添加@WebService注解 
        (注:此注解是jdk1.6提供的,位于javax.jws.WebService包中) 
    b,通过EndPoint(端点服务)发布一个WebService 
       (注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中) 
    c,注: 类上添加注解@WebService,类中所有非静态方法都会被发布; 
                 静态方法和final方法不能被发布; 
                方法上加@WebMentod(exclude=true)后,此方法不被发布;
 

前提条件

    已通过Endpoint发布了一个端点服务WebService,运行编译该class,在浏览器中输入正确的wsdl地址(url:http://172.11.1.111:8080/?wsdl)返回xml

org.apache.axis.wsdl.Java2WSDL通过?wsdl生成WebService及Axis的全部依赖jar_第1张图片

    这个xml的阅读方式:

    1)先找service节点:每个wsdl中,有且只有一个service节点。也叫服务视图节点。service中有port节点服务端端口。
    2)根据port节点的binding属性找binding节点。根据binding节点的type属性找portType节点。
    3)portType节点就是我们定义的SEI服务的接口类型。Prottype中的operation 节点就是方法名称。
    4)operation 节点的input就是参数的定义,output就是返回值的定义。
    5)Input有个属性叫做message,message属性对应message节点。其中有一个element,对应element节点。
    6)Element节点定义中xsd中。定义了数据的类型。参数和返回值都在其中定义。
 

报错原因

    想通过?wsdl生成WebService,调用WebService的方法。

 

解决办法

    1、选择生成的代码存放位置,可以新建一个项目或者放在当前项目下(仅作测试用)
    2、打开cmd,在dos命令下输入 wsimport -s “src目录” -p “生成类所在包名” -keep “wsdl发布地址” 
    示例:wsimport -s D:\Wordspace\MyTest\webservice\src -p main.com.client -keep http://172.11.1.111:8080/?wsdl 

    一般src的下一层包是main、test等包,所以这里“生成类所在包名”要加上main这一层

    3、成功则返回 parsing WSDL… 
        generating code… 
        compiling code… 
    4、(IDEA自动)刷新项目,可以看到已经生成了代码 
    org.apache.axis.wsdl.Java2WSDL通过?wsdl生成WebService及Axis的全部依赖jar_第2张图片

 

另一种方法:使用Axis2

1、在当前项目的pom.xml中添加下述依赖


        
            org.apache.axis
            axis
            1.4
        
        
            commons-discovery
            commons-discovery
            0.2
            
                
                    commons-logging
                    commons-logging
                
            
        
        
            org.apache.axis
            axis-jaxrpc
            1.4
        
        
            org.apache.axis
            axis-saaj
            1.4
        
        
            wsdl4j
            wsdl4j
            1.4
        
        

    在IDEA的项目package右键-->WebServices-->Generate Wsdl From Java Code,这个“Generate Wsdl From Java Code”也可以生成代码,而且跟用命令行生成的很像,但是用这个方法生成的代码到后面调用WebService接口的时候执行失败。我觉得这个方法也可以,但实际上不行,不知道哪里出错了。

org.apache.axis.wsdl.Java2WSDL通过?wsdl生成WebService及Axis的全部依赖jar_第3张图片

org.apache.axis.wsdl.Java2WSDL通过?wsdl生成WebService及Axis的全部依赖jar_第4张图片

接下来的操作照着图来,下面是解释:

Web service wsdl url:在浏览器输入能正确返回xml的wsdl地址

Output pahe和Package prefix是指定生成的文件放的位置

Web Service Platform:这里选择Apache Axis

Allow extensions :允许扩展

Generate TestCase:生成xxxServiceTestCase.java文件

Generate classes for schema arrays:从概要数组里生成class文件

Generate unreferenced elements:生成未引用的元素

Support wrapped document/literal style:支持document/literal类型的包装

 

注意

extends是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法

implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用

    1、在项目的package右键

    2、勾选Generate classes for schema arrays或者Generate unreferenced elements,其它随意,就能生成

org.apache.axis.wsdl.Java2WSDL通过?wsdl生成WebService及Axis的全部依赖jar_第5张图片

主要是GetValue和GetValueResponse,其它类不管你勾选什么或者不勾选,都会自动生成

 

点击OK之后,发现无法下载,报错,一开始是找不到main,缺少了axis.jar,添加了之后又报找不到某一个class,另一个jar,接连手动添加了几个,猜测是缺少了jar,最后搜到某博客才引入了完整的maven 依赖,解决了问题点击进入该博客

 

 

但是

    虽然需要的类是下载下来了,但是会有警告

Jan 17, 2019 3:10:57 PM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler
 and javax.mail.internet.MimeMultipart). Attachment support is disabled.
Done

原因

    缺少mail.jar,在tomcat的lib中找到mail-1.4.jar复制到client的lib中。重新运行,警告消失

部分内容参考自:https://blog.csdn.net/qazwsxpcm/article/details/70370490

你可能感兴趣的:(WebService)