java webservice的多种实现方法汇总
一、基于EJB容器管理webservice :
1.首先建立一个Web services EndPoint:
package cn.test.service.impl; import java.util.ArrayList;
import java.util.List; import javax.jws.WebMethod;
import javax.jws.WebService;
import cn.test.Person;
import cn.test.service.HelloWorld; @WebService
public class HelloWorldImpl implements HelloWorld { @WebMethod
public void say() {
System.out.println(" hello service"); } @WebMethod
public Person getPersonById( String id) {
System.out.println(" id = "+id);
return new Person("aaa", "123", 5);
} @WebMethod
public List<Person> getAll() {
List<Person> list = new ArrayList<Person>();
for (int i = 0; i < 5; i++) {
list.add(new Person("100"+i, "kk"+i, 12+i));
}
return list;
} @WebMethod
public String insert(Person p) {
System.out.println(p);
return p.getId()+"java";
} }
2. 进入src目录下使用 apt 编译 Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成 jaws目录。例如:D:\dianzi\Test\src>apt -d . cn/test/service/impl/HelloWorldImpl.java
3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示
4.使用wsimport 生成客户端
使用如下:D:\dianzi\Test\src>wsimport -p cn.client -keep http://localhost:8080/helloWorld?wsdl
这时,会在当前目录中生成如下文件:
5.客户端测试:
public class T {
public static void main(String[] args) {
HelloWorldImplService service = new HelloWorldImplService();
HelloWorldImpl helloWorld = (HelloWorldImpl) service.getHelloWorldImplPort();
System.out.println(helloWorld.getAll().size());
System.out.println(helloWorld.getPersonById(""));
}
}
6、不用生成代码,通过jboss服务器进行管理:
例如下面的类写好之后,发布到服务器上,通过地址 http://127.0.0.1/root/CompanyService?wsdl 就可以查看发布情况,其中“contextRoot”表示根目录,urlPattern表示匹配路径。
@Stateless
@WebService
@WebContext(contextRoot = "/root", urlPattern = "/CompanyService")
@SOAPBinding(style = SOAPBinding.Style.RPC,use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class CompanyWSBean implements CompanyWS {
Logger logger=Logger.getLogger(CompanyWSBean.class);
@EJB
private CompanyServiceLocal companyServiceLocal; @WebMethod
@WebResult(partName = "return")
public TBLCompany find(String id) {
try {
return companyServiceLocal.find(id);
} catch (Exception e) {
logger.error(e);
}
return null;
}
}
二、将第一种webservice移动到 WEB层,就是通过WEB容器模式管理:
1、准备pojo对像:接口和实现类
开发步骤如下:
建立一个POJO端点--在web.xml中--------将这个POJO端点配置成一个Servlet-----------将这个POJO端点打包成一个应用(war包或ear)
package cn.test.ws.web.intf; import com.cjonline.foundation.evisa.entity.TBLOperator; public interface HelloWorld {
public String say(String s); public String eat(String s); public TBLOperator findOperator();
}
package cn.test.ws.web.impl; import javax.jws.WebMethod;
import javax.jws.WebService; import cn.test.ws.web.intf.HelloWorld; import com.cjonline.comm.util.EJBAssistant;
import com.cjonline.foundation.evisa.entity.TBLOperator;
import com.cjonline.foundation.evisa.exception.ServiceException;
import com.cjonline.foundation.evisa.service.intf.OperatorServiceRemote; @WebService
public class HelloWorldImpl implements HelloWorld{ private OperatorServiceRemote userService = EJBAssistant.getEJB(
"OperatorServiceBean/remote", OperatorServiceRemote.class);
@WebMethod
public String say(String s) {
System.out.println(" web say : "+ s);
return " web say : "+s;
}
@WebMethod
public String eat(String s) {
System.out.println(" web eat : "+ s);
return " web eat : "+s; }
@WebMethod
public TBLOperator findOperator(){
try {
return userService.findAll1().get(0);
} catch (ServiceException e) {
e.printStackTrace();
}
return null;
}
}
2、在web.xml中将它配置成一个Servlet:
<servlet>
<servlet-name>HelloService</servlet-name>
<servlet-class>cn.test.ws.web.impl.HelloWorldImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloService</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3、进入到jbossws管理服务中,通过地址 http://lenovo-pc//hello?wsdl 可以查看发布的信息,就可以调用方法。
三、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的:
利用xfire开发WebService,可以有三种方法:
1一种是从javabean 中生成;
2 一种是从wsdl文件中生成;
3 还有一种是自己建立webservice
步骤如下:
用myeclipse建立webservice工程,目录结构如下:
首先建立webservice接口,代码如下:

2

3

4

5

6

7

8

接着实现这个借口:

2

3

4

5

6

7

8

9

10

修改service.xml 文件,加入以下代码:

2

3

4

5

6

7

8

9

10

11

12

把整个项目部署到tomcat服务器中 ,打开浏览器,输入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:
然后再展开HelloWorldService后面的wsdl可以看到:
客户端实现如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:

2

3

4

5

6

7

8

9

10

11

12

13

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文件,其客户端调用方法如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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。其中POJO中所有的public方法将被发布成WebService方法。先实现一个pojo类:

2

3

4

5

6

7

8

9

10

11

由于这两个方法都是public类型,所以都会发布成webservice。编译HelloWorld类后,将HelloWorld.class文件放到%tomcat%\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录),然后打开浏览器进行测试:
输入一下url:
http://localhost:8080/axis2/services/listServices
会列出所有webservice
这是其中的两个webservice列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

