这几天用java开发一个webservice,搞死了。java果然很难侍候!

传说java搞webservice,有好几种途径(为什么不是一种?要搞这么多种,让人一听,头都大了。当然啦,生物多样性总是一种好事。正如我们不能只有普通话,不能只有汉字一样,多种方案,多样技术,会启迪人的思维)

1、XFire

eclipse默认提供的,我觉得最方便了。也用来做了一个HelloWorld,并且客户端调用测试通过。但当我添加引用了第三方的包之后,就不行了。可能是有冲突。

本来就是要对这个第三方的包进行封装和二次开发,不用怎么能行,只好放弃这个XFire。

2、Axis2

搞死了。

1)安装

首先要下载安装包和插件包。

所谓的安装包,只要作用是提供一个类似JAVA_HOME一样的AXIS2_HOME环境变量,好方便一些时候用得上,比如生成客户端代码。

插件包,用在eclipse上,方便创建和发布webservice。

其中这个插件包,版本要与eclipse对应。我的eclipse版本比较低,结果搞个1.6的放到eclipse的plugins,死活看不到效果。后来换成1.4可以了

那两个插件的安装方法,是ZIP文件解压,将里面的文件夹拷贝到eclipse的plugins下。如图:

有关安装的参考文章(这篇文章好像有误导,别尽信;网上其他一些教程,什么改名,添加link文件,应该是for linux的吧):

http://www.blogjava.net/tianchijiaozi/archive/2013/03/15/396452.html

2)发布

这里所谓的webservice,其实是建一个web project,就是一个网站了。然后再在其上建一个axis2 Service Archiver。具体方法:

右击该项目 - 新建 - 其他 - Axis2 Service Archiver,然后一路默认next,选好发布aar包的路径,最后得到一个aar包。

注意我们写的webservice必须正确无误,才可以一路next。我今天就遇到其中有个服务返回值为自定义类型,导致点击next无反应。自定义类型应该也可以的吧,可能要做一些什么配置,不过我现在还不知道。

另外,有关指定编译好的class文件所在文件夹,通常web service的话,应该在web-inf/…,如图



将这个aar包拷贝到tomcat下的 “\webapps\axis2\WEB-INF\services”,然后通过浏览器,输入类似 http://localhost:8080/axis2/services/HelloWorldService?wsdl这样的地址 测试是否部署成功

3)调用

仅仅用浏览器进行测试部署没有意义,webservice要调用成功才算。

我想用jsp来调用,但还没有成功。不过用java application成功了。

方法:

(1)生成客户端脚本

去AXIS2的解压目录下bin(%AXIS2_HOME%\bin)下执行下面语句

wsdl2java -uri http://localhost:8080/axis2/services/HelloWorldService?wsdl -p ws -s -o c:\temp

-p参数指定了生成的Java类的包名

-o参数指定了生成的一系列文件保存的根目录

在c:\temp\src\ws自动生成HelloWorldServiceStub.java

据说也可以通过插件方式:

IDE中选择New->other->Axis2 Code Generator来生成,但我总是报错。

(2)新建 java工程 Axis2Client

新建\Axis2Client\lib文件夹

将%AXIS2_HOME%\lib\ 下的jar包复制到\Axis2Client\lib,并加入工程引用中

将通过脚本生成的单一HelloWorldServiceStub.java文件 加入到src\ws下:建立一个“源文件夹”:src,然后在src下新建一个包ws,将HelloWorldServiceStub.java复制到这个包里。

(3)新建test.TestWs.java 主要代码如下:

package com.leftfist.test;

import java.rmi.RemoteException;
import ws.HelloWorldServiceStub; public class TestWs {
public static void main(String args[]) throws RemoteException
{
// 初始化Sub类
HelloWorldServiceStub stub = new HelloWorldServiceStub(); // 传递AxisServiceStub.ShowName对象,相关参数在这边赋值。
HelloWorldServiceStub.SayHello command = new HelloWorldServiceStub.SayHello();
command.setName("leftfist!!!");
// 取得返回值
String name = stub.sayHello(command).get_return();
System.out.println(name);
}
}

附:HelloWorldService代码:

public class HelloWorldService {
public String sayHello(String name) {
return "Hello," + name;
}
}

