在java中如何使用axis2调用webservice接口,具体操作展示

BSO 2020-09-02 15:23:18 java常见问答 7316

上次已经为大家介绍过在java中怎么用xfire调用webservice接口,今天继续为大家介绍一下在java中如何使用axis2调用webservice接口,同样地,也是通过具体操作为大家展示。

首先,在axis2中部署webservice有两种方法:

1.是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名;

2.是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明。

下面分别说明使用方法:

⑴、pojo方式:在Axis2中不需要进行任何的配置,直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。先实现一个pojo类,代码如下:

public class HelloWorld
{
    public String getName(String name)
    {
        return "你好 " + name;
    }
    public int add(int a, int b)
    {
        return a + b;
    }
}

在客户端进行测试,首先可以写一个封装类,减少编码,代码如下:

package MZ.GetWebService;
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 GetWSByAxis2
{
    private static String EndPointUrl;
    private static String QUrl = "http://ws.apache.org/axis2";
    private QName opAddEntry;
    public String WSUrl;
    public RPCServiceClient setOption() throws AxisFault
    {
        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();
        EndpointReference targetEPR = new EndpointReference(WSUrl);
        options.setTo(targetEPR);
        return serviceClient;
    }
    public QName getQname(String Option)
    {
        return new QName(QUrl, Option);
    }
    //返回String
    public String getStr(String Option) throws AxisFault
    {
        RPCServiceClient serviceClient = this.setOption();
        opAddEntry = this.getQname(Option);
        String str = (String) serviceClient.invokeBlocking(opAddEntry
            , new Object[]
            {}, new Class[]
            {
                String.class
            })[0];
        return str;
    }
    // 返回一维String数组
    public String[] getArray(String Option) throws AxisFault
    {
        RPCServiceClient serviceClient = this.setOption();
        opAddEntry = this.getQname(Option);
        String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry
            , new Object[]
            {}, new Class[]
            {
                String[].class
            })[0];
        return strArray;
    }
    //从WebService中返回一个对象的实例
    public Object getObject(String Option, Object o) throws AxisFault
    {
        RPCServiceClient serviceClient = this.setOption();
        QName qname = this.getQname(Option);
        Object object = serviceClient.invokeBlocking(qname, new Object[]
        {}, new Class[]
        {
            o.getClass()
        })[0];
        return object;
    }
    /////////////////////////////////////////       读者可以自己封装数据类型,如int,byte,float等数据类型
}

客户端调用方法:

MZ.GetWebService.GetWSByAxis2 ws = new MZ.GetWebService.GetWSByAxis2();
ws.WSUrl = "http://localhost:8989/axis2/services/HelloWorld";
HelloWorld hello = (HelloWorld) ws.getObject("getName", HelloWorld.class);
System.out.println(hello.getName("zhangjin"));

⑵、使用service.xml发布webservice,它和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:

<service name="HelloWorld">
    <description>
        HelloWorld webservice
    </description>
    <parameter name="ServiceClass">
        service.HelloWorld
    </parameter>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
    </messageReceivers>
</service>

其中元素用于发布Web Service,一个元素只能发布一个WebService类,name属性表示WebService名, 另外,还有直接可以在其中制定webservice操作方法,可以这样写service.xml文件,代码如下:

<service name="HelloWorld">
    <description>
        HelloWorld service
    </description>
    <parameter name="ServiceClass">
        service.HelloWorld
    </parameter>
    <operation name="getName">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
    <operation name="add">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
</service>

以上就是有关在java中如何使用axis2调用webservice接口,并且通过具体的操作为大家展示出来。想要了解更多java程序代码例子以及常见问题,敬请关注奇Q工具网。

推荐阅读:

java继承(extends)实例分享

在java中实现webservice服务的方法,具体操作图解

java实现封装实例分享