客户端调用方法:







2.使用service.xml发布webservice,这种方式和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:















其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebService的WSDL内容:
http://localhost:8080/axis2/services/myService?wsdl
除此之外,还有直接可以在其中制定webservice操作方法:可以这样些service.xml文件

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

如果要发布多个webservice,可以在文件两段加上<serviceGroup><service></service>...<service></service></serviceGroup>发布
java webservice的多种实现方法汇总的更多相关文章
- Java中File常用的方法汇总
创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false.mkdir() 在指定位置创建一个单级文件夹.mkdirs() 在指定位置创建 ...
- 【转】Java中File常用的方法汇总
创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false.mkdir() 在指定位置创建一个单级文件夹.mkdirs() 在指定位置创建 ...
- Java 获取指定日期的方法汇总
import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; impo ...
- OpenCV3 Java 机器学习使用方法汇总
原文链接:OpenCV3 Java 机器学习使用方法汇总 前言 按道理来说,C++版本的OpenCV训练的版本XML文件,在java中可以无缝使用.但要注意OpenCV本身的版本问题.从2.4 到3 ...
- Java实现时间动态显示方法汇总
这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 本文所述实例可以实现Java在界面上动态的显示时间.具体实现方法汇总如下: 1.方法一 用TimerTask: ...
- Java WebService 知识点汇总
java webservice 获取传入IP axis.jar servlet.jar MessageContext mMsgContext = MessageContext.getCurren ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 重学 Java 设计模式:实战工厂方法模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- Flex调用java webservice
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
随机推荐
- linux 系统 tar 的用法详解
[root@localhost xu]# tar --help 用法: tar [选项...] [FILE]... GNU ‘tar’ 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还 ...
- Mysql中的Prepared Statement与Stored Precedure学习
可以参考: http://stackoverflow.com/questions/196652/prepared-statement-vs-stored-procedure They are not ...
- iOS9 class dump header
获取系统私有API,网上有很多资料总结了一下就三种方式: 使用class-dump可以提取系统私有API列表 使用class-dump+DumpFrameworks.pl,这个可以一次性提取所有系统F ...
- SQL group by分组查询(转)
本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳 ...
- UVa 1593 (水题 STL) Alignment of Code
话说STL的I/O流用的还真不多,就着这道题熟练一下. 用了两个新函数: cout << std::setw(width[j]); 这个是设置输出宽度的,但是默认是在右侧补充空格 所 ...
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
在创建Storm的Topology时,我们通常使用如下代码:builder.setBolt("cpp", new CppBolt(), 3).setNumTasks(5).none ...
- 百度编辑器解决span被过滤, 自动加P标签
editor_all.js: 自动加P标签去除: enterTag: 'p', 改成: enterTag: '', span被过滤: //从编辑器出去的内容处理 me.addOutputR ...
- jquery ajax GET POST 跨域请求实现
同一段逻辑代码需要在多个网站中使用, 每个网站都新建一个ashx真是扯蛋的作法, 所以想只请求一处的ashx, 这样便于维护和修改, 那么,ajax跨域问题就来了. 废话少说, 直接上代码, 我现 ...
- 【英语】Bingo口语笔记(39) - Get系列
- MySQL内存表-临时表
HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引.但如果MySQL或者服务器重新启动,表中数据将会丢失.用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字 ...