java调用net webservice_java调用.net的webservice
一.参考文献
二.概述
前面写了一篇博客eclipse+webservice 是在java环境下进行的。考虑到webservice的跨系统,跨语言,跨网络的特性,下面写了一个实例来测试其跨语言的的特性。
首先是用asp.net开发一个webservice,然后再java中创建客户端来调用这个service。
三.实例
(1)打开visual studio 2010,新建项目,如下图所示:
新建的项目结果如下图所示:
(2)在Service1.asmx.cs中添加服务方法,代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Services;
namespaceAspWebService1
{
///
/// Service1 的摘要说明
///
[WebService(Namespace ="http://erplab.sjtu.edu/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
publicclassService1 : System.Web.Services.WebService
{
[WebMethod]
publicstringHelloWorld()
{
return"Hello World";
}
[WebMethod]
publicstringsayHelloToPersonNew(String name)
{
if(name ==null)
{
name ="nobody";
}
return"hello,"+ name;
}
[WebMethod]
publicdoublecount(doublenumber,doubleprice,doublediscount)
{
returnnumber * price * discount;
}
[WebMethod]
publicfloatgetFloat(floatx)
{
returnx;
}
//加法
[WebMethod]
publicfloatplus(floatx,floaty)
{
returnx + y;
}
//减法
[WebMethod]
publicfloatminus(floatx,floaty)
{
returnx - y;
}
//乘法
[WebMethod]
publicfloatmultiply(floatx,floaty)
{
returnx * y;
}
//除法
[WebMethod]
publicfloatdivide(floatx,floaty)
{
if(y != 0)
{
returnx / y;
}
else
return-1;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace AspWebService1
{
///
/// Service1 的摘要说明
///
[WebService(Namespace = "http://erplab.sjtu.edu/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string sayHelloToPersonNew(String name)
{
if (name == null)
{
name = "nobody";
}
return "hello," + name;
}
[WebMethod]
public double count(double number, double price, double discount)
{
return number * price * discount;
}
[WebMethod]
public float getFloat(float x)
{
return x;
}
//加法
[WebMethod]
public float plus(float x, float y)
{
return x + y;
}
//减法
[WebMethod]
public float minus(float x, float y)
{
return x - y;
}
//乘法
[WebMethod]
public float multiply(float x, float y)
{
return x * y;
}
//除法
[WebMethod]
public float divide(float x, float y)
{
if (y != 0)
{
return x / y;
}
else
return -1;
}
}
}
(3)发布服务,按CTRL+F5运行项目,即可打开服务首页:http://localhost:5329/Service1.asmx,如下图所示:
上图中显示的就是我们在Service1.asmx.cs文件中定义的服务方法。点击“服务说明”可以查看webservice的wsdl文件。
(4)编写java客户端来测试webservice,java程序如下所示:
package edu.sjtu.erplab.aspwebservice;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
publicclassAspWebServiceTestClient1 {
publicstaticvoidmain(String[] args) throws Exception {
// 定义方法
String method ="HelloWorld";
String methodPlus ="plus";
String methodMinus ="minus";
String methodMultiply ="multiply";
String methodDivide ="divide";
String methodSayTo ="sayHelloToPersonNew";
// 定义服务
Service service =newService();
// 测试1:调用HelloWorld方法,方法没有参数
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(newjava.net.URL(
"http://localhost:5329/Service1.asmx"));
call.setUseSOAPAction(true);
// 第一种设置返回值类型为String的方法
call.setReturnType(XMLType.SOAP_STRING);
call.setOperationName(newQName("http://erplab.sjtu.edu/", method));
call.setSOAPActionURI("http://erplab.sjtu.edu/HelloWorld");
String retVal1 = (String) call.invoke(newObject[] {});
System.out.println(retVal1);
// 测试2: 调用sayHelloToPersonNew方法,方法有一个参数:name。sayHelloToPersonNew(String name)
Call call2 = (Call) service.createCall();
call2.setTargetEndpointAddress(newjava.net.URL(
"http://localhost:5329/Service1.asmx"));
call2.setUseSOAPAction(true);
call2.setReturnType(newQName("http://www.w3.org/2001/XMLSchema",
"string"));
// 第二种设置返回值类型为String的方法
call2.setOperationName(newQName("http://erplab.sjtu.edu/", methodSayTo));
call2.setSOAPActionURI("http://erplab.sjtu.edu/sayHelloToPersonNew");
call2.addParameter(newQName("http://erplab.sjtu.edu/","name"),// 这里的name对应参数名称
XMLType.XSD_STRING, ParameterMode.IN);
String retVal2 = (String) call2
.invoke(newObject[] {"asp webservice"});
System.out.println(retVal2);
// 测试3: 调用sgetFloat方法,方法有一个参数:x,为float类型
Call call3 = (Call) service.createCall();
call3.setTargetEndpointAddress(newjava.net.URL(
"http://localhost:5329/Service1.asmx"));
call3.setUseSOAPAction(true);
call3.setEncodingStyle(null);// 必须有,否为会系统报错。最关键的语句。决定生成xmlns的中soap的命名空间
// 第一种设置返回值类型为Float类型的方法
call3.setReturnType(org.apache.axis.encoding.XMLType.XSD_FLOAT);
call3.setOperationName(newQName("http://erplab.sjtu.edu/","getFloat"));
call3.setSOAPActionURI("http://erplab.sjtu.edu/getFloat");
call3.addParameter(newQName("http://erplab.sjtu.edu/","x"),// 这里的x对应参数名称
XMLType.XSD_FLOAT, ParameterMode.INOUT);
Float retVal3 = (Float) call3.invoke(newObject[] { 123 });
System.out.println(retVal3);
// 测试4: 调用plus方法,方法有两个参数:x,y。plus(float x, float y)
Call call4 = (Call) service.createCall();
call4.setTargetEndpointAddress(newjava.net.URL(
"http://localhost:5329/Service1.asmx"));
call4.setUseSOAPAction(true);
call4.setEncodingStyle(null);
// 第二种设置返回值类型为Float类型的方法
call4.setReturnType(newQName("http://www.w3.org/2001/XMLSchema",
"float"));
call4.setOperationName(newQName("http://erplab.sjtu.edu/", methodPlus));// 加法
call4.setSOAPActionURI("http://erplab.sjtu.edu/plus");
call4.addParameter(newQName("http://erplab.sjtu.edu/","x"),// 参数x
org.apache.axis.encoding.XMLType.XSD_FLOAT, ParameterMode.IN);
call4.addParameter(newQName("http://erplab.sjtu.edu/","y"),// 参数y
XMLType.XSD_FLOAT, ParameterMode.IN);
Float retVal4 = (Float) call4.invoke(newObject[] { 5, 6 });
System.out.println(retVal4);
}
}
package edu.sjtu.erplab.aspwebservice;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class AspWebServiceTestClient1 {
public static void main(String[] args) throws Exception {
// 定义方法
String method = "HelloWorld";
String methodPlus = "plus";
String methodMinus = "minus";
String methodMultiply = "multiply";
String methodDivide = "divide";
String methodSayTo = "sayHelloToPersonNew";
// 定义服务
Service service = new Service();
// 测试1:调用HelloWorld方法,方法没有参数
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(
"http://localhost:5329/Service1.asmx"));
call.setUseSOAPAction(true);
// 第一种设置返回值类型为String的方法
call.setReturnType(XMLType.SOAP_STRING);
call.setOperationName(new QName("http://erplab.sjtu.edu/", method));
call.setSOAPActionURI("http://erplab.sjtu.edu/HelloWorld");
String retVal1 = (String) call.invoke(new Object[] {});
System.out.println(retVal1);
// 测试2: 调用sayHelloToPersonNew方法,方法有一个参数:name。sayHelloToPersonNew(String name)
Call call2 = (Call) service.createCall();
call2.setTargetEndpointAddress(new java.net.URL(
"http://localhost:5329/Service1.asmx"));
call2.setUseSOAPAction(true);
call2.setReturnType(new QName("http://www.w3.org/2001/XMLSchema",
"string"));
// 第二种设置返回值类型为String的方法
call2.setOperationName(new QName("http://erplab.sjtu.edu/", methodSayTo));
call2.setSOAPActionURI("http://erplab.sjtu.edu/sayHelloToPersonNew");
call2.addParameter(new QName("http://erplab.sjtu.edu/", "name"),// 这里的name对应参数名称
XMLType.XSD_STRING, ParameterMode.IN);
String retVal2 = (String) call2
.invoke(new Object[] { "asp webservice" });
System.out.println(retVal2);
// 测试3: 调用sgetFloat方法,方法有一个参数:x,为float类型
Call call3 = (Call) service.createCall();
call3.setTargetEndpointAddress(new java.net.URL(
"http://localhost:5329/Service1.asmx"));
call3.setUseSOAPAction(true);
call3.setEncodingStyle(null);// 必须有,否为会系统报错。最关键的语句。决定生成xmlns的中soap的命名空间
// 第一种设置返回值类型为Float类型的方法
call3.setReturnType(org.apache.axis.encoding.XMLType.XSD_FLOAT);
call3.setOperationName(new QName("http://erplab.sjtu.edu/", "getFloat"));
call3.setSOAPActionURI("http://erplab.sjtu.edu/getFloat");
call3.addParameter(new QName("http://erplab.sjtu.edu/", "x"),// 这里的x对应参数名称
XMLType.XSD_FLOAT, ParameterMode.INOUT);
Float retVal3 = (Float) call3.invoke(new Object[] { 123 });
System.out.println(retVal3);
// 测试4: 调用plus方法,方法有两个参数:x,y。plus(float x, float y)
Call call4 = (Call) service.createCall();
call4.setTargetEndpointAddress(new java.net.URL(
"http://localhost:5329/Service1.asmx"));
call4.setUseSOAPAction(true);
call4.setEncodingStyle(null);
// 第二种设置返回值类型为Float类型的方法
call4.setReturnType(new QName("http://www.w3.org/2001/XMLSchema",
"float"));
call4.setOperationName(new QName("http://erplab.sjtu.edu/", methodPlus));// 加法
call4.setSOAPActionURI("http://erplab.sjtu.edu/plus");
call4.addParameter(new QName("http://erplab.sjtu.edu/", "x"),// 参数x
org.apache.axis.encoding.XMLType.XSD_FLOAT, ParameterMode.IN);
call4.addParameter(new QName("http://erplab.sjtu.edu/", "y"),// 参数y
XMLType.XSD_FLOAT, ParameterMode.IN);
Float retVal4 = (Float) call4.invoke(new Object[] { 5, 6 });
System.out.println(retVal4);
}
}
运行结果:
- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment supportisdisabled.
Hello World
hello,asp webservice
123.0
11.0
- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
Hello World
hello,asp webservice
123.0
11.0
注意点:
(a)我们发现如果参数是String类型的,那么可以不需要设置call的参数 call3.setEncodingStyle(null);但是如果传入参数为float类型,那么就必须加上这一条语句。
(b)设置返回值类型有两种方式:
一种是
call.setReturnType(XMLType.SOAP_STRING);
call.setReturnType(XMLType.SOAP_STRING);
另外一种是
call2.setReturnType(newQName("http://www.w3.org/2001/XMLSchema","string"));
call2.setReturnType(new QName("http://www.w3.org/2001/XMLSchema","string"));
这两种方法是等价的
java调用net webservice_java调用.net的webservice相关推荐
- java 读取webservice_java 调用webService的各种方法
一.利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务 1.首先建立一个Web services EndPoint: package Hello; import ...
- asp.net通过webservice调用java接口全过程_100-RPC、RMI、WebService、httpClient、跨域、集群部署...
1. RPC技术介绍_单体架构_SOA架构 (1) 什么是单体架构 一个归档包(例如 war 格式或者 Jar 格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.也称之为单体应用架构,这是一 ...
- java axis2 开发webservice_利用Axis2开发WebService(3)—用Java实现调用WebService的客户端程序 | 学步园...
WebService是为程序服务的,只在浏览器中访问WebService是没有意义的.因此,在本节使用Java实现了一个控制台程序来调用上一节发布的WebService.调用WebService的客户 ...
- c 调用java post方法_C#调用Java方法(详细实例)
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- 在php中调用java接口吗,php 调用 java 接口
php 需要开启 curl模块 /* * HTTP 请求函数封装 */ function http_request_cloudzone($url, $data){ //var_dump($url.&q ...
- webservice第一篇【介绍、Scoket、http调用、wsimport调用】
WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...
- axis1 c# 接口 调用_java axis 调用C# webService的例子
首次接触到WebService,要调用一个发送短信的WebService里方法sendMQ,不废话,自己留个备份,也给需要的朋友,代码如下: Service service = new Service ...
- java cxf 客户端调用_CXF客户端调用N种方式
方式一: 配置CXF环境变量,用wsdl2java工具自动产生代码.项目结构目录如下: 其中com.yq.webservice下面的所有的java类都是wsdl2java工具自动产生的. JaxWsP ...
- java字典写实例,基于JAVA的新华字典接口调用代码实例
基于JAVA的新华字典接口调用代码实例 接口描述:基于JA V A的新华字典接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java. ...
最新文章
- 预测|十张图带你了解2018年机器人行业趋势与前景
- c# 连续抓取页面内容
- VTK:彩色注释立方体用法实战
- log4j.properties log4j.xml 路径问题
- 《SolidWorks 2013中文版机械设计从入门到精通》一2.6 几何关系
- win10配置SSH连接Github
- 吴恩达机器学习(四)逻辑回归(二分类与多分类)
- 电脑录屏软件哪个好?高清流畅的录屏方法在这里!
- No serializer found for class
- 微信开门,给你简单极致的开门体验!
- 心理学入门必读好物,《亲密关系》精华版
- AHRS和INS的区别
- 腾讯网页登陆的加密机制
- 分享几款让你工作事半功倍的软件
- 用Python 制作身高预测系统
- LabVIEW通讯-TCP
- 2014 显卡天梯图
- 超硬核Java学习路线图+学习资源+实战项目汇总,看完以后不用再问我怎么学Java了!
- basler工业相机使用问题总结
- 解析MYSQL BINLOG二进制格式(10)--问题解答
热门文章
- i5四核八线程怎么样_同样四核八线程,Ryzen 3 3100和3300X区别大了!
- 下个软件包可能泄露信用卡信息,Python 包存储库 PyPI 又爆恶意代码,下载达 3 万次,你中招了吗?...
- Pandas 表格样式设置指南,看这一篇就够了!
- centos标准分区调整大小_去繁化简解决CentOS下调整home和根分区大小的方法
- python表单填写_Python3.4 splinter(模拟填写表单)使用方法
- 第68节:Java中的MYSQL运用从小白到大牛
- 入坑-DM导论-第一章绪论笔记
- 高德地图-轨迹回放(二)
- Filter高级开发
- topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)