WebService使用AXIS调用接口方法

使用WebService调用接口,找了很多方法,终于可以用了

参考文章:java调用webservice随感

public static String getPhone(String mobileCode ,String userID) throws RemoteException, ServiceException{
		String endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";          
	    String res = null;   
	    // 查询电话号码的接口方法名   
	    String operationName = "getMobileCodeInfo";   
	    // 定义service对象  
	    Service service = new Service();   
	    // 创建一个call对象  
	    Call call = (Call) service.createCall();   
	    // 设置目标地址,即webservice路径   
	    call.setTargetEndpointAddress(endpoint);   
	    // 设置操作名称,即方法名称   http://WebXml.com.cn/
	    call.setOperationName(new QName("http://WebXml.com.cn/",operationName));   
	    // 设置方法参数   
	    call.addParameter( new QName("http://WebXml.com.cn/","mobileCode"),  
	    org.apache.axis.encoding.XMLType.XSD_STRING,   
	    javax.xml.rpc.ParameterMode.IN);   
	    call.addParameter( new QName("http://WebXml.com.cn/","userID"),  
	            org.apache.axis.encoding.XMLType.XSD_STRING,   
	            javax.xml.rpc.ParameterMode.IN);   
	    // 设置返回值类型   
	    //对于返回是字符串数组的返回类型只有这两种可行  
	      
	    //call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR);  
	    call.setReturnClass(java.lang.String.class);  
	      
	    call.setUseSOAPAction(true);   
	    call.setSOAPActionURI("http://WebXml.com.cn/"+"getMobileCodeInfo");  
	      
	    res=(String) call.invoke(new Object[]{mobileCode,userID});   
	      
	    // 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收  
	    //Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});   
	      
	    System.out.println(res);  
	    return res;  

	}

下边是自己搭建的简单的WebServices服务器和客户端

服务器

package com.band.server;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class PrintName {
	
	public static void main(String[] args) {
	    String address = "http://localhost:9001/service/PrintName?wsdl";
		Endpoint.publish(address, new PrintName());
		System.out.println("--发布成功--");
	}
	//随便定义的方法
	public String findUserInfoByName(String arg0){  
        
       System.out.println("---------conn----------");
       return arg0;
    }  
	
}

客户端

public static String print(String names){
		String result = null;
        try {
            String endpoint = "http://localhost:9001/service/PrintName?wsdl";
            
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            /**
            *注意这里,要设置Namespace
            */
           call.setOperationName(new QName("http://server.band.com/","findUserInfoByName"));//WSDL里面描述的接口名称
            call.addParameter("arg0", org.apache.axis.encoding.XMLType.XSD_STRING,ParameterMode.IN);//接口的参数
            //call.addParameter("userID", org.apache.axis.encoding.XMLType.XSD_STRING,ParameterMode.IN);//接口的参数
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
            
            call.setUseSOAPAction(true);
            call.setSOAPActionURI("http://server.band.com/findUserInfoByName");
            
            result = (String)call.invoke(new Object[]{names});
            //给方法传递参数,并且调用方法
            System.out.println("result is :"+result);
        }
        catch (Exception e) {
            System.err.println(e.toString());
        }
        return result;
	}


你可能感兴趣的:(JAVA)