三双 发表于 2014-7-7 15:19

Java访问webservice说明

因工作需要,最近需要通过Java调用webservice的方法拿数据.我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法.首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183
然后就是代码实现webservice方法的样子如下
view plaincopyhttps://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]<soap:Body>
[*]    <validate xmlns="http://abc.org/">
[*]      <a>string</ssoTokenId>
[*]      <b>string</appId>
[*]      <c>int</detail>
[*]    </validate>
[*]</soap:Body>


对应的Java实现方式如下

view plaincopyhttps://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]String url = "http://192.168.1.16/pdmservice/Service1.asmx";
[*]String xmlns = "http://abc.org/";
[*]Service service = new Service();
[*]Call call = (Call) service.createCall();
[*]call.setTargetEndpointAddress(url);//设置webservice路径
[*]call.setOperationName(new QName(xmlns,"validate"));//设置要调用的方法名
[*]call.addParameter(new QName(xmlns,"a"), javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
[*]call.addParameter(new QName(xmlns,"b"), javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
[*]call.addParameter(new QName(xmlns,"c"), javax.xml.rpc.encoding.XMLType.XSD_INT,javax.xml.rpc.ParameterMode.IN);//接口的参数
[*]call.setReturnType(javax.xml.rpc.encoding.XMLType.XSD_STRING);//设置返回类型为String类型   
[*]String result = (String)call.invoke(new Object[]{"val1","val2","2014"});//获得接口返回的值,这里注意的是,就算参数为int类型,传参时也应为字符串



说一下我遇到的问题我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了然后就是刚开始添加参数的时候是这么用的
view plaincopyhttps://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);

这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数
还有我刚开始传递int类型的值时是 view plaincopyhttps://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg



[*]new Object[]{"val1","val2",2014}


赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路.
页: [1]
查看完整版本: Java访问webservice说明