我试过,如果使用axis作为SOAP服务器的话,是不能够同时发布两个以上的类的。当然,如果用weblogic的话,同时发布几个类的方法都没有问题。但有另外一个问题:我想把不同的类的方法发布到同一个service的不同port,比如上面所说的:methodA发布到portA,methodB发布到portB。不知道除了手工修改WSDL和WSDD外,还有没有什么好的方法或者工具?毕竟手工修改一方面很麻烦,另外也容易出错!

解决方案 »

  1.   

    既然是用AXIS,为什么不试试jws的方式呢?你写一个jws来封装这两个类的两个不同方法,让axis自动帮你生成wsdl多好?
      

  2.   

    jws是什么? 没有试过. 谢谢先! 明天try it.
      

  3.   

    jws其实就是java文件,AXIS会自动将jws文件发布成web服务!做一个java类把他改名为jws的扩展名,然后拷贝到axis的目录即可!
      

  4.   

    在axis下,除非折衷,按照 liusoft(凤梨罐头) 的做法绕过这个问题,否则是实现不了的。
      

  5.   

    sigh……你做一个facade的类,再把facade发布为一个service不就行了吗?
      

  6.   

    楼主提的问题是很好的,我们项目也曾经遇到这个问题。1、把不同的类发布到同一个port是很容易实现的,在<service>元素下配置Endpoint URL的时候写相同就可以.2、在axis中一个portType对应的就是一个web service。其实你没有必要把2个类作为一个service啊。分为2个service,但是共用一个port是一个很好的解决方法。因为对你是不是一个service并不重要吧?实在不行,就把方法写到一个类中。
      

  7.   

    to: liusoft(凤梨罐头) jws方式一般只对于简单的应用,而对于复杂的应用还是推荐使用wsdd来发布服务的。而且让axis来自动生成wsdl,并不一定要是jws方式,只要你把接口写好,axis会自动生成wsdl、用于发布的wsdd文件、stub和skeleton
      

  8.   

    我们就是用的facade类。不过这只是一个折衷的办法,当开放的接口比较多的时候,facade类就会很大。给人一种不整洁的感觉。
      

  9.   

    service本来就是一个facade。如果一个service需要很多方法才能完整地体现它的功能,你还有别的选择吗?如果两个方法本来就不属于同一项业务逻辑,把它们强捏进一个service又有什么意义?
      

  10.   

    终于有人过问了,谢谢大家!
    Schlemiel(维特根斯坦的扇子) 我需要将多个类的接口发布到一个service里面,主要是因为我需要保持用户的会话状态。当用户访问同一个service的多个port时,可以采用session来跟踪用户的状态。但是,如果多个方法(port)分布到不同的service中,我如何才能跟踪用户的状态呢?