小弟原来只用过XFIRE和SPRING集成来做WEBSERCE,参数是基本类型,现在用axis2做个客户端和别人通信,有几个基础问题请教一下。
1.一般做AXIS2客户端是不是根据工具生成一些代码?这个生成AXIS2代码工具是什么?生成的代码是做什么的?
2.一般webservice认证怎么做的?当做参数一起传过去?还是对方绑定你的IP?
3.如果参数是个JAVABEAN,或者是个LIST(返回值),这个怎么办?是不是自动生成代码里已经有了转化,你只要用就可以了?
4.搜了一下入门教程,都没有自动生成代码的例子,好像很简单,这是怎么回事?如果不自动生成一些代码会不会在实际项目里很复杂?
谢谢

解决方案 »

  1.   

    记得XFIRE和spring集成很简单,就是把WSDL文件放在项目里,注册成BEAN,然后直接调用就行了,也不用生成什么代码
      

  2.   

    1.是可以自己生成代码,一个是WSDL2Java可以根据wsdl生成客户端的调用代码。你也可以通过安装eclipse插件来快速开发,有两个插件,一个是Axis2_Codegen_Wizard,就是刚才说的代码自动生成的工具,还有一个Axis_Service_Archiver,他可以将你的服务自动打成arr包,axis推荐奖项目打成arr包发布。
    2:不熟
    3:axis1.3以后支持list这种类型,就是说不用做其他的配置就可以直接使用,但是使用的时候要当做数组来使用,比如你返回你个List,其实是一个数组,而map就可以直接使用,返回的就是map。其他的bean则需要序列化和反序列化,举个例子public List<TestBean> getBean(){}这样一个服务
    首先配置server_config.wsdd文件
    <service name="test" provider="java:RPC">
      
      <parameter name="allowedRoles" value="test"/>
      <parameter name="allowedMethods" value="*"/>
      <parameter name="className" value="test.Test"/>
      <beanMapping languageSpecificType="test.TestBean " qname="ns:testNs" xmlns:ns="urn:t"/>
     </service>客户端调用代码:
     Call call = (Call) service.createCall(); //创建Call实例,也是必须的!
          call.setTargetEndpointAddress(new java.net.URL(endpoint)); //为Call设置服务的位置
     call.setOperationName(new QName("test", "getBean"));
    QName qn = new QName("urn:t","testNs");
    call.registerTypeMapping(TestBean.class, qn, new org.apache.axis.encoding.ser.BeanSerializerFactory(TestBean.class, qn), new org.apache.axis.encoding.ser.BeanDeserializerFactory(TestBean.class, qn));
    Object[] list= (Object[])call.invoke(new Object[]{});
     System.out.println(((TestBean)list[0]).getName());
    4:我就没用自动生成代码,如果你只有一个wsdl文件,建议你去自动生成代码。
      

  3.   

    插件只是用来生成 WSDL吧,客户端和服务端程序可以自己写