您的位置:首页 > 编程语言 > Java开发

java调用webservice接口

2013-08-15 14:28 357 查看
首先是所需要的jar包:

dom4j.jar;
axis.jar;
axis-ant.jar;
commons-discovery-0.2.jar;
commons-logging-1.0.4.jar;
dom4j-1.5.2.jar;
jaxrpc.jar;
saaj.jar;
wsdl4j.jar;

记录两种常用方式:

方法一:AXIS调用远程的web service

url后加上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());

              }

       }

}

方法二:

使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。仍然以前面的global weather report为例。

首先   java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。

GlobalWeather.java  GlobalWeatherLocator.java  GlobalWeatherSoap.java  GlobalWeatherSoapStub.java

其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。

public class OneCardWebServiceManagerImpl implements OneCardWebManager {

    GlobalWeatherLocator locator = new GlobalWeatherLocator();

    private String USERNAME = "username";

    private String PASSWORD = "password";

    @SuppressWarnings("unchecked")

    public Map getOneCardSoution(String sno) {

        Map map = new HashMap();

        GlobalWeatherSoap service;

        try {

            service = locator.getTrjnSearchService();

            ((GlobalWeatherSoapStub) service).setUsername(USERNAME);

            ((GlobalWeatherSoapStub) service).setPassword(PASSWORD);

            service.方法名(参数);

           

        }catch (ServiceException e1) {

            // TODO Auto-generated catch block

            e1.printStackTrace();

        } catch (RemoteException e) {

            e.printStackTrace();

        } catch (NullPointerException e) {

      
4000
      e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }

ps:参考http://yang-min.iteye.com/blog/600172
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: