webservice连接数据库出错!!!。。。。。。。。。。救命!
小弟使用的是定制发布,结果服务是发布成功了,但是返回的信息出错,不知道为什么啊?
小弟认为是这里的问题:System.out.println(call.invoke( new Object[] {s1,s2}));
不清楚怎样把两个参数传到服务器端的loginUser方法。
webservice服务器端程序
package samples.capacity;
import org.gjt.mm.mysql.Driver;
import java.sql.*;
public class DbUtil {
public DbUtil(){}
private Connection con=null;
public Connection getConnection(Connection con)throws
SQLException,Exception{
con=this.dbCon();
return con;
}
private Connection dbCon()throws ClassNotFoundException,SQLException,Exception{
String driver="org.gjt.mm.mysql.Driver";
String url ="jdbc:mysql://localhost:3306/test?user=root&password=";
try{
Class.forName(driver).newInstance();
con=DriverManager.getConnection(url);
}catch(ClassNotFoundException exp){
System.err.println("数据库驱动载入有错误:"+exp);
}catch(SQLException exp){
System.err.println("数据库连接有错误:"+exp);
}catch(Exception exp){
System.err.println("发现未知错误:"+exp);
}
return con;
}
public void release()throws Exception{
if(!(con==null))
con.close();
}
}
package samples.capacity;
import org.gjt.mm.mysql.Driver;
import java.sql.*;
import java.io.Serializable;
import java.sql.*;
import samples.capacity.DbUtil;
public class search implements Serializable{
private Connection con=null;
private ResultSet rs = null;
private Statement stmt = null;
public search() {
}
public String loginUser(String username,String password)throws SQLException,Exception
{
DbUtil db=new DbUtil();
con=db.getConnection(con);
stmt = con.createStatement();
String strSql = "select * from user where username = '"+username+"',password = '"+password+"'";;
rs = stmt.executeQuery(strSql);
if (rs.next()){
return "welcome to here";
}else{
return "unsuccess";
}
}
}
文件deploy1.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="search" provider="java:RPC">
<parameter name="className" value="samples.capacity.search"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
客户端程序
package axisexercise;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
public class AXISTest
{
public static void main( String[] args ) throws Exception
{
Service service = new Service();
Call call = ( Call ) service.createCall();
call = ( Call ) service.createCall();
//设置访问点
call.setTargetEndpointAddress( "http://localhost:8080/axis/services/search" );
//设置操作名
call.setOperationName( "loginUser" );
//设置入口参数
call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
call.setReturnType( XMLType.XSD_DOUBLE );
String s1 = new String( "123" );
String s2 = new String( "123" );
//调用服务
System.out.println(call.invoke( new Object[] {s1,s2}));
}
}
错误信息
Exception in thread "main" AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: javax.xml.rpc.JAXRPCException: Number of parameters passed in (2)
doesn't match the number of IN/INOUT parameters (1) from the addParameter() call
s
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:javax.xml.rpc.JAXRPCException: N
umber of parameters passed in (2) doesn't match the number of IN/INOUT parameter
s (1) from the addParameter() calls
at org.apache.axis.client.Call.getParamList(Call.java:2042)
at org.apache.axis.client.Call.invoke(Call.java:2345)
at org.apache.axis.client.Call.invoke(Call.java:1804)
at axisexercise.AXISTest.main(AXISTest.java:60)
{http://xml.apache.org/axis/}hostname:yjinjin
javax.xml.rpc.JAXRPCException: Number of parameters passed in (2) doesn't match
the number of IN/INOUT parameters (1) from the addParameter() calls
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.client.Call.invoke(Call.java:1820)
at axisexercise.AXISTest.main(AXISTest.java:60)
Caused by: javax.xml.rpc.JAXRPCException: Number of parameters passed in (2) doe
sn't match the number of IN/INOUT parameters (1) from the addParameter() calls
at org.apache.axis.client.Call.getParamList(Call.java:2042)
at org.apache.axis.client.Call.invoke(Call.java:2345)
at org.apache.axis.client.Call.invoke(Call.java:1804)
... 1 more
Press any key to continue...
问题点数:50、回复次数:4Top
1 楼yjj317(射手vs射手)回复于 2005-09-19 17:19:32 得分 0
自己up一下了,人气太差了Top
2 楼sxtbuaa(小洒)回复于 2005-09-20 08:54:19 得分 50
---------------------------------------------
//设置入口参数
call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
你就加了一个参数,提示很明白了:
Number of parameters passed in (2) doesn't match the number of IN/INOUT parameter
-----------------------------------------
以后自己看清楚了再来问!
Top
3 楼yjj317(射手vs射手)回复于 2005-09-20 09:28:39 得分 0
请问楼上的大哥,小弟刚接触webservice,请问
call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
怎样加入第二个参数?
Top
4 楼yjj317(射手vs射手)回复于 2005-09-20 09:54:11 得分 0
回复人: sxtbuaa(小洒) ( ) 信誉:97
=======================================
问题我已经解决了,谢谢你的提示拉!Top




