java调用webservice接口

来源:互联网 发布:苹果手机视频导入mac 编辑:程序博客网 时间:2024/05/17 06:07

首先是所需要的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) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

ps:参考http://yang-min.iteye.com/blog/600172

原创粉丝点击