- 浏览: 334961 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zqb666kkk:
有示例代码吗
WebService CXF学习(高级篇3):WS-Security -
zhujiangtaobl0505:
楼主有源码没?发下,我邮箱465971531@qq.com,我 ...
WebService CXF学习(高级篇2):CXF+Spring+Hibernate -
ssy341:
http://localhost:8080/jforum/in ...
JForum安装详解 -
songzht:
看了上面的代码,这两个类型是怎么定义的?private Bas ...
JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题) -
Getwaysun:
持久化类中使用boolean定义某个字段后,报Null val ...
null不能赋值给int类型,Integer可以。
由于没学习过.net,最近程序中需要调用.net的webservice接口得到一张图片。在网上找了好多资料选用的axis来实现调用。
首先看看.net实现Webmehod的两种方式,这两种方式java传参数的方式也有不同
1.rpc方式:
2.Document方式:
下面是java调用的代码
下面是接口描述文档
其中需要注意的是java在接受.net的webservice方法返回的是经过base64编码方式编码过的字符串,接收时需要将它转换为byte[]再生成图片。
还有一点我没搞明白的,也困扰我很久的就是.net的接口描述文档中的参数width和height是int类型,当我传入int类型时服务器会报错:Server was unable to read request。就是服务器无法读取请求。最后通过把这两个值转换为String类型传入解决问题,但原因还没搞清楚,希望那位是过来人的仁兄留言解释一下,不胜感激!
首先看看.net实现Webmehod的两种方式,这两种方式java传参数的方式也有不同
1.rpc方式:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; namespace WebService1 { [WebService(Namespace = "http://tempuri.org/")] public class Service1 : System.Web.Services.WebService { [WebMethod] [SoapRpcMethod(Action = "http://tempuri.org/hello", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")] public string hello(String s) { return "Hello,"+s; } } }
2.Document方式:
namespace WebService1 { [WebService(Namespace = "http://tempuri.org/")] public class Service1 : System.Web.Services.WebService { [WebMethod] public string hello(String s) { return "Hello,"+s; } } }
下面是java调用的代码
package com.ctitc.analysis.util; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.rmi.RemoteException; import java.util.Date; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import sun.misc.BASE64Decoder; import com.ctitc.analysis.pojo.GisChartInfo; /* * 调用.net的webservice方法获取gis生成的图片地址 * * */ public class GetWebService { public String getWebService(String imagePath,GisChartInfo gisChartInfo) { String picUrl = ""; try { // WebService URL String url = "http://192.168.5.92/JttMapService/Service.asmx"; String namespace = "http://www.fzkcy.com/"; String method = "WebChartNew"; //创建调用服务 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(url)); /*如果.net在提供Rpc服务时设置成[SoapRpcMethod(Action = "",.....则不需要再设置call.setUseSOAPAction和call.setSOAPActionURI*/
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://www.fzkcy.com/WebChartNew");
// 设置要调用的方法
call.setOperationName(new QName(namespace, method));
// 该方法需要的参数
call.addParameter(new QName(namespace,"layername"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"width"),XMLType.XSD_INT,ParameterMode.IN);
call.addParameter(new QName(namespace,"height"),XMLType.XSD_INT,ParameterMode.IN);
call.addParameter(new QName(namespace,"imageType"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"fieldnames"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"fieldvalues"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"rgbcolors"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"chartType"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(namespace,"size"),XMLType.XSD_STRING,ParameterMode.IN);
//以下传参数方式为 Rpc方式
// call.addParameter("layername",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("width",XMLType.XSD_INT,ParameterMode.IN);
// call.addParameter("height",XMLType.XSD_INT,ParameterMode.IN);
// call.addParameter("imageType",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("fieldnames",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("fieldvalues",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("rgbcolors",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("chartType",XMLType.XSD_STRING,ParameterMode.IN);
// call.addParameter("size",XMLType.XSD_STRING,ParameterMode.IN);
// 方法的返回值类型
call.setReturnType(XMLType.XSD_STRING);
//设置参数
String layername = gisChartInfo.getLayername();
int width = gisChartInfo.getWidth();
int height = gisChartInfo.getHeight();
String imageType = gisChartInfo.getImageType();
String fieldnames = gisChartInfo.getFieldnames();
String fieldvalues = gisChartInfo.getFieldvalues();
String rgbcolors = gisChartInfo.getRgbcolors();
String chartType = gisChartInfo.getChartType();
String size = gisChartInfo.getSize();
Object[] parameters = new Object[]{layername,width+"",height+"",imageType,fieldnames,fieldvalues,rgbcolors,chartType,size};
// 调用该方法
byte[] imageBytes ;
BASE64Decoder dec=new BASE64Decoder();
imageBytes = dec.decodeBuffer(call.invoke(parameters).toString());
System.out.println(imageBytes);
//在指定位置生成图片
Date date = new Date();
picUrl = imagePath+date.getTime()+"."+gisChartInfo.getImageType();
FileOutputStream out = new FileOutputStream(picUrl);
System.out.println(imageBytes.length);
out.write(imageBytes ,0,imageBytes.length);
out.flush();
out.close();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return picUrl;
}
public static void main(String args[]){
GisChartInfo gisChartInfo = new GisChartInfo();
gisChartInfo.setLayername("地市行政区划");
gisChartInfo.setWidth(800);
gisChartInfo.setHeight(800);
gisChartInfo.setImageType("JPG");
gisChartInfo.setFieldnames("行政区划代码,县道,乡道,村道,专用道路");
gisChartInfo.setFieldvalues("3501,1791.561,2327.151,4659.821,9.656;" +
"3502,493.664,665.151,405.498,0;" +
"3503,676.446,981.887,3266.88,3.095;" +
"3504,1846.326,6357.708,3388.415,0;" +
"3505,1966.458,6469.783,4600.375,1.461;" +
"3506,1692.84,3526.773,3656.503,0;" +
"3507,1541.45,6636.189,3572.128,99.667;" +
"3508,1797.244,6723.257,1750.648,296.853;" +
"3509,1725.352,1903.754,4550.091,58.943");
gisChartInfo.setRgbcolors("0,92,230;132,0,128;56,168,0;255,128,0");
gisChartInfo.setChartType("BAR");
gisChartInfo.setSize("30,10");
System.out.println(new GetWebService().getWebService("d:/GisPictures/", gisChartInfo));
}
}
下面是接口描述文档
POST /JttMapService/Service.asmx HTTP/1.1 Host: 192.168.5.92 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://www.fzkcy.com/WebChartNew" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <WebChartNew xmlns="http://www.fzkcy.com/"> <layername>string</layername> <width>int</width> <height>int</height> <imageType>string</imageType> <fieldnames>string</fieldnames> <fieldvalues>string</fieldvalues> <rgbcolors>string</rgbcolors> <chartType>string</chartType> <size>string</size> </WebChartNew> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <WebChartNewResponse xmlns="http://www.fzkcy.com/"> <WebChartNewResult>base64Binary</WebChartNewResult> </WebChartNewResponse> </soap:Body> </soap:Envelope>
其中需要注意的是java在接受.net的webservice方法返回的是经过base64编码方式编码过的字符串,接收时需要将它转换为byte[]再生成图片。
还有一点我没搞明白的,也困扰我很久的就是.net的接口描述文档中的参数width和height是int类型,当我传入int类型时服务器会报错:Server was unable to read request。就是服务器无法读取请求。最后通过把这两个值转换为String类型传入解决问题,但原因还没搞清楚,希望那位是过来人的仁兄留言解释一下,不胜感激!
发表评论
-
编程精华资源大汇总
2014-04-19 18:43 713http://www.iteye.com/magazines/ ... -
PLSQL中汉字显示乱码问题
2013-04-07 16:15 0遇到问题: PLSQL中汉字显示乱码,并且SQL语句中 ... -
svnserver配置文件详解
2013-02-26 15:43 1368svnserve是SVN自带的一个轻型服务器,客户端通过使 ... -
启动tomcat报StandardServer.await: create[8005]
2013-02-19 11:15 1115启动tomcat报StandardServer. ... -
sqlserver数据库异常排查方法
2013-01-17 16:06 1638数据库系统异常是DBA经常要面临的情景,一名有一定从业经验的 ... -
js读取excel
2012-09-26 17:26 2209项目需要用到将excel中的数据导入到页面的文本框中,但并不想 ... -
JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题)
2012-09-24 15:37 19671.导入需要的jar包(下载见附件) struts2-jfr ... -
sybase数据库夸平台恢复
2012-05-10 19:02 1917演示一次sybase ASE15.0.3跨平台备份恢复的过程。 ... -
sybase数据库恢复
2012-05-09 18:10 2727一、对tempdb的恢复 ... -
linux 压缩与解压 常用命令
2012-05-09 14:51 1571命令: tar 格式: tar 选项 文件目录列表 功能: ... -
linux远程上传文件及文件夹
2012-05-09 11:26 6551举例, 我要将本地文件夹/home/administrator ... -
liunx查看文件和文件夹大小
2012-05-09 11:23 1160当磁盘大小超过标准时 ... -
java里的split函数
2012-04-11 16:55 945今天要用到split函数,对浮点数进行分割为子字符串,然后将结 ... -
java使用FTP上传下载的例子
2012-03-06 10:40 1552package mview.ftp; import ... -
linux虚拟机添加空间
2011-07-22 18:06 10261 、首先关闭虚拟机(这里如果不关闭系统,就不能增加新的硬件设 ... -
解决WebLogic启动时BEA-171522异常(启动时报classcast exception)
2011-05-10 14:28 2434如下异常: <Jul 27, 20 ... -
Enterprise Manager 无法连接到数据库实例
2011-04-26 10:26 2082登陆https://localhost:1158/em 之后, ... -
weblogic10配置线程数
2011-03-30 14:38 2431下面给介绍一下简单的调优,也是跟weblogic81不同的地方 ... -
忘记Weblogic,如何修改密码(10.3.2.0测试通过)
2011-03-29 18:09 1807忘记了weblogic server的管理员密码,可以通过如下 ... -
使用eclipse统计项目代码行数
2011-03-22 10:06 3138在eclipse中, 打开File Search对话框, ...
相关推荐
java调用.net webservice时所需的jar包
封装了java调用.net的websevice接口,解决了soapaction报错和server not identified错误,使用soap1.1协议。
Java调用.NET的WebService接口实例,jar包删减到三个,干净清爽,里面包含注多注释和图解,搞了半天的家伙拿出来与大家分享,无任何BUG,修改里面的参数即可直接运行,对于这种好东西,花了半天时间10分不算高,重在...
java访问.net webservice 可获取与设置cookie
java调用.net的WebService[借鉴].pdf
java调用.net webservice
android 调用.net webservice
.net调用webservice接口例子.net调用webservice接口例子.net调用webservice接口例子.net调用webservice接口例子
最近开发要做一人用java 调.net webservice的,以上是我用axis1.4写的一个小例子,希望可以借鉴
Java调用.net写的webservice Java使用axis来调用.net写的asmx WebService,大体步骤如下。 Axis需要用到的包如下: 1. axis.jar 2. commons-discovery-0.2.jar 3. commons-logging-1.0.4.jar 4. jaxrpc.jar 5. wsdl4...
java采用axis调用.net写的WebService,WebService的参数有传人和传出,传出的参数为ref,java端ParameterMode.OUT,传人的为ParameterMode.IN,WebService返回值为String,java利用Map取传出参数,对Map进行遍历取得...
java和.net的webservice调用介绍,自己存的备份,别人未必看的懂。
公司代码库找到的源码,本人做j2me一直在用的例子
.net Post方式调用.net和java的webservice,用post方式提交xml请求
java axis 调用 .net webservice 短信收发 虽然分要多了些,但是代码注释的很详细,我相信是物有所值的。
当然可以调用任何 wsdl地址。只要是webservice 这里是比较流行的。 这里有2个测试地址。 (1):http://www.webservicex.com/stockquote.asmx<br>(2):...
实现了JAVA调用C#写的文本service 并且支持类的传输
java调用.net的webservice传字符串参数,axis方式和xfire方式的使用说明及相关jar包。
用户提供一个.net的webservice,本人在java框架中调用此webservice。
使用java调用.net接口的方法,虽说WSDL是跨平台的是符合国际标准的,但有时候确实存在着无法创建客户端的情况,以下3种方式必有一种能符合您的需求