WebServices学习笔记(四)使用services.xml文件发布WebService

四、使用services.xml文件发布WebService

前面发布webservices所建立的java类都不能有包名,这里用配置文件services.xml搭建能有包名的webservice

首先创建MyService类,在service包下

package service;

import javax.jws.WebParam;

public class MyService {
	public String getGreeting(@WebParam(name="name")String name){
		return "Hello " + name;
	}
	public void update(@WebParam(name="data")String data)
    {
        System.out.println("<" + data + ">已经更新");
    }
}

然后建立services.xml

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

<!-- 一个service元素只能发布一个webservice,name表示这个webservice的名称, 比如用下面的URL可以获得这个
WebService的WSDL内容:http://localhost:8080/axis2/services/MyService?wsdl,name属性指的就是?wsdl前面的那个名称。
建议设置与类名同样的名字
-->
<service name = "MyService">
	<!-- 对当前webservice的描述 -->
	<description>
		WebService example
	</description>

	<!-- 设置webservice对应的类名,每个parameter有一个强制的属性(name)和一个可选的属性(locked),locked属性表示是否允许parameter的值被层次中的另一个子结点覆盖 -->
	<parameter name = "ServiceClass">
		service.MyService
	</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>

一些简单的东西看上面的注释,这里先说一下MEP——Message Exchange Pattern,消息交换模式,它定义了webservices提供方与请求方之间SOAP1.2消息的交换模式。

目前Axis2支持三种模式:In-Only、Robust In-Only和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答; Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。

SOAP支持的模式还有:In-Optional-Out、Out-Only、Robust Out-Only、Out-In、Out-Optional-In等

每个人也可以定义自己的MEP,但SOAP1.2规范要求分配给每个MEP一个唯一的URI以识别它。

像上面的In-Out MEP的URI是http://www.w3.org/2004/08/wsdl/in-out

In-Only MEP的URI是http://www.w3.org/2004/08/wsdl/in-only

使用这种方式发布WebService,必须打包成.aar文件,.aar文件实际上就是改变了扩展名的.jar文件。在现在建立了两个文件:MyService.java和services.xml。将MyService.java编译,生成MyService.class。

services.xml和MyService.class文件的位置如下:

D:\xampp\tomcat\webapps\ws\META-INF\services.xml

D:\xampp\tomcat\webapps\ws\service\MyService.class

在windows控制台中进入ws目录,并输入如下的命令生成.aar文件(实际上,.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice):

jar cvf ws.aar .(注意最后还有个".",表示将当前目录打包)

最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,启动Tomcat后,就可以调用这个WebService了。

如果想发布多个WebService,可以使用<serviceGroup>元素,如再建立一个MyService1类

package service
public class MyService1
{
    public String getName()
    {
        return "bill";
    }
}

services.xml如下:

<serviceGroup>
    <service name="myService">
        <description>
            Web Service例子
        </description>
        <parameter name="ServiceClass">
            service.MyService
        </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>
    <service name="myService1">
        <description>
            Web Service例子
       </description>
        <parameter name="ServiceClass">
            service.MyService1
        </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>
</serviceGroup>

WebServices学习笔记(四)使用services.xml文件发布WebService

时间: 2024-10-06 00:07:21

WebServices学习笔记(四)使用services.xml文件发布WebService的相关文章

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

android学习笔记36——使用原始XML文件

XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" encoding="utf-8"?> <books> <book publishDate="2016.05.05" price="88.6">android学习笔记</book> <book publishD

UI学习笔记---第十六天XML JSON解析

一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML数据格式的功能:数据交换 web服务  内容管理  用作配置文件 一对标签称为一个节点  节点可以包含节点   没有子节点叫叶子节点  只有一个根节点  节点可以相互嵌套 三.进行XML解析时使用到的SAX工具 SAX:Simple API for XML  基于事件驱动的解析方式,逐行解析数据.(

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

python学习笔记5:python读写文件

python学习笔记5:python读写文件 一.文件的打开模式 1.打开文件 1) f=open('D:\\a.txt','w') 第一个参数是文件的路径,如果只写文件的名字,默认是在当前执行目录下的文件:第二个参数是文件的打开模式 这种方式打开文件,在使用完了之后一定要记得,关闭文件: f.close() 2) with open('D:\\a.txt','w') as f 这种方式打开文件,文件在使用完后会自动关闭文件,不需要close  2. 文件的打开模式 总的来说,文件的打开模式有三

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20

Linux System Programming 学习笔记(四) 高级I/O

1. Scatter/Gather I/O a single system call  to  read or write data between single data stream and multiple buffers This type of I/O is so named because the data is scattered into or gathered from the given vector of buffers Scatter/Gather I/O 相比于 C标准