ResultSet这种特殊类型不能作为结果返回
WebServive是能返回简单类型 整型 字符型 数组型

解决方案 »

  1.   

    Standard mappings from WSDL to Java
    xsd:base64Binary byte[] 
    xsd:boolean boolean 
    xsd:byte byte 
    xsd:dateTime java.util.Calendar 
    xsd:decimal java.math.BigDecimal 
    xsd:double double 
    xsd:float float 
    xsd:hexBinary byte[] 
    xsd:int int 
    xsd:integer java.math.BigInteger 
    xsd:long long 
    xsd:QName javax.xml.namespace.QName 
    xsd:short short 
    xsd:string java.lang.String 
    只有这么多标准类型可以被对应
    参考这里
    http://ws.apache.org/axis/java/user-guide.html#XMLJavaDataMappingInAxis如果你一定要用非标准类型,那么你需要自定义它,并且把它作为一个命名空间发布出去
      

  2.   

    如果ResultSet结构简单,那么可以把它表示为多为数组
    如果复杂,那么就把它写为XML文件 然后把XML文件当作WebService的附件
      

  3.   

    很感谢,上面还有的配置问题没解决
    部分代码如下:
    package dtcs.webservice;
    import java.sql.*;
    public class queryserver
    {
      private dbclass db=null;
      private xmlconfig objxml;  public queryserver()
      {
        objxml=new xmlconfig();
        db=new dbclass();    if(objxml.readXmlConfig())
        {      db.setClassname(objxml.getClassname()) ;
          db.setDsn(objxml.getJdbc());
          db.setUserID(objxml.getUseID()) ;
          db.setPwd(objxml.getPwd()) ;
          db.ReConnect () ;
        }  }  /**
       * @todo  登记一个获取短信的用户号码
       * @param usercode 用户号码
       * @return   TRUE:成功  FALSE:失败   */
      public boolean Register(String usercode)
      {
        String strsql;
        strsql="select * from usercode where usercode='"+usercode+"' order by usercode";    ResultSet rs=db.QueryRst(strsql);
        try
        {
          if ( rs.next () )
          {
            strsql = "update usercode set isstop=0 where usercode='" + usercode +
    "'" ;
            return db.ExcuteSQL ( strsql ) ;
          }      strsql="insert into usercode(usercode) values('"+usercode+"')";
          return db.ExcuteSQL(strsql);
        }
        catch ( SQLException ex )
        {
          return false;
        }
      }
    }上面用到其它的类或者包,这时该怎么配置,我已经将编译生成的.class文件copy到...webapps\axis\web-inf\classes下了?
    发布服务也失败
    D:\tomcat\webapps\axis\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
    执行结果:
    Processing file deploy.wsdd
    Exception:: java.lang.Exception: FIXMEdeploy.wsdd内容
    <deployment xmlns="http://xml.apache.org/Axis/wsdd/" xmlns:java="http://xml.apache.org/Axis/wsdd/providers/java"> 
    <handler name="print" type="java:LogHandler"/> 
    <service name="queryserver" provider="java:RPC">
    <requestFlow>
    <handler type="print"/>
    </requestFlow>
    <parameter name="className" value="dtcs.webservice.queryserver"/>
    <parameter name="allowedMethods" value="*"/> 
    </service>
    </deployment>
      

  4.   

    可以打包(比如.jar文件),然后放到lib下就可以了!
      

  5.   

    把Axis的lib下的所有的lib都放到classPath中,然后在命令行中先进到.wsdd所在的目录,调用 java org.apache.axis.client.AdminClient deploy.wsdd 命令进行发布。
    下面是我的环境变量:
    JAVA_HOME
    C:\j2sdk1.4.2_08AXIS_HOME
    %CATALINA_HOME%\webapps\axisAXIS_LIB
    %AXIS_HOME%\libAXISCLASSPATH
    %AXIS_LIB%\activation.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-httpclient-3.0-rc2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\mailapi_1_3_1.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\servlet.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\xercesImpl.jar;%AXIS_LIB%\xmlParserAPIs.jarCATALINA_HOME
    C:\Tomcat_5.0CLASSPATH
    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;;%CATALINA_HOME%\common\lib\servlet.jar;%AXIS_LIB%\activation.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-httpclient-3.0-rc2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\mailapi_1_3_1.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\servlet.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\xercesImpl.jar;%AXIS_LIB%\xmlParserAPIs.jarPath
    %JAVA_HOME%\bin;
      

  6.   

    非常感谢,上面的问题用另外的一个方法已经解决,我是直接利用jb的webservice export成webservice成功了,然后利用自动生成的那些配置文件和包,然后copy到tomcat/webapps下就ok了
    直接在IE中输入http://localhost:8080/bob.webservice/services 显示
    And now... Some Services
    AdminService (wsdl) 
    AdminService 
    Version (wsdl) 
    getVersion 
    queryserver (wsdl) 
    Register 
    UnRegister 
    测试http://localhost:8080/bob.webservice/services/queryserver?wsdl也有xml信息返回,只是在用客户端调用的时候老返回注册失败,有什么办法可以跟踪调试下???
    贴上queryserver的注册接口和client的调用方法,帮我看下有没什么问题
      

  7.   

    client调用
      public boolean RQ_Register(String usercode)
      {    try
        {
          call = ( Call ) service.createCall () ;
          try
          {
            call.setTargetEndpointAddress ( new java.net.URL ( endpointURL ) ) ;
            call.setOperationName( new QName("queryserver", "Register") );//设置操作的名称。
            Object paras[] = new Object[]{usercode};
            call.setReturnType(XMLType.XSD_BOOLEAN) ;
            try
            {
              String s = ( String ) call.invoke ( paras ) ;
              return Boolean.getBoolean(s);
            }
            catch ( RemoteException ex3 )
            {
              return false;
            }
          }
          catch ( MalformedURLException ex1 )
          {
            return false;
          }    }
        catch ( ServiceException ex )
        {
          return false;
        }  }服务器端的代码上面的一段代码中已经有,这里就不重复贴了
    其中客户端请求的endpointURL 为
    http://localhost:8080/bob.webservice/services/queryserver?wsdl
      

  8.   

    问题解决了,classes配置应该是对的,我把public boolean Register(String usercode)改成返回是String类型,相应的客户端调用call.setReturnType(XMLType.XSD_BOOLEAN) ;这一句去掉就ok了
      

  9.   

    外部类放在...\web-inf\classes目录下就行了,如果是包就放在...\web-inf\lib目录下