axis2 生成服务端与客户端与客户端代码

服务端:
服务端生成命令:见后面

代码接口需要自己实现:后缀为Skeleton的类需要自己实现
所需jar
改动:需要改services.xml里的useOriginalwsdl为false,或将wsdl放在同级目录
各文件防止位置
web.xml:
    <servlet>      
    <servlet-name>AxisServlet</servlet-name>      
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>      
    <load-on-startup>1</load-on-startup>      
    </servlet>           
    <servlet-mapping>      
    <servlet-name>AxisServlet</servlet-name>      
    <url-pattern>/services/*</url-pattern>      
    </servlet-mapping>
services.xml放在eams/WEB-INF\services\webservice\META-INF下

wsdl文件访问路径

http://127.0.0.1:8080/TestWebservice/services/AppframeUserService?wsdl

路径说明:ip:端口/项目名/services(可能是对应services.xml路径)/services.xml中定义的service的name?wsdl


客户端:
wsdl2java -uri C:\xxx.wsdl -p com.kk.proj.service.product -o stub
    uri参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。
    p参数指定了生成的Java类的包名,
    o参数指定了文件保存的目录。
    
---------------------------------------------------------------------------------------------------------------    
一、利用Axis2工具的WSDL2Java命令自动生成JAVA代码,进入cmd命令行模式,运行命令WSDL2Java 
1.生成服务端代码命令 
WSDL2Java -uri wsdl文件全路径 -p 包名 -d xmlbeans -s -ss -sd -ssi -o 生成的java代码存放路径 

2.生成客户端包代码命令 
WSDL2Java -uri wsdl文件全路径 -p 包名 -d xmlbeans -s -o 生成的java代码存放路径 

WSDL2Java命令参数说明: 
-uri  指定*.wsdl文件,可以带具体路径; 
-p  指定生成代码的包名 
-d xmlbeans  使用不同的数据绑定方法,默认adb; 


adb:最简单的生成Axis客户端的方法。大部分情况下,这些主要的类都会以内部类的形式创建在stub类中。It is not meant to be a full schema binding application, and has difficulty with structures such as XML Schema element extensions and restrictions。 be meant to:有意要、打算
       xmlbeans : 与adb不同,他是一个全功能的schema编译器。他没有ADB的限制。然而,他也比ADB用起来更复杂。他会产成大量的文件,编程模型不如adb直观。
       JiBX:他是一个数据绑定框架。他不仅提供了WSDL-JAVA的转换,而且提供了JAVA-XML的转换。JiBX相当灵活,允许你选择类来代表你的实体,但是这个却不好做,但还句话说,如果这些都能建好,那么使用JiBX就更使用ADB一样容易。

对于简单应用来说adb已经够用了,如果想用更加强大更加灵活的功能,那么你可能需要使用其他两种方式。


-o  指定生成代码放置的路径; 
-ss 表示要生成服务端代码; 
-ssi 表示要生成代码中,先生成接口类,再生成实现类; 

-----------------------------------------------------------------------------------------------------------

命令行格式为:WSDL2Java [options] -uri <url or path> : A url or path to a WSDL 
其中常用的options具体如下: 
-o <path> : 指定生成代码的输出路径 
-a           :   生成异步模式的代码 
-s           :   生成同步模式的代码 
-p <pkg> :   指定代码的package名称 
-l <languange> : 使用的语言(Java/C) 默认是java 
-t            : 为代码生成测试用例 
-ss          :   生成服务端代码 默认不生成 
-sd          :   生成服务描述文件 services.xml,仅与-ss一同使用 
-d <databinding>   : 指定databingding,例如,adb,xmlbean,jibx,jaxme and jaxbri 
-g           : 生成服务端和客户端的代码 
-pn <port_name>   : 当WSDL中有多个port时,指定其中一个port 
-sn <serv_name>   : 选择WSDL中的一个service 
-u                       : 展开data-binding的类 
-r <path>             : 为代码生成指定一个repository 
-ssi                     :   为服务端实现代码生成接口类 
-S                       : 为生成的源码指定存储路径 
-R                       :   为生成的resources指定存储路径 
--noBuildXML        :   输出中不生成build.xml文件 
--noWSDL            :   在resources目录中不生成WSDL文件 
--noMessageReceiver : 不生成MessageReceiver类  

------------------------------------------------------------------------------------------axis客户端代码

-------------1、所需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>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>wsdl4j</groupId>
        <artifactId>wsdl4j</artifactId>
        <version>1.6.2</version>
    </dependency>

-------------2、代码

//以下代码需要新增jar:axis-jaxrpc-1.4.jar、commons-discovery-0.2.jar、axis2-xmlbeans-1.8.0.jar

    public static void main(String[] args) throws Exception{
        String en="http://127.0.0.1:8080/TestWebservice/services/AppframeUserService";//wsdl地址
        String targetNamespace="http://www.openuri.org/";//搜索wsdl文件中的targetNamespace
//        String soapActionURI = "http://WebXml.com.cn/getCountryCityByIp";//搜索wsld文件中此方法的soapactionuri,如果没有uri可以不设置
        String method = "getUserSet";//要调用的方法名(以wsdl文件为准)
        Object[] ps=new Object[] {"<condition><CompanyCode>221112</CompanyCode><name>公司</name></condition>"};//参数值,顺序与参数名对应
        Service service = new Service();
        Call call = (Call)service.createCall();
        call.setTargetEndpointAddress(en);
        call.setOperationName(new javax.xml.namespace.QName(targetNamespace,method));
        
//        call.setSOAPActionURI(soapActionURI);
//        call.setUseSOAPAction(true);//如果有soapActionURI,设置为true(此处未测试)
        call.setEncodingStyle("UTF-8");
        call.addParameter(new javax.xml.namespace.QName(targetNamespace,"xmlData"),
                org.apache.axis.encoding.XMLType.XSD_STRING,  
                javax.xml.rpc.ParameterMode.IN); //此处设置参数名,多个参数可以多次调用该方法,与参数值对应
//        call.addParameter(new javax.xml.namespace.QName(targetNamespace,"name"),  
//                org.apache.axis.encoding.XMLType.XSD_STRING,
//                javax.xml.rpc.ParameterMode.IN);
        call.setReturnClass(String.class);//返回值类型,根据实际返回值类型设置
        Object resp = call.invoke(ps);
        System.out.println(resp);
    }

-------------3、其他

如果报错Unexpected subelement,可能是传入了不被期望的参数,检查参数名和targetNamespace是否正确,如果参数名没问题,可以把targetNamespace改成wsdl文件中其他相似地址试试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值