IsAdminLogin.java调用CanteeAdminLoginService.jws服务中的AdminLogin()方法,AdminLogin()有调用了同文件中的adminLogin()方法。
还有server-config.wsdd文件也有。
*************************************************************************
提供服务的那部分代码(CanteeAdminLoginService 中的)
public boolean adminLogin(String username,String password){
        System.out.println("CanteeAdminLoginService.jws中username:" + username);
System.out.println("CanteeAdminLoginService.jws中password:" + password);
boolean flag = false;
ConnDb cd = new ConnDb();
try {
conn = cd.getConn();
ps = conn.prepareStatement("select * from admintable where adminaccount=? and adminpasswd=?");
ps.setString(1, username);
ps.setString(2, password);
rs = ps.executeQuery();
if(rs.next()){
flag = true;
}
System.out.println("Try中 flag in CanteeAdminLoginService :" + flag);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("flag in CanteeAdminLoginService :" + flag);
return flag;
}
public String AdminLogin(String username,String password){
if( adminLogin( username, password)){
return "true";
}else{
return "false";
}
//return "test";
}
*************************************************************************
调用服务的代码(IsAdminLogin.java中的)
public boolean adminLogin(String username,String password){
boolean flag = false;
String login = "";
try{
System.out.println("调用服务之前login:" + login);
String endpoint = "http://localhost:8080/Canteen/CanteeAdminLoginService.jws";
Service service = new Service();
Call call = null;
call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName("AdminLogin");
//call.addParameter(username, XMLType.XSD_STRING, ParameterMode.IN);
//call.addParameter(password, XMLType.XSD_STRING, ParameterMode.IN);
//call.setUseSOAPAction(true);
// 填写你要调用的方法名称
login = (String)call.invoke(new Object[] { username,
password });
System.out.println(call.invoke(new Object[] { username,
password }));
System.out.println("服务返回后login:" + login);
System.out.println("username:" + username);
System.out.println("password:" + password);
}catch(Exception e){
e.printStackTrace();
}
if("true".equals(login)){
flag = true;
}
return flag;
}
************************************************************************请哪位大侠帮帮忙?改了一天了,没改出来,55555

解决方案 »

  1.   

    可能是webservice.jar和axis.jar有冲突,导致NullPointException
      

  2.   

    你先确定服务端发布正确,在浏览器 看看wsdl能否查看
    然后使用axis的工具生成客户端,看看是不是客户端代码写错了
      

  3.   

    login = (String)call.invoke(new Object[] { username, 
    password }); 你这个定义的是STRING类型,服务端返回的是BOOLEAN
    给你贴段我的:
    这是服务端代码:
    public selectInfoBean selectInfoResult (String userName,String password,String idnName
    ,String requestTime,String idnPassword,Integer searchType
    ,String preDef,String preDefalut)
    {
    selectInfoBean info = new selectInfoBean();
    System.out.print("is ok");
    if("fly".equals(userName))
    {
    info.setAdmcityzh(userName);
    info.setAdmcountry(idnName);
    } return info;
    }
    客户端代码如下:
    public static void main(String[] args) {
    try {

    String targetEendPoint = "http://localhost:8080/axis/services/SelectInfoService";      

    Service services = new Service();
    Call call = null ;
    //创建Call实例,也是必须的!
    call = (Call) services.createCall();
    QName qn = new QName("urn:AnalyzeInfoBean", "InfoBean" );    
    call.registerTypeMapping(OrderBean.class, qn,    
       new org.apache.axis.encoding.ser.BeanSerializerFactory(selectInfoBean.class, qn),            
       new org.apache.axis.encoding.ser.BeanDeserializerFactory(selectInfoBean.class, qn));    
                
    call.setTargetEndpointAddress( new java.net.URL(targetEendPoint) );    
    call.setOperationName( new QName("SelectInfoService", "selectInfoResult") );    

    //返回String,传入参数字符串
    selectInfoBean result = (selectInfoBean) call.invoke(new Object[] { "fly","","dddd","","",1,"","" }); 
    System.out.println(result.getAdmcityzh());
    System.out.println("Success...");    
    System.out.println(result.getAdmcountry());   
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }这是打印结果:
    fly
    Success...
    dddd
      

  4.   

    我也是新手,才接触这个,现在在弄那个WEBSERVICE这个认证,也是云里雾里的,有事多交流。
      

  5.   

    你是用什么发布webservice 的?
    我上次用weblogic 8.1 发布webservice服务遇到了和你一样的错误
      

  6.   

    谢谢各位回帖学到很多,顺便回答7楼的问题,用的是Tomcat