现在 webservice 加 xml 技术已经逐渐成熟,但要真正要用起来还需时日!!
一、利用 jdk web 服务 api 实现,这里使用基于 SOAP message 的 Web 服务
1.首先建立一个 Web services EndPoint: package Hello;
import javax.jws.WebService; import javax.jws.WebMethod; import javax.xml.ws.Endpoint; @WebService public class Hello { @WebMethod public String hello(String name) { return "Hello, " + name + "\n"; } public static void main(String[] args) { // create and publish an endpoint Hello hello = new Hello(); Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello); } }
2.使用 apt 编译 Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成 jaws 目录
3.使用 java Hello.Hello 运行,然后将浏览器指向 http://localhost:8080/hello?wsdl 就会出现下列显示
4.使用 wsimport 生成客户端使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl这时,会在当前目录中生成如下文件:
5.客户端程序:
1class HelloClient{ 2public static void main(String args[]) { 3 HelloService service = new HelloService(); 4 Hello helloProxy = service.getHelloPort(); 5 String hello = helloProxy.hello("你好"); 6 System.out.println(hello); 7 } 8} 9
以上方法还稍显繁琐,还有更加简单的方法
二、使用 xfire,我这里使用的是 myeclipse 集成的 xfire 进行测试的利用 xfire 开发 WebService,可以有三种方法:
1 一种是从 javabean 中生成;
2 一种是从 wsdl 文件中生成;
3 还有一种是自己建立 webservice
步骤如下:
用 myeclipse 建立 webservice 工程,目录结构如下:
首先建立 webservice 接口,
代码如下:
1package com.myeclipse.wsExample; 2//Generated by MyEclipse3 4public interface IHelloWorldService { 5 6 public String example(String message); 7 8}
接着实现这个借口: 1package com.myeclipse.wsExample;
2//Generated by MyEclipse 3 4public class HelloWorldServiceImpl implements IHelloWorldService { 5 6 public String example(String message) { 7 return message; 8 } 9 10} 修改 service.xml 文件,加入以下代码: 1<service> 2 <name>HelloWorldService</name> 3 <serviceClass> 4 com.myeclipse.wsExample.IHelloWorldService 5 </serviceClass> 6 <implementationClass> 7 com.myeclipse.wsExample.HelloWorldServiceImpl 8 </implementationClass> 9 <style>wrapped</style> 10 <use>literal</use> 11 <scope>application</scope>
12 </service> 把整个项目部署到 tomcat 服务器中 ,打开浏览器,输入 http://localhost:8989/HelloWorld/
services/HelloWorldService?wsdl,可以看到如下:
然后再展开 HelloWorldService 后面的 wsdl 可以看到:客户端实现如下:
1package com.myeclipse.wsExample.client; 2 3import java.net.MalformedURLException; 4import java.net.URL; 5 6import org.codehaus.xfire.XFireFactory; 7import org.codehaus.xfire.client.Client; 8import org.codehaus.xfire.client.XFireProxyFactory; 9import org.codehaus.xfire.service.Service; 10import org.codehaus.xfire.service.binding.ObjectServiceFactory; 11 12import com.myeclipse.wsExample.IHelloWorldService; 13 14public class HelloWorldClient { 15public static void main(String[] args) throws MalformedURLException, Exception { 16// TODO Auto-generated method stub 17Service s=new ObjectServiceFactory().create(IHelloWorldService.class); 18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 19String url="http://localhost:8989/HelloWorld/services/HelloWorldService"; 20 21 try 22 { 23 24 IHelloWorldService hs=(IHelloWorldService) xf.create(s,url); 25 String st=hs.example("zhangjin"); 26 System.out.print(st); 27 } 28 catch(Exception e) 29 {30 e.printStackTrace(); 31 } 32 } 33 34} 35
这里再说点题外话,有时候我们知道一个 wsdl 地址,比如想用 java 客户端引用.net 做得 webservice,使
用 myeclipse 引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:
1public static void main(String[] args) throws MalformedURLException, Exception { 2 // TODO Auto-generated method stub 3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class); 4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 5 6 7//远程调用.net 开发的 webservice 8Client c=new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx? wsdl")); 9 Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"}); 10 11//调用.net 本机开发的 webservice 12Client c1=new Client(new URL("http://localhost/zj/Service.asmx?wsdl")); 13Object[] o1=c1.invoke("HelloWorld",new String[]{}); 14 15}
三、使用 axis1.4 调用 webservice 方法
前提条件:下载 axis1.4 包和 tomcat 服务器 ,并将 axis 文件夹复制到 tomcat 服务器的 webapp 文件夹中这里我就说一下最简单的方法:
首先建立一个任意的 java 类(例如:HelloWorld.java),复制到 axis 文件夹下,将其扩展名改为 jws,然后重新启动 tomcat,在浏览器中输入 http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个 wsdl 文件,其客户端调用方法如下:
1import javax.xml.rpc.Service;2import javax.xml.rpc.ServiceException; 3import javax.xml.rpc.ServiceFactory; 4 5import java.net.MalformedURLException; 6import java.net.URL; 7import java.rmi.RemoteException; 8 9import javax.xml.namespace.QName; 10 11public class TestHelloWorld { 12 13 14 public static void main(String[] args) throws MalformedURLException, ServiceException, Remo teException { 15 // TODO Auto-generated method stub 16 17 String wsdlUrl ="http://localhost:8989/axis/HelloWorld.jws?wsdl"; 18 String nameSpaceUri ="http://localhost:8989/axis/HelloWorld.jws"; 19 String serviceName = "HelloWorldService"; 20 String portName = "HelloWorld"; 21 22 ServiceFactory serviceFactory = ServiceFactory.newInstance(); 23 Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpace Uri, serviceName)); 24 HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpace Uri, portName),HelloWorldInterface.class); 25 System.out.println("return value is "+proxy.getName("john") ) ; 26 27 } 2829}
30 四、使用 axis2 开发 webservice(这里首先感谢李宁老师)
使用 axis2 需要先下载
axis2-1.4.1-bin.zip
axis2-1.4.1-war.zip
http://ws.apache.org/axis2/
同理,也需要将 axis2 复制到 webapp 目录中
在 axis2 中部署 webservice 有两种方法,
第一种是 pojo 方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名
第二种方式是利用 xml 发布 webservice,这种方法比较灵活,不需要限制类的声明
下面分别说明使用方法:
1.pojo 方式:在 Axis2 中不需要进行任何的配置,就可以直接将一个简单的 POJO 发布成 WebService。其中 PO
JO 中所有的 public 方法将被发布成 WebService 方法。先实现一个 pojo 类:
1public class HelloWorld{ 2 public String getName(String name) 3 { 4 return "你好 " + name; 5 } 6 public int add(int a,int b) 7 { 8 return a+b; 9 } 10} 11
由于这两个方法都是 public 类型,所以都会发布成 webservice。编译 HelloWorld 类后,将 HelloWorld.class
文件放到%tomcat%\webapps\axis2\WEB-INF\pojo 目录中(如果没有 pojo 目录,则建立该目录),然后打开浏
览器进行测试:
输入一下 url:
http://localhost:8080/axis2/services/listServices会列出所有 webservice
这是其中的两个 webservice 列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:
1package MZ.GetWebService; 2import javax.xml.namespace.QName; 3 4import org.apache.axis2.AxisFault; 5import org.apache.axis2.addressing.EndpointReference; 6import org.apache.axis2.client.Options; 7import org.apache.axis2.rpc.client.RPCServiceClient; 8 9 10public class GetWSByAxis2 { 11 private static String EndPointUrl; 12 private static String QUrl="http://ws.apache.org/axis2"; 13 private QName opAddEntry; 14 public String WSUrl; 15 public RPCServiceClient setOption() throws AxisFault 16 { 17 RPCServiceClient serviceClient = new RPCServiceClient(); 18 Options options = serviceClient.getOptions(); 19 EndpointReference targetEPR = new EndpointReference(WSUrl); 20 options.setTo(targetEPR); 21 return serviceClient; 22 } 23 24 public QName getQname(String Option){25 26 return new QName (QUrl,Option); 27 } 28 //返回 String 29 public String getStr(String Option) throws AxisFault 30 { 31 RPCServiceClient serviceClient =this.setOption(); 32 33 opAddEntry =this.getQname(Option); 34 35 String str = (String) serviceClient.invokeBlocking(opAddEntry, 36 new Object[]{}, new Class[]{String.class })[0]; 37 return str; 38 } 39// 返回一维 String 数组 40 public String[] getArray(String Option) throws AxisFault 41 { 42 RPCServiceClient serviceClient =this.setOption(); 43 44 opAddEntry =this.getQname(Option); 45 46 String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry, 47 new Object[]{}, new Class[]{String[].class })[0]; 48 return strArray; 49 } 50 //从 WebService 中返回一个对象的实例 51 public Object getObject(String Option,Object o) throws AxisFault 52 { 53 RPCServiceClient serviceClient =this.setOption(); 54 QName qname=this.getQname(Option);55 Object object = serviceClient.invokeBlocking(qname, new Object[]{},new Class[]{o.getCla ss()})[0]; 56 return object; 57 } 58 59/////////////////////////////////////////
读者可以自己封装数据类型,如 int,byte,float 等数据类型
60} 61 客户端调用方法: MZ.GetWebService.GetWSByAxis2 ws=new MZ.GetWebService.GetWSByAxis2(); ws.WSUrl="http://localhost:8989/axis2/services/HelloWorld"; HelloWorld hello= (HelloWorld)ws.getObject("getName", HelloWorld.class); System.out.println(hello.getName("zhangjin"));
【下载地址】
百度网盘链接:https://pan.baidu.com/s/1EEQz9Mr_HB-hxEoMWSfh9w
提取码:44bc
相关文章
使用-JFreeChart来创建基于web的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
FlashFXP绿色版网盘下载,附激活教程 1778
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1564
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 1623
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 1706
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 1822
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64