Webservice:

  1、Xml:

  2、WSDL:

    Web service描述语言(WSDL)就是这样一个基于XML标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数、参数和返回值。WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。

  3、soap simple object access protoacl (简单对象访问协议) :

    限定了xml的格式
      soap 在http(因为有请求体,所以必须是post请求)的基础上传输xml数据
      请求和响应的xml 的格式如: <Envelop><body>//....</body></Envelop>
    operation name:服务提供的方法
    静态方法不能发布为外部服务
    运用jkd自带的代码生成访问服务器的客户端代码 E:/wsimort -s . http://test.cm/?wsdl
    我们可以把webservice看做是web服务器上的一个应用,web服务器是webservice的一个容器
    函数的参数在 http://test.cm/?xsd=1
    JAX-WS是指 java api for xml -WebService
    //测试 WebService服务的 explorer
    Web Service Explorer 可以显示返回的xml格式
    targetNamespace 默认为倒置的包名

一、借助axis2发布wenService服务的一种简单实现 

  第一步:首先要下载开发所需要的jar包
    下载:axis2-1.6.2-war.zip:  http://www.apache.org/dist//axis/axis2/java/core/1.6.2/
    下载完后将axis2.war放至tomcat安装目录下的webapps文件夹下,然后启动tomcat后,在webapps目录下会生成axis2文件夹。
    访问http://localhost:8080/axis2/能看到Apache的webservice页面表示axis2运行成功。

  第二步:拷贝axis2必要文件到webproject中  

    将tomcate发布axis2 -> WEB_INF 下的conf、modules和services 拷贝到当前项目(webProject)的WEB-INF下,并且把axis2 -> WEB-INF -> lib 下的jar拷贝到当前项目lib下;

    

  第三步:配置service.xml

    在当前项目services/webservice/META-INF(没有该路径需要新建)下新建services.xml,配置对应的类格式如下:

    

 <?xml version="1.0" encoding="UTF-8"?>

       <serviceGroup>

         <service name="income" targetNamespace="http://tempuri.org/">

           <schema schemaNamespace="http://tempuri.org/"/>

           <description>axis2 webservice接口</description>
          <parameter name="ServiceClass">tempuri.org.IncomeJC</parameter>
          <operation name="incomeAdd">
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"               class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
          </operation>
        </service>              <service name="incomeData" targetNamespace="http://tempuri.org/">
        <schema schemaNamespace="http://tempuri.org/"/>
        <description> WebServices提供到账数据查询接口</description>
        <parameter name="ServiceClass"> tempuri.org.IncomeDataJC</parameter>
        <operation name="incomeList">
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
        </operation>
       </service>     </serviceGroup>
    

1、发布多个接口:services.xml修改为
<serviceGroup>
<service name= "xxx" targetNamespace="http://tempuri.org/" >
<schema schemaNamespace ="http://tempuri.org/"/>
<description > WebServices接口1</description >
<parameter name ="ServiceClass">tempuri.org.xxx</parameter >
<operation name ="function">
<messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out"
class= "org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation >
</service>
<service name= "yyy" targetNamespace="http://tempuri.org/" >
...
</service>
</serviceGroup>
2、接口方法消息接收形式(具体限定某方法)
1):有接收值没有返回值
<operation name = "function1">
<messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-only"
class= "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation >
2):既有接收值也有返回值
<operation name = "function2">
<messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out"
class= "org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation >

  第三步:创建类

    新建包tempuri.org,在tempuri.org下新建类IncomeJC。
    代码如下:    

    

package tempuri.org;
      public class IncomeJC {
        public String incomeAdd(String xml) {
        String success = "0";
        try {
          ProjectIncomePub incomePub = readProjectIncome(xml);//读取xml数据
          if (null != incomePub) {
            success = new ProjectIncomeAction().incomeByJC(incomePub);//进一步处理
          }
        } catch (Exception e) {
          //e.printStackTrace();
          System.out.println("到账接口异常");
          return success;
        }
        return success;
      }

  第四步:修改web.xml配置

    在WEB-INF目录下修改web.xml文件,内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <!--Axis2 config start-->
        <servlet>
          <servlet-name>AxisServlet</servlet-name>
          <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class >
          <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
          <servlet-name>AxisServlet</servlet-name>
          <url-pattern>/services/*</url-pattern>
        </servlet-mapping>
        <!--Axis2 end-->
      </web-app>

  第五步:启动tomcat后访问:http://127.0.0.1:8080/webProject/services/income?wsdl能看到服务信息了。 
   到此Axis2的WebService服务已成功发布
 
二、axis2 客户端调用

  新建一个客户端的程序中使用:

 /***调用网络服务axis调用webservice**/
    this.incomeService();
    /***********************************/
    import javax.xml.namespace.QName;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;
    private void incomeService() {
      String xmlStr = "xmlData";//xml格式的参数数据拼成的字符串
      String url = "http://127.0.0.1:8080/webProject/services/systemDDLService";
      String method="incomeJC";
      String webObject = null;
      try {
        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();
        EndpointReference targetEPR = new EndpointReference(url);
        options.setTo(targetEPR);
        /** 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值,method指定方法名 */
        QName opAddEntry = new QName("http://org.tempuri",method);
        /** 参数,如果有多个,继续往后面增加即可,不用指定参数的名称*/
        Object[] opAddEntryArgs = new Object[] {xmlStr};
        // 返回参数类型,这个和axis1有点区别
        /**invokeBlocking方法有三个参数, 其中第一个参数的类型是QName对象,表示要调用的方法名;第二个参数表示要调用的WebService方法的参数值,参数类型为Object[]; 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。 */
        /**注意: 当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}
          如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,
          该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同
        */
        Class[] classes = new Class[] { String.class };
        webObject = (String)serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0];
        System.out.println(webObject);
      }catch (Exception e) {
        e.printStackTrace();
        long end = System.currentTimeMillis();
      }
    }

