在详细介绍这两种框架下的webservice之前,先跟大家交流一下SOA认识,也就是面向服务的体系结构。SOA所要解决的主要问题是在现有基础环境的前提下,通过对现有应用程序和基础结构进行又一次的组合以应对不断变化的业务需求。SOA凭借其松耦合的特性,使得企业能够依照模块化的方式来加入�新服务或更新现有服务,以解决新的业务须要,而其对外提供服务的主要方式之中的一个就是我们今天所要介绍的webservice。眼下来讲比較有名的webservice框架大致有四种JWS,Axis,XFire以及CXF。今天我们主要介绍前两种。

1.   JWS-WebService.JWS是java语言实现的一种webservice,用来开发和公布服务,它是一个轻量级的WS框架,实现起来也很的简单,以下通过一个小demo来看一下JWS是怎样实现的:

(1)  定义接口,并将接口公布成webservice:

package org.zttc.service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding; @WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface IMyService { @WebResult(name="addResult")
public int add(@WebParam(name="a")int a,@WebParam(name="b")int b); @WebResult(name="loginUser")
public User login(@WebParam(name="username")String username,@WebParam(name="password")String password);
}

(2).定义接口实现:

package org.zttc.service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService; @WebService(endpointInterface="org.zttc.service.IMyService")
public class MyServiceImpl implements IMyService { @Override
public int add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a + b));
return a+b;
} @Override
public User login(@WebParam(name = "username") String username,
@WebParam(name = "password") String password) {
System.out.println(username + " is logging");
User user = new User();
user.setId("1");
user.setUsername(username);
user.setPassword(password);
return user; }
}

(3).公布服务:

package org.zttc.service;

import javax.xml.ws.Endpoint;

public class MyServer {

	public static void main(String[] args){
String address = "http://localhost:8888/ns";
Endpoint.publish(address, new MyServiceImpl());
} }

(4).编写測试类代码:

package org.zttc.service;

