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

    这个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自动)刷新项目,可以看到已经生成了代码 
    

 

另一种方法:使用Axis2

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

<!-- axis 1.4 jar start -->
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.2</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis-jaxrpc</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis-saaj</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- axis 1.4 jar end -->

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

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

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,其它随意,就能生成

主要是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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值