您的位置:首页 > 编程语言 > Java开发

JAVA中使用axis调用.net WebService

2011-05-03 16:33 621 查看
网上虽然已经有很多关于java调用.net WebService的文章,但是一般都只有代码,没有一些关键说明,我一直为webservice中接收不到参数,现在弄明白了,写出来给需要的人分享下
第一步创建一个.net的WebService,比较简单就不多介绍了,贴出我的代码
namespace WebApplication1
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(true)]
 //下面这段代码标记为 A,后面说明
    [SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]//A
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
  //下面这行代码标记为 B
        [SoapRpcMethod(Use = SoapBindingUse.Literal, Action = "http://tempuri.org/HelloWorld", RequestNamespace = "http://tempuri.org/HelloWorld", ResponseNamespace = "http://tempuri.org/HelloWorld")]
        public string HelloWorld(string name,string password)
        {
            if (name != null && !name.Equals("") && password!=null && !password.Equals(""))
            {
                if (name.Equals("admin") && password.Equals("admin"))
                {
                    return "登录成功";
                }
                else
                {
                    return "用户名或密码错误";
                }
            }
            else
                return "没有接收到参数";
        }

        [WebMethod]
        [SoapRpcMethod(Use = SoapBindingUse.Literal, Action = "http://tempuri.org/HelloWorld2", RequestNamespace = "http://tempuri.org/HelloWorld2", ResponseNamespace = "http://tempuri.org/HelloWorld2")]
        public string HelloWorld2()
        {
            return "Hello World2";
        }
    }
}
我这里有个两个webservice方法,HelloWorld(name,password)和HelloWorld2
完成之后发布测试下,看能否访问到这个webservice

下面开始java代码
public static void main(String[] args) {
  try
  {
   System.out.println("请求开始");
   String url="http://localhost:2563/WebService1.asmx";//webService的url
   //String nameSpace="http://tempuri.org/HelloWorld";
   Service service = new Service();
   Call call = (Call) service.createCall();
   call.setTargetEndpointAddress(new java.net.URL(url));//设置URL参数
   call.setOperationName(new QName("http://tempuri.org/HelloWorld","HelloWorld"));//设置请求参数,里面是命名空间对象http://tempuri.org/HelloWord对应的是上面B代码中的RequestNamespace的值,HelloWorld为方法名称
   call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);//设置参数(里面的参数名称要跟webservice方法中的名字一样,我试了不一样会报错,有没高手指点下)
   call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);//设置参数
   call.setReturnType(XMLType.XSD_STRING);
   //下面两行代码是设置SOAPACTION的属性,我开始没有加A这行代码,setSOAPActionURI()要设置成B代码中Action的值才能访问,不设置程序会报错,但是WebService中接收不到参数值(有返回值)
   //加了A代码后这两行去掉也没关系了
   //call.setUseSOAPAction(true);
   //call.setSOAPActionURI(nameSpace);
   
   System.out.println("call:"+call);
         String ret = (String) call.invoke(new Object[] {"admin","admin"});
         System.out.println("返回结果:"+ret);
  }catch(Exception ex)
  {
   ex.printStackTrace();
  }
  
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息