里面的代码初初一看,觉得很奇怪,我们哪有写ShowName这样的方法?但这就是java webservice的调用方式。真怪异。

然后鼠标右击这个test.TestWs.java,运行方式 - java 应用程序,可看到结果矣!

参考文章:

http://www.cnblogs.com/cx-zyq/p/3334236.html

4)aar依赖的包

利用插件发布aar的时候,如果一直狂按next,那么aar里面并没有我们要引用的一些包。这里估计有2种解决办法:

(1)利用插件发布的时候,界面好像有提示要引用哪些包,把要用的包选进去,应该可以,但我没有试

(2)看TOMCAT下的axis2,其实就是一个网站,跟我们做的其他站点一起并肩放在webapps/下。把我们webservice需要用到的包、classes拷贝到 axis2/web-inf下,也可以的。我就是用了这种方法

搞死了,靠。

版权声明:本文为博主原屙文章,喜欢你就担走。

java 开发webservice的更多相关文章

  1. C# 开发XML Web Service与Java开发WebService

    一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...

  2. 纯 Java 开发 WebService 调用测试工具(wsCaller.jar)

    注:本文来自hacpai.com:Tanken的<纯 Java 开发 WebService 调用测试工具(wsCaller.jar)>的文章 基于 Java 开发的 WebService ...

  3. Java开发WebService的几种方法--转载

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...

  4. java开发webservice的几种方式(转载)

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2方式 Axis是apache下一个开源的webservice开发 ...

  5. java开发webservice的几种方式

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...

  6. Java开发WebService(使用Java-WS)

    前言: 初学Java,因为工作需要,直接跳到开发WebService.以前用.NET开发过WebService,对比一下,Java的WebService开发部署难度高了不止一个档次.网上的教程各式各异 ...

  7. JAVA开发WEBSERVICE方式

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2方式 Axis是apache下一个开源的webservice开发 ...

  8. Java开发Webservice的组件

    参考:http://bbs.csdn.net/topics/390900831 转自:http://blog.csdn.net/dragoo1/article/details/50759222 htt ...

  9. java开发webservice

    第一部分:相关下载配置 1.开发环境   eclipse-jee-mars-2-win32-x86_64.zip  http://www.eclipse.org/downloads/index-pac ...

随机推荐

  1. Timer时钟(之一)

    using System.Timers; static void Main(string[] args) { ThreadingTimer(); DateTime a = DateTime.Now; ...

  2. JAVA基础——内存流

    掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...

  3. selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

  4. Javascript创建对象几种方法解析

    Javascript创建对象几种方法解析 Javascript面向对象编程一直是面试中的重点,将自己的理解整理如下,主要参考<Javascript高级程序设计 第三版>,欢迎批评指正. 通 ...

  5. 笔试算法题(39):Trie树(Trie Tree or Prefix Tree)

    议题:TRIE树 (Trie Tree or Prefix Tree): 分析: 又称字典树或者前缀树,一种用于快速检索的多叉树结构:英文字母的Trie树为26叉树,数字的Trie树为10叉树:All ...

  6. java IO流 内容整理

    在java中,对数据的输入和输出操作以流的方式进行.(注:对文件的操作用io.File类,但不能对文件中的内容进行操作) 一.IO流的分类: 按数据流的方向不同,可以分为输入流和输出流: 按处理数据的 ...

  7. Spring接收web请求参数的几种方式

    1 查询参数 请求格式:url?参数1=值1&参数2=值2...同时适用于GET和POST方式spring处理查询参数的方法又有几种写法: 方法一:方法参数名即为请求参数名 // 查询参数1 ...

  8. 零基础入门学习Python(14)--字符串:各种奇葩的内置方法

    前言 这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦.由于字 ...

  9. CentOS 7.4 源码编译安装 Redis

    一.CentOS 7.4  源码编译安装 Redis 1.下载源码并解压 wget http://download.redis.io/releases/redis-4.0.10.tar.gz tar ...

  10. buf.swap32()

    buf.swap32() 返回:{Buffer} 将 Buffer 解释执行为一个32位的无符号整数数组并以字节顺序交换到位.如果 Buffer 的长度不是32位的倍数,则抛出一个 RangeErro ...