JWS-webservice 与Axis2-webservice的高速实现

在详细介绍这两种框架下的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的高速实现

时间: 2024-08-11 11:29:49

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

axis2 webservice在websphere上需要设置was共享库

由于websphere自带的JAR包与axis2包冲突,要解决这个冲突,必须设置共享库. 在websphere控制台,找到环境>>>共享库,设置一个Cell类型的共享库,共享库名称为axis2,库包为: axis2-adb-1.5.6.jar axis2-kernel-1.5.6.jar axis2-transport-http-1.5.6.jar axis2-transport-local-1.5.6.jar axis2-jaxws-1.5.6.jar commons-fileuplo

WebService引擎Axis2完美教程

http://wenku.baidu.com/link?url=O05r69TGaLmrJrjJqGz-5EASox8FhhUO6i97xoUOV2dcbh8BEnOlX2EN3nuYGE_3HEYOiYUaUTynMICWFP2iuOZBOeRtkmTnVU4w8B-Ko_C&qq-pf-to=pcqq.c2c WebService引擎Axis2完美教程

webservice的Axis2入门教程java版

本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring.JSON等技术.这些都将在后面的系列教程中讲解.在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java和C#调用这个WebService. 一.Axis2的下载和安装 读者可以从如下的网址下载Axis2的最新版本:

axis2 webservice入门知识(JS,Java,PHP调用实例源码)

背景简介 最近接触到一个银行接口的案子,临时需要用到axis2 webservice.自己现学现总结的一些东西,留给新手.少走弯路. Axis2简介 ①采用名为 AXIOM(AXIs Object Model)的新核心 XML 处理模型,利用新的XML解析器提供的灵活性按需构造对象模型. ②支持不同的消息交换模式.目前Axis2支持三种模式:In-Only.Robust-In和In-Out.In-Only消息交换模式只有SOAP请求,而不需要应答:Robust-In消息交换模式发送SOAP请求,

SOAP Webservice和RESTful Webservice

REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性.REST提出设计概念和准则为: 1.网络上的所有事物都可以被抽象为资源(resource)2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识3.所有的操作都是无状态的 REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建,获取,更新和删除就可以完成相关的操作和处理.您可以通过

Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice

浅谈SOAP Webservice和RESTful Webservice REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性.REST提出设计概念和准则为: 1.网络上的所有事物都可以被抽象为资源(resource) 2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识 3.所有的操作都是无状态的 REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网络资源

开发基于CXF的 RESTful WebService web 项目 webservice发布

配置步骤 开发基于CXF的 RESTful WebService 1.创建Web项目并导入CXF的jar 2.在Web.xml中配置 CXFServlet <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-

axis2 webservice 调用的三种方式

[java] view plaincopy package testClick.src.test; import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; impo

webservice的axis2客户端调用方式和xfire调用方式

1.axis2调用方式: package com.shine.fund; 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.RPCServiceClien

axis2 WebService的发布与调用

1:准备:    JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html eclipse:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR2/eclipse-jee-juno-SR2-win32.zip tomcat:http://tomcat.