import java.net.MalformedURLException;
import java.net.URL; import javax.xml.namespace.QName;
import javax.xml.ws.Service; public class TestClient { public static void main(String[] args){
try {
//创建訪问wsdl服务地址的url
URL url = new URL("http://localhost:8888/ns?wsdl");
//通过QName指明服务的和详细信息
QName sname= new QName("http://service.zttc.org/","MyServiceImplService");
//创建服务
Service service = Service.create(url,sname);
//实现接口
IMyService ms =service.getPort(IMyService.class);
System.out.println(ms.add(12, 33));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

通过上面的代码我们能够看出在调用webservice的同一时候我们仍然须要知道相应的java类(接口),但调用webservice的情况往往两发生在个不同系统之间的,事先无法获取相应的接口,这时我们因该如何解决问题呢?非常easy,我们能够通过jdk,使用导出命令,将wsdl中的接口描写叙述来生成这个接口以及实现类,然后将生成的接口和实现类应用在我们自己的java程序中就能够了,详细的生成命令是:
Wsimport -d E:/我的酷盘/我的project/java项目/webservice/01/ -keep -verbose http://localhost:6666/ns?wsdl .

2 .   基于Axis2框架的webservice。相对于JWS来说Axis2是一个重量级的webservice框架,准确说它是一个Web Services / SOAP / WSDL的引擎,它不但能制作和公布WebService,并且能够生成Java和其它语言版WebServiceclient和服务端代码。也正是因为Axis2做了很优秀的封装,使得我们在使用Axis2-WS的时候很的简单,以下通过一个小样例跟大家介绍一下Axis2的应用。

(1). 首先我们要做的是下载axis.war,并将这个war包公布到我们的tomcat的webapps下。启动tomcat,訪问:http://localhost:8080/axis2/,假设界面显演示样例如以下则说明公布成功:

(2).编写我们的java类。注意我们所建立的java类不要放在不论什么包中,直接放在src下就可以,代码例如以下:

public class MyService {
public String sayHello(String name,boolean isMan) {
if(isMan) {
return "Hello,Mr "+name+"! Welcome to Webservice";
} else {
return "Hello,Miss "+name+"! Welcome to Webservice";
}
}
}

(3).将我们建好的class类放到%tomcat%\webapps\axis2\WEB-INF\pojo目录下(假设没有该目录请新建一个并以pojo命名)。做完这一步之后启动tomcat,訪问http://localhost:8080/axis2/services/listServices,假设出现例如以下界面则说明公布成功:

(4).公布好之后我们就能够编写client尝试调用webservice,client代码例如以下:

package com.unimas.datacollection.webservices.client;

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import javax.xml.namespace.QName; public class Client { public static void main(String[] args) throws Exception {
// 使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference er = new EndpointReference(
"http://localhost:8080/axis2/services/MyService");
options.setTo(er); // 指定sayHello方法的參数值
Object[] opAddArgs = new Object[] { "张三", false }; // 指定sayHello方法返回值的数据类型的class对象
Class[] classs = new Class[] { String.class }; // 指定要调用的sayHello方法及wsdl文件的命名空间,第一个參数表示WSDL文件的命名空间
// 通过訪问http://localhost:8080/axis2/services/MyService?wsdl 就能够看见
// 元素的targetNamespace属性值
QName qname = new QName("http://ws.apache.org/axis2", "sayHello"); // 调用sayHello方法并输出该方法的返回值
// 这里有三个參数的意思:1,是QName对象,表示要调用的方法名;2,webservice的參数值,參数类型是Object[];3,返回值class对象,參数类型是Class[],
System.out.println(serviceClient.invokeBlocking(qname, opAddArgs,
classs)[0]); }
}

至此Axis2-WS公布完毕,运行client代码就可以在控制台输出调用结果。以上是对JWS和Axis2详细应用的简介,对照这两种应用能够发现使用JWS比較灵活,我们能够任意的添加�服务而不须要一次次的又一次部署,可是我们所要做的工作量是比較大的。而使用Axis2对于开发webservice来讲相当的简单,我们唯一须要做的就是开发一个普通的java类,然后放到tomcat的相应目录下就可以,能够说小有小的优点,大有大的优势。

JWS-webservice 与Axis2-webservice的高速实现的更多相关文章

  1. webservice的Axis2入门教程java版

    本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...

  2. WebService之Axis2(4):二进制文件传输

    在<WebService大讲堂之Axis2(2):复合类型数据的传递>中讲过,如果要传递二进制文件(如图像.音频文件等),可以使用byte[]作为数据类型进行传递,然后客户端使用RPC方式 ...

  3. Axis2 webservice 之使用java调用webservice

    在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...

  4. Axis2 webservice入门--写个简单的webservice

    上一篇介绍了webservice开发前的准备.下面开始写webservice.如果不了解axis2请看上一篇,如果是新手:建议一边看一边写代码,自己动手完成这个过程. 一.新建一个web项目 二.新建 ...

  5. Axis2 WebService(基于REST风格)

    http://www.lifeba.org/arch/java_axis2_webservice_rest.html Axis2除了提供传统的webservice方法外,还提供了对Rest的支持.Ax ...

  6. WebService之Axis2 (3):使用services.xml文件发布WebService

    用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中.这 ...

  7. WebService之Axis2(1):用POJO实现0配置的WebService

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  8. axis2 webservice jar包使用情况(转)

    原文地址:axis2 webservice jar包使用情况 今天使用axis2webservice,整理了下jar包,方便以后时候. axis2 webservice 服务端jar包: --> ...

  9. SOAP Webservice和RESTful Webservice

    http://blog.sina.com.cn/s/blog_493a845501012566.html REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的 ...

  10. Restful是什么,SOAP Webservice和RESTful Webservice

    首先,应该怀着这样一种心态来学习Restful——Restful你可以将其理解一种软件架构风格,并且诠释了Http协议的设计初衷,所以不要把他理解的那么神秘,Restful风格有好处,当然也是有坏处的 ...

随机推荐

  1. Php会员权限

    <?phpecho $uu=@array_sum(@$_POST['gr']);?><form action="" method="POST" ...

  2. C#Winform开发平台企业版V4.0功能表

    企业版V4.0 - 功能列表及模板窗体 C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framew ...

  3. HDU 5726 GCD (2016 Multi-University Training Contest 1)

      Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description Give y ...

  4. 通过阅读ASP.NET MVC5 框架解密 路由的一点心得

    路由: 1.在ASP.NET中路由不专属与ASP.NET MVC,因为路由(Route)是在system.web 命名空间下的,所以传统的WebForm也可以使用路由. 2.什么叫做路由 采用某种机制 ...

  5. Maven工程的Web调试

    1.添加Server,将Web工程和Tomcat关联起来: 1)Windows->Show views->Other-->Servers,将会在下方弹出Server的窗口,然后右键添 ...

  6. 安装linux系统后要做的事情

    基本安装0 http://www.kali.org.cn/thread-20517-1-1.html 基本安装1 http://defcon.cn/1618.html 基本安装2 http://www ...

  7. C语言 rand()函数的用法

    rand()(产生随机数) 相关函数 srand() 表头文件 #include<stdlib.h> 定义函数 int rand()(void) 函数说明 rand()会返回一随机数值,范 ...

  8. VC 项目支撑文件解释

    1.解决方案文件:   a.sln 解决方案.把项目中的所有元素或者多个项目整合到一个解决方案中去. b.suo 解决方案定制项.存储用户级别对解决方案的定制,比如打开状态,断点信息.   这两个文件 ...

  9. 树莓派(jessie)制作服务并开机启动

    /etc/init.d/xware #!/bin/sh ### BEGIN INIT INFO # Provides: svn_serve # Required-Start: $remote_fs # ...

  10. 解决VS2005 VS2008 vs2010断点无效-源代码与原始版本不同

    网上说的方法:(额~但是我就是不能用.但是也贴出来) 方法1.直接把整个文件格式化了一次,断点就可以用了Ctrl + A全选菜单:编辑-〉高级-〉设置选定内容的格式 (Ctrl+K, Ctrl+F)通 ...