xfire+spring(ssh) 实现wsdl 的公网访问

来源:互联网 发布:易语言制作聊天软件 编辑:程序博客网 时间:2024/05/24 01:45

   最近做了个webservice 接口,供接收方调用,我用的是xfire 1.26  和spring 1.2(因为用2.0有包冲突,没找到解决办法,而spring1.2又不影响代码开发),基本的我就不说了,说下可能会出问题的两个地方:

 

  1.  .aegis.xml  配置问题

        

           1)   首先在接口类同目录下,创建一个前缀同名的xml, 例如接口类名是  Isshsservice.java,则同目录下创建一个Isshsservice.aegis.xml  ,   截取部份代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<mappings>
   <mapping>
        <method name="getList">
            <return-type componentType="com.ssh.entity.Ceshi" />
       </method>

       </mapping>
</mappings>

  

  先看我下面的讲解:(我只说我项目中遇到的几种情况)

  

 

         2)   关于配置问题

       Aegis  Binding  对  int , String ,boolean, date 类型的返回和参数无需配置;  例如,当返回的类型是这其中的一种或者无返回类型,而参数也是基本类型,自定义类型(一个bean--  Users )或者无参数,都不需要配置。

     

      当接口方法返回是  List ,其他参数先不管,首先就要想到配置以下代码:

  

    在  <mapping>  </mapping>   中添加: 

   

          <method name="返回list类型的方法名,比如说  getallUsers">
            <return-type componentType="com.ssh.entity.Users" />   //// ==>List 包含的是  users, 指明其路径

          </method>

         

      然后请你在javabean   Users   中去看,是不是有相互关联的多对1,一对多。 看我的users (同类的省略):

 

 private Integer usersId;


 private HisPackage hisPackage;

 private Doctor doctor;


 private String productsNumber;
 private String usersPrivatePhone;
 private Double usersTotal;

 private Integer usersScore;
 private Integer usersState;
 private Integer usersCurrentState;


 private Set changePackages = new HashSet(0);
 private Set paymentRecords = new HashSet(0);
 private Set checkResults = new HashSet(0);
 private Set consumeRecords = new HashSet(0);
 private Set relationShips = new HashSet(0);
 private Set overages = new HashSet(0);
 private Set privateStandards = new HashSet(0);

     

  因为有关联的对象 和 set ,所以需要在 再建立一个 users.aegis.xml ,和users  同目录:

 

 <?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:my="http://my.ssh">   ---------------- “”中的路径是:http://my.  实体包entity的上一级包名,我也迷糊了
 <mapping name="my:Users">                ----------------  Users 就是那个javabean 的名字

 


  <property name="hisPackage" ignore="true" />      ---------- name=“”中的名字和上面的bena  中的一样
  <property name="doctor" ignore="true" />


  <property name="changePackages" ignore="true" /> 
  <property name="paymentRecords" ignore="true" />
  <property name="checkResults" ignore="true" />
  <property name="consumeRecords" ignore="true" />     --------name=“”中的名字和 set  后面的名字一样
  <property name="relationShips" ignore="true" />
  <property name="overages" ignore="true" />
  <property name="privateStandards" ignore="true" />     --------  ignore ="  true "   的原因较多,不说了,就这样用

 

 

 </mapping>
</mappings>

  

            

          而当返回类型是  自定义对象的时候,也大同小异  例如返回类型是  Doctor ,  而doctor  中不全是基本数据类型,则也需要配置

doctor.aegis.xml , 跟  list  是一样的。

 

         上面提到的都是与返回类型有关的配置,下面看看参数的配置问题,

 

        当参数是基本数据类型,不需要对参数进行配置;当参数是list 类型,分两种情况,如果返回类型是上面两种,则需要对参数List 配置下,那么需要在<method></method>之间再加入以下代码
<parameter index="0" componentType="java.lang.String"/>
index="0"代表方法的参数的序号,0即第一个参数。
     如果返回类型是基本类型,不需要配置(没遇到过,有待测试)

    

     另外说下我的另一个经验,就是接口写好然后实现到配置,最好是一个个来,不然到最后报错,因为关联多了,不好找错误地方。

            

          

  2.  控制台调用接口测试

       在java 类里面(控制台)用到 hibernate  DAO 的时候,需要三个地方的配置,

 

    例如在 sshsserviceImpl.java  中,调用了  对  users  的 某个操作,

   则  1.

 

    private UsersDAO user_dao = null;  然后  get/set 得到

   public UsersDAO getUser_dao() {
     return user_dao;
     }

     public void setUser_dao(UsersDAO user_dao) {
      this.user_dao = user_dao;
     }

     

 这样就不会在下面文件中  报  找不到  users  的错误了

 

 

 

     2.  在配置DAO 的文件

 <bean id="UsersDAO" class="com.ssh.dao.UsersDAO">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
  </bean>

   后面添加 接口实现类 的申明:

   <bean id="allimpl" class="com.ssh.impl.All_impls">

    --------------------allimpl  自定义, 后面3  中会用到,class 是路径

 

 

   <property name="user_dao" ref="UsersDAO"></property>

    -----------user_dao 是上面 1  中申明的,  ref  是 2 中 bean  id---------

 

 

        3.     控制台 测试   或者 线程启动时候调用方法

 

      ApplicationContext ctx = new FileSystemXmlApplicationContext(
   "src/applicationContext.xml");

      All_impls  dao = (All_impls) ctx.getBean("allimpl");--------------- allimpl即2中的

   今天写这个,我已经离开webservice 开发半个月了,写的是自己曾经恼火的地方,其他疑问请百度。

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击