Java借助axis2发布WebService的更多相关文章

  1. Java通过Axis2发布WebService

    参考文档: http://blog.csdn.net/ghsau/article/details/12714965 http://www.iteye.com/topic/1135747 http:// ...

  2. WebService学习之旅(七)Axis2发布WebService的几种方式

    前面几篇文章中简单的介绍了如何使用Axis2发布WebService及如何使用Axis2实现Web服务的客户端调用,本节將详细介绍Axis2发布WebService的几种方式. 一.使用aar包方式发 ...

  3. 使用JDK和axis2发布webservice

    最近使用webservice进行远程调用一直很火,自从JDK1.6版本发布后,发布一个webservice项目变得更加简单了 笔者由于工作的需要针对JDK和axis2如何发布webservice做过相 ...

  4. 用AXIS2发布WebService的方法

    Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用. 第一步:首先要下载开发所需要的jar包 下载:axis2-1.6.1-war.zip http://www.apa ...

  5. tomcat 用AXIS2发布WebService 网站的方法

    Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用. Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法. 第一步:首先要下载开发所需要的 ...

  6. Eclipse中Axis2发布WebService

    介绍:Axis是apache下一个开源的webservice开发组件. l  开发工具下载: 1.  eclipse的Java EE版本.下载地址:http://www.eclipse.org/dow ...

  7. Rhythmk 一步一步学 JAVA (18) Axis2 创建 WebService

    一 > 环境配置 1.下载Axis2: 目前版本为 1.6.2 下载地址: http://axis.apache.org/axis2/java/core/ 下载 axis2-1.6.2-bin. ...

  8. 微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)

    0.主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问.步骤如下: 1.服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名.因此前期的服务器端工作需 ...

  9. spring与axis2整合发布webservice

    最近在研究整合spring框架和axis2发布webservice服务,由于本人也才学java不久,为了便于以后的查看,在这里记录下发布过程. 所需的工具包,spring.jar和axis2链接地址为 ...

随机推荐

  1. 算法:KMP算法

    算法:KMP排序 算法分析 KMP算法是一种快速的模式匹配算法.KMP是三位大师:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,所以取首字母组成KMP. 少部分图片来自孤~影 ...

  2. matlab基础教程——根据Andrew Ng的machine learning整理

    matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...

  3. 深入seajs源码系列二

    模块类和状态类 参照上文的demo,我们结合源码分析在简单的API调用的背后,到底使用了什么技巧来实现各个模块的依赖加载以及模块API的导出. 首先定义了一个Module类,对应与一个模块 funct ...

  4. ZOJ Problem Set - 1331 Perfect Cubes 判断一个double是否为整数

    zju对时间要求比较高,这就要求我们不能简单地暴力求解(三个循环搞定),就要换个思路:因为在循环时,已知a,确定b,c,d,在外重两层循环中已经给定了b和c,我们就不用遍历d,我们可以利用d^3=a^ ...

  5. HTTP在.NET中的一些应用和解析

    谈到HTTP协议(超文本传输协议),HTTP协议是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在 ...

  6. XCode日常使用备忘录

    0. Introduction XCode是macOS上开发app不可缺少的开发者工具,不管是开发macOS上的应用,还是iOS上的应用,都离不开XCode环境.尽管其易用性广受诟病,但由于苹果app ...

  7. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)

    页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ①     配置php.ini ...

  8. HTML基本结构

    HTML简介 HyperText Markup Language:超文本标记语言 HyperText:超文本(文本 + 图片 + 视频 + 音频 + 链接) Markup Language:标记语言 ...

  9. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  10. SQL Server 2005 数据库 可疑状态

    KJDY数据库名称 ALTER DATABASE KJDY SET EMERGENCY ---修改数据库为 紧急模式 ALTER DATABASE KJDY SET SINGLE_USER ---单用 ...