java调用webservice与接口方法

摘要: 本文讲的是java调用webservice与接口方法, webservice的调用,常用的大约有3种方式:     1、使用axis调用     2、使用xfire调用     3、使用cxf调用     项目中,采用axis进行调用,记录如下,备忘:   

 

webservice的调用,常用的大约有3种方式:

    1、使用axis调用

    2、使用xfire调用

    3、使用cxf调用

    项目中,采用axis进行调用,记录如下,备忘:

    ps教程:想当年的时候是用的xfire方式调用的,结果没做记录,现在已经完全记不得怎么玩了。所以说要多写博客啊 t_t

   版本说明:

        aixs版本:axis-bin-1_4.zip

        java环境略

    第一步:确保wsdl文件可用,文中为获取到sendsmsservice.wsdl,当然url的也行。

    第二步:执行生成客户端代码的脚本。脚本内容为:

set axis_lib=d:axis-1_4lib

set java_cmd=java -djava.ext.dirs=%axis_lib%

set output_path=.

set package=info.jyzh.wap.liaoning.push

%java_cmd% org.apache.axis.wsdl.wsdl2java sendsmsservice.wsdl -o%output_path% -p%package% -t

 

#查看wsdl2java的使用帮助#%java_cmd% org.apache.axis.wsdl.wsdl2java -help

 

ok,至此,客户端代码就生成出来了。还带了一个单元测试哦。

 

实际工作中,碰到以下情况,客户端不能直接连上webservice服务器,中间被强大的代理服务器挡住了。如下图:

 

java调用webservice与接口方法_第1张图片

    为此,修改生成的代码,本次是在sendmmsserviceimplservicesoapbindingstub中作修改,如下: 

   static {

            axisproperties.setproperty("http.proxyhost","88.88.88.88");

            axisproperties.setproperty("http.proxyport","8080");

            axisproperties.setproperty("http.proxyuser","asp教程yy");

            axisproperties.setproperty("http.proxypassword","123456");

        _operations = new org.apache.axis.description.operationdesc[1];

        _initoperationdesc1();

    }

直接axis调用远程的web service

我觉得这种方法比较适合那些高手,他们能直接看懂xml格式的wsdl文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:

import java.util.date;

import java.text.dateformat;

import org.apache.axis.client.call;

import org.apache.axis.client.service;

import javax.xml.namespace.qname;

import java.lang.integer;

import javax.xml.rpc.parametermode;



public class caclient {

            

       public static void main(string[] args) {



              try {

                     string endpoint = "http://localhost:8080/ca3/services/casynrochnized?wsdl";

                     //直接引用远程的wsdl文件

                    //以下都是套路 
                     service service = new service();

                     call call = (call) service.createcall();

                     call.settargetendpointaddress(endpoint);

                     call.setoperationname("adduser");//wsdl里面描述的接口名称

                     call.addparameter("username", org.apache.axis.encoding.xmltype.xsd_date,

                                   javax.xml.rpc.parametermode.in);//接口的参数

                     call.setreturntype(org.apache.axis.encoding.xmltype.xsd_string);//设置返回类型 


                     string temp = "测试人员";

                     string result = (string)call.invoke(new object[]{temp});

                     //给方法传递参数,并且调用方法

                     system.out.println("result is "+result);

              }

              catch (exception e) {

                     system.err.println(e.tostring());

              }

       }

}

2,直接soap调用远程的webservice

这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来

import org.apache.soap.util.xml.*;

import org.apache.soap.*;

import org.apache.soap.rpc.*;



import java.io.*;

import java.net.*;

import java.util.vector;



public class caservice{

       public static string getservice(string user) {

       url url = null;

       try {

           url=new url("http://192.168.0.100:8080/ca3/services/casynrochnized");

       } catch (malformedurlexception mue) {

          return mue.getmessage();

         }

             // this is the main soap object

       call soapcall = new call();

       // use soap encoding

       soapcall.setencodingstyleuri(constants.ns_uri_soap_enc);

       // this is the remote object we're asking for the price

       soapcall.settargetobjecturi("urn:xmethods-casynrochnized");

       // this is the name of the method on the above object

       soapcall.setmethodname("getuser");

       // we need to send the isbn number as an input parameter to the method

       vector soapparams = new vector();



       // name, type, value, encoding style

       parameter isbnparam = new parameter("username", string.class, user, null);

       soapparams.addelement(isbnparam);

       soapcall.setparams(soapparams);

       try {

          // invoke the remote method on the object

          response soapresponse = soapcall.invoke(url,"");

          // check to see if there is an error, return "n/a"

          if (soapresponse.generatedfault()) {

              fault fault = soapresponse.getfault();

             string f = fault.getfaultstring();

             return f;

          } else {

             // read result

             parameter soapresult = soapresponse.getreturnvalue ();

             // get a string from the result

             return soapresult.getvalue().tostring();

          }

       } catch (soapexception se) {

          return se.getmessage();

       }

    }

}

3,使用wsdl2java把wsdl文件转成本地类,然后像本地类一样使用,即可。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string , 文件 , webservice , 接口 , new 代码 java调用接口方法、java反射调用接口方法、java调用接口的方法、java如何调用接口方法、java直接调用接口方法,以便于您获取更多的相关知识。

觉得辛苦就扫一扫: 

 

 

你可能感兴趣的:(WebService)