luckystar +
send mail to luckystar sina weibo
关于订阅 luckystar's blog » Project »
分类:
标签:

对于有返回值的方法,使用RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。
invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;
第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。

如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。
在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值。
以上内容来自《Axis(Webservice)经典教程》。

举例:
调用有返回值的方法:
Service类;

public class MyService {
    public final Logger logger = Logger.getLogger(MyService.class);
    public String getGreeting(String name) {
        logger.debug("call getGreeting()...");
        return "您好 " + name;
    }
}

客户端调用:

try {
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            EndpointReference to = new EndpointReference("http://localhost:8080/axis2-ws/services/myService");
            options.setTo(to);
             
            // 调用getGreeting方法,返回值String
            QName qName = new QName("http://webservice.axis2.com","getGreeting");
            String value = (String) serviceClient.invokeBlocking(qName, new Object[]{"bill"}, new Class[]{String.class})[0];
            System.out.println("MyService.getGreeting-->" + value);
             
        } catch (AxisFault e) {
            e.printStackTrace();
        }
    }

没有返回值的方法调用: Service类:

public class MyService {
    public final Logger logger = Logger.getLogger(MyService.class);
    public void update(String data) {
        logger.debug("call update()...");
        System.out.println("<" + data + ">已经更新");
    }
}

客户端调用:

package com.axis2.webservice;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
 
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
 
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
 
public class MyServiceTest {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
         try {
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            EndpointReference to = new EndpointReference("http://localhost:8080/axis2-ws/services/myService");
            options.setTo(to);
             
            // 调用update方法,无返回值
            // 无返回值的调用应该使用invokeRobust
            qName = new QName("http://webservice.axis2.com", "update");
            serviceClient.invokeRobust(qName, new Object[]{"bill"});
            System.out.println("==========================================>");
             
        } catch (AxisFault e) {
            e.printStackTrace();
        }
    }
 
}
作者:qincidong
出处:http://qincidong.github.io/blog/2015/02/10/axis2-webservice-method-invocation.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
分类: 标签:
友荐云推荐