`

axis2服务发布与客户端代码示例

阅读更多
下面是客户端调用类的完整代码。执行了excuteTask方法。

服务端代码apache官方网站很详细完整。
如有web工程中用spring发布,只要在web-inf目录下建立services目录,下面建相应的仍webservice服务目录,目录下建META-INF目录,下面是services.xml.这个是
webservice的发布配置文件。
如:[img][/img]
--services.xml一般配置如下
<serviceGroup>
<service name="tesTaskExcuteService">
    <description>
      TES Service
    </description>
    <parameter name="ServiceClass" locked="false">stat2.common.task.tes.webservice.ITesTaskExcuteService</parameter>
    <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
    <parameter name="SpringBeanName" >tesTaskExcuteService</parameter>
<!--
   上面是与spring结合的配置。这是不与spring结合的配置
<parameter name="ServiceClass" locked="false">
stat2.common.task.tes.webservice.TesTaskExcuteServiceImpl
</parameter>
-->

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



在web.xml做相应配置
<servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>
            org.apache.axis2.transport.http.AxisServlet
        </servlet-class>
        <load-on-startup>4</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>




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 TestTaskExcuteServiceClient  {
protected String wsURL;
protected String namespaceURI;
protected long timeOut;//--超时时间,默认为30秒
protected Object invokeWs(String method, Object[] parm, Class[] returnTypes)
throws AxisFault {

RPCServiceClient serviceClient;
serviceClient = new RPCServiceClient();
//这三行代码一般不加也没问题。但大批量操作的时候不加有时好象会出问题,
//我这里就出现过,加上好象就没事了。
MessageContext msgContext = new MessageContext();
msgContext.setServiceContext(serviceClient.getServiceContext());
MessageContext.setCurrentMessageContext(msgContext);
Options options = new Options();
                            options.setTimeOutInMilliSeconds(this.timeOut);//不设则默认为30秒
options.setTo(new EndpointReference(wsURL));
options.setAction("urn:" + method);
serviceClient.setOptions(options);
//这里可以返回数组刚取数组,返回对象则取返回的第一个元素
return serviceClient.invokeBlocking(new QName(namespaceURI, method), parm, returnTypes)[0];
}

/**
* webservice客户端访问程序,不带返回值的方法调用
*
* @param method
* @param parm
* @throws AxisFault
*/
protected void invokeNoReturn(String method, Object[] parm) throws AxisFault {
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = new Options();
options.setTimeOutInMilliSeconds(this.timeOut);
options.setTo(new EndpointReference(address));
options.setAction("urn:" + method);
serviceClient.setOptions(options);
serviceClient.invokeRobust(new QName(namespaceURI, method), parm);
}

  
public static void main(String[] args) throws AxisFault {
TestTaskExcuteServiceClient TClient=new TestTaskExcuteServiceClient();
TClient.setWsURL("http://localhost:8080/webApp/services/tesTaskExcuteService");
TClient.setNamespaceURI("http://webservice.asyntask.common.stat2");
String methodName="excuteTask";
TClient.setTimeout(5000L);
Boolean result=(Boolean)TClient.invokeWs(methodName,new Object[]{new Long(123456)},new Class[] {boolean.class});
     System.out.println("result :"+result.toString());
}

public long getTimeOut() {
return timeOut;
}

public void setTimeOut(long timeOut) {
this.timeOut = timeOut;
}

public String getWsURL() {
return wsURL;
}

public void setWsURL(String wsURL) {
this.wsURL = wsURL;
}

public String getNamespaceURI() {
return namespaceURI;
}

public void setNamespaceURI(String namespaceURI) {
this.namespaceURI = namespaceURI;
}

}

服务端接口代码如下:
public interface ITesTaskExcuteService {
   public boolean excuteTask(Long taskId);


关于返回值类型的一些说明:
1.如果是jdk1.5 以下,则要注意int,float等类型问题。axis2在返回一个int型时会封装成Integer,所以需转换成 Integer型,在参数类型里则用int.class或Integer.class都一样,其他如float,boolean等相同。
2.如果要返回数组类型。jdk1.4也一样。刚返回值类型如new Class[] {int[].class});将返回一个int[]数组,但它只是返回值数组的第一个值,仍如这样取值:return serviceClient.invokeBlocking(new QName(namespaceURI, method), parm, returnTypes)[0];
如果要整个返回值是你要的数组,则应当刚返回值类型如new Class[] {int.class,int.class})刚可这般取值。
return serviceClient.invokeBlocking(new QName(namespaceURI, method), parm, returnTypes);这样更适合返回多个不同类型的结果组成的对象数组。
  • 大小: 29.8 KB
分享到:
评论

相关推荐

    基于Axis2的WS构建客户端示例

    标题"基于Axis2的WS构建客户端示例"意味着我们要学习如何使用Axis2来创建一个能够与Web服务交互的客户端应用程序。这通常涉及到以下几个步骤: 1. **理解Web服务**:首先,你需要了解Web服务的工作原理,包括WSDL...

    axis自动生成客户端代码

    ### Axis自动生成客户端代码 #### 知识点一:Axis简介与版本差异 - **Axis简介**:Apache Axis是一款开源的、基于Java的Web服务框架,支持SOAP协议,用于实现和部署Web服务。它提供了创建、发布以及调用Web服务的...

    axis2 webservice 实例(包括服务端代码及客户端代码)

    这个实例提供了服务端和服务端所需的所有组件,包括源代码、必要的库文件(jar包)以及客户端代码,使得初学者能够快速上手并运行示例。 描述中提到,项目包含了完整的代码和必需的jar包,这意味着用户无需额外下载...

    axis2发布示例

    在"MyWebservice"示例中,可以运行工程中的客户端代码,调用`main`方法,它将自动构造并发送请求,然后显示响应结果。 **Axis2的优势:** - **模块化架构**:Axis2采用模块化设计,允许用户按需加载功能,提高性能...

    axis根据服务端wsdl生成客户端工具

    6. **SOA_AxisClient**:这个文件可能是一个示例或教程,包含使用 Axis 生成客户端的步骤和代码示例。它可能包括如何解析 WSDL,如何调用服务,以及如何处理异常等方面的详细说明。 7. **最佳实践**:在实际应用中...

    基于axis2实现的webservice简单实现(客户端+服务端)。

    总的来说,这个压缩包提供了一个完整的基于Axis2的Web服务实现示例,包括服务端创建服务和客户端调用服务的所有必要组件。通过学习和理解这些文件,开发者可以更好地掌握如何在实际项目中利用Apache Axis2构建和使用...

    axis2学习资料Java示例代码.zip

    2. **客户端代码**:客户端代码通常包含一个或多个调用服务的方法,使用Axis2的Stub或ServiceClient类来建立与服务的连接并发送请求。它可能还包括了处理响应和异常的部分。 3. **依赖包axis2**:这个可能是一个...

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...

    axis2的webService服务器端和客户端开发项目

    - **WSDL第一**: 客户端通常基于服务的WSDL来生成客户端代码,轴心提供wsdl2java工具,可以将WSDL转换为Java客户端类。 - **调用服务**: 使用生成的客户端类,可以直接调用Web服务方法,轴心会处理底层的SOAP消息...

    Axis2Demo,最简单的Axis2的体现,客户端口

    "Axis2Demo"是一个典型的Axis2应用实例,涵盖了服务端aar打包、客户端代码生成、服务发布和调用等关键环节。理解并掌握这些知识点对于开发基于Axis2的Web服务至关重要,无论是对于服务提供者还是消费者,都能显著...

    axis2示例工程

    【压缩包子文件】"axis2client"可能包含客户端的相关代码和配置,用于调用由Axis2服务器端提供的Web服务。这可能包括了生成的Stub类、客户端的配置文件(如axis2.xml)、以及任何必要的客户端逻辑代码。客户端通常会...

    使用axis1生成stub客户端样例

    在`JavaTest`文件中,可能包含了生成的Stub客户端代码示例,以及如何使用这些Stub进行实际调用的代码。通过分析这些代码,你可以看到如何与Web服务进行交互的具体实现,例如设置请求参数、处理返回结果等。 总的来...

    Axis 服务端/客户端 样例

    这个资源包涵盖了 Axis 1.4 的完整二进制版本,以及与之相关的服务端和客户端代码,旨在帮助开发者理解和掌握如何使用Axis进行Web服务的开发。 首先,让我们深入了解一下Axis 1.4。Axis是Apache软件基金会开发的一...

    使用axis自动生成webservice客户端代码.pdf

    批处理文件执行后,AXIS 将会根据 WSDL 文件生成对应的客户端代码,包括服务接口、服务定位器和服务实现等类。 示例批处理文件内容: ```batch set Axis_Lib=E:\jar\axis\asixTool\axis-bin-1_4\axis-1_4\lib ...

    SpringBoot开发WebService之Axis示例

    Axis提供了从WSDL(Web服务描述语言)到Java代码的生成,以及从Java类到WSDL的逆向工程,使得开发Web服务变得简单。 要将SpringBoot与Axis结合,我们需要以下步骤: 1. **创建SpringBoot项目**:首先,我们需要一...

    axis发布webservice教程源代码

    【标题】"Axis发布Web服务教程源代码"指的是使用Apache Axis框架来创建并发布Web服务的教学资源,其中可能包含了详细的步骤、示例代码以及相关的配置文件。Apache Axis是开源的Java库,它允许开发者在Java平台上快速...

    使用axis自动生成webservice客户端代码.docx

    通过以上步骤,你就可以使用Axis工具自动生成与远程WebService相匹配的客户端代码,从而简化了与Web服务的交互过程。这种方法在Java客户端与不同系统间的互操作性方面具有很大的优势,特别是在需要快速集成现有Web...

    axis插件生成客户端

    总结,Axis插件是Web服务开发中的强大工具,它简化了客户端代码的生成,使得开发者能更专注于应用程序的核心功能,而不需要深入理解底层的Web服务通信机制。通过了解和熟练使用Axis,可以极大地提高开发效率,降低...

    webservice for axis客户端详尽代码

    本资源“webservice for axis客户端详尽代码”提供了一套完整的Axis客户端代码示例,对于学习和理解如何在Java应用中使用Axis来调用Web服务极具价值。 一、Web Service基础知识 Web服务通常通过SOAP(Simple ...

Global site tag (gtag.js) - Google Analytics