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();
}
}
第一步创建一个.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();
}
}
相关文章推荐
- JAVA使用axis调用.net WSDL的WebService
- java使用AXIS调用.net的webservice的小说明(webservice方法里含有对象)
- .net与java 使用自定义对象通过WebService调用
- 解决java用axis调用.NET写的webService中遇到的各种Exception
- java使用axis调用webservice接口
- java使用axis调用WebService简单示例
- Java_使用axis1.4调用WebService简单示例
- Java通过axis调用.NET WebService
- java使用axis调用webservice时出现Connection reset by peer: socket write error的一种解决方法
- java中使用axis发布和调用webService及dom4j解析xml字符串
- 基于JAVA中使用Axis发布/调用Webservice的方法详解
- java调用.net生成的WebService(axis调用)
- 使用java的xfire调用.net的webservice-王亮
- C# 调用JAVA(使用axis)开发的webservice 提示错误的问题
- 使用java的xfire调用.net的webservice-王亮
- Java调用使用SSL/HTTPS协议来传输的axis webservice服务
- Java调用使用SSL/HTTPS协议来传输的axis webservice服务
- 记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""
- Java使用Axis调用WebService
- java调用.NET的webservice实例的二种方法soap方式axis模式