1.參考文献:

2.实例1(主要看到[2])

2.1.系统功能:

开发一个计算器服务CalculateService,这个服务包括加(plus)、减(minus)、乘(multiply)、除(divide)的操作。

2.2.开发前准备:

安装Eclipse-jee;

下载最新版本号的Axis2,网址http://axis.apache.org/axis2/java/core/download.cgi ,选择Standard Binary Distribution的zip包,解压缩得到的文件夹名axis2-1.4.1,文件夹内的文件结构例如以下:

2.3.开发前配置:

在Eclipse的菜单条中,Window --> Preferences --> Web Service --> Axis2Perferences,在Axis2 runtime location中选择Axis2解压缩包的位置,设置好后,点"OK"即行。(如图)

2.4.开发Web Service:

(1)新建一个Java Project,命名为"WebServiceTest1"

(2)新建一个class,命名为"CalculateService",完整代码例如以下:

package edu.sjtu.webservice;

/**

* 计算器运算

* @author rongxinhua

*/

public class CalculateService {

//加法

public float plus(float x, float y) {

return x + y;

}

//减法

public float minus(float x, float y) {

return x - y;

}

//乘法

public float multiply(float x, float y) {

return x * y;

}

//除法

public float divide(float x, float y) {

if(y!=0)

{

return x / y;

}

else

return -1;

}

}(3)在"WebServiceTest1"项目上new --> other,找到"Web Services"以下的"Web Service";

(4)下一步(next),在出现的Web Services对象框,在Service implementation中点击"Browse",进入Browse Classes对象框,查找到我们刚才写的写的CalculateService类。(例如以下图)。点击"ok",则回到Web Service话框。

(5)在Web Service对话框中,将Web Service type中的滑块,调到"start service“的位置,将Client type中的滑块调到"Test client"的位置。

(6)在Web Service type滑块图的右边有个"Configuration",点击它以下的选项,进入Service Deployment Configuration对象框,在这里选择对应的Server(我这里用Tomcat6.0)和Web Service runtime(选择Apache Axis2),例如以下图:

(7)点OK后,则返回到Web Service对话框,同理,Client type中的滑块右边也有"Configuration",也要进行对应的置,步骤同上。完毕后,Next --> next即行。进入到Axis2 Web Service Java Bean Configuration,我们选择Generate a default services.xml,例如以下图所看到的:

(8)到了Server startup对话框,有个按键"start server"(例如以下图),点击它,则可启动Tomcat服务器了。

(9)等启完后,点击"next -- > next",一切默认即行,最后,点击完毕。最后,出现例如以下界面:(Web Service Explorer),我们在这里便可測试我们的Web服务。(使用浏览器打开的话使用例如以下地址:http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp?org.eclipse.wst.ws.explorer=3)。例如以下图所看到的:

注:在浏览器中打开Web Service Explorer(有时候在eclipse中关闭了webservice explorer,能够用这样的方法打开)

首先登录地址:http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp。然后在网页右上角选择Web Service Exoplorer标签。然后输入WSDL地址:http://localhost:8080/WebServiceTest1/services/CalculateService?wsdl 。这个wsdl地址就是我们刚才公布服务的那个wsdl。点击go,例如以下图所看到的:

然后就能够看到例如以下界面了:

(10)測试比較简单,比如,我们选择一个"plus"的Operation(必须是CalculateServiceSoap11Binding),出现下图,在x的输入框中输入1,在y的输入框中输入2,点击"go",便会在status栏中显示结果3.0。其它方法的測试也类似。结果如上图所看到的。

2.5.CalculateServiceclient调用程序

前面我们已经定义好了加减乘除的方法并将这些方法公布为服务,那么如今要做的就是调用这些服务就可以。client调用程序例如以下代码所看到的:CalculateServiceTest.java

package edu.sjtu.webservice.test;

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.RPCServiceClient;

public class CalculateServiceTest {

/**

* @param args

* @throws AxisFault

*/

public static void main(String[] args) throws AxisFault {

// TODO Auto-generated method stub

// 使用RPC方式调用WebService

RPCServiceClient serviceClient = new RPCServiceClient();

Options options = serviceClient.getOptions();

// 指定调用WebService的URL

EndpointReference targetEPR = new EndpointReference(

"http://localhost:8080/WebServiceTest1/services/CalculateService");

options.setTo(targetEPR);

// 指定要调用的计算机器中的方法及WSDL文件的命名空间:edu.sjtu.webservice。

QName opAddEntry = new QName("http://webservice.sjtu.edu","plus");//加法

QName opAddEntryminus = new QName("http://webservice.sjtu.edu","minus");//减法

QName opAddEntrymultiply = new QName("http://webservice.sjtu.edu","multiply");//乘法

QName opAddEntrydivide = new QName("http://webservice.sjtu.edu","divide");//除法

// 指定plus方法的參数值为两个,各自是加数和被加数

Object[] opAddEntryArgs = new Object[] { 1,2 };

// 指定plus方法返回值的数据类型的Class对象

Class[] classes = new Class[] { float.class };

// 调用plus方法并输出该方法的返回值

System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]);

System.out.println(serviceClient.invokeBlocking(opAddEntryminus,opAddEntryArgs, classes)[0]);

System.out.println(serviceClient.invokeBlocking(opAddEntrymultiply,opAddEntryArgs, classes)[0]);

System.out.println(serviceClient.invokeBlocking(opAddEntrydivide,opAddEntryArgs, classes)[0]);

}

}执行结果:

3.0

-1.0

2.0

0.5

3.实例2.HelloService

(1)首先定义服务方法,代码例如以下所看到的:

package edu.sjtu.webservice;

public class HelloService {

public String sayHelloNew() {

return "hello";

}

public String sayHelloToPersonNew(String name) {

if (name == null) {

name = "nobody";

}

return "hello," + name;

}

public void updateData(String data) {

System.out.println(data + " 已更新。");

}

}(2)參考实例1将这种方法公布为服务。

(3)编写client代码调用WebService(主要參考[5])

本文样例与其它样例最大的不同就在这里,其它样例一般须要依据刚才的服务wsdl生成clientstub,然后通过stub来调用服务,这样的方式显得比較单一,client必须须要stub存根才可以訪问服务,非常不方面。本样例的client不採用stub方式,而是一种实现通用的调用方式,不须要不论什么client存根就可以訪问服务。仅仅须要指定对于的web servce地址、操作名、參数和函数返回类型就可以。代码例如以下所看到的:

HelloServiceTest2.java

package edu.sjtu.webservice.test;

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.RPCServiceClient;

public class HelloServiceTest2 {

private RPCServiceClient serviceClient;

private Options options;

private EndpointReference targetEPR;

public HelloServiceTest2(String endpoint) throws AxisFault {

serviceClient = new RPCServiceClient();

options = serviceClient.getOptions();

targetEPR = new EndpointReference(endpoint);

options.setTo(targetEPR);

}

public Object[] invokeOp(String targetNamespace, String opName,

Object[] opArgs, Class>[] opReturnType) throws AxisFault,

ClassNotFoundException {

// 设定操作的名称

QName opQName = new QName(targetNamespace, opName);

// 设定返回值

// Class>[] opReturn = new Class[] { opReturnType };

// 操作须要传入的參数已经在參数中给定,这里直接传入方法中调用

return serviceClient.invokeBlocking(opQName, opArgs, opReturnType);

}

/**

* @param args

* @throws AxisFault

* @throws ClassNotFoundException

*/

public static void main(String[] args) throws AxisFault,

ClassNotFoundException {

// TODO Auto-generated method stub

final String endPointReference = "http://localhost:8080/WebServiceTest1/services/HelloService";

final String targetNamespace = "http://webservice.sjtu.edu";

HelloServiceTest2 client = new HelloServiceTest2(endPointReference);

String opName = "sayHelloToPersonNew";

Object[] opArgs = new Object[] { "My Friends" };

Class>[] opReturnType = new Class[] { String[].class };

Object[] response = client.invokeOp(targetNamespace, opName, opArgs,

opReturnType);

System.out.println(((String[]) response[0])[0]);

}

}执行该程序,点击Run As->Java application,能够看到控制台端口的输出是:Hello, My Friends,表明客户端调用成功。该样例最大的不同和优势表如今客户端的调用方式,或者说是发起服务调用的方式,尽管比起客户端stub存根的方式,代码稍多,可是这样的方式统一,不须要生产stub存根代码,攻克了客户端有非常多类的问题。假设读者对这些代码进一步封装,我想调用方式非常easy,仅仅须要传递相关參数,这更好地说明了服务调用的优势。并且这样的方式更加简单明了,一看便知详细含义。而不须要弄得stub类的一些机制。

(4)改写client调用服务的代码

(3)中提到的client应用代码写的稍微有些繁杂,以下将上面的client调用service程序进行改写,简洁了很多。代码例如以下:

HelloServiceTest.java

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.RPCServiceClient;

public class HelloServiceTest {

public static void main(String args[]) throws AxisFault {

// 使用RPC方式调用WebService

RPCServiceClient serviceClient = new RPCServiceClient();

Options options = serviceClient.getOptions();

// 指定调用WebService的URL

EndpointReference targetEPR = new EndpointReference("http://localhost:8080/WebServiceTest1/services/HelloService");

options.setTo(targetEPR);

// 指定要调用的sayHelloToPerson方法及WSDL文件的命名空间

QName opAddEntry = new QName("http://webservice.sjtu.edu","sayHelloToPersonNew");

// 指定sayHelloToPerson方法的參数值

Object[] opAddEntryArgs = new Object[] { "xuwei" };

// 指定sayHelloToPerson方法返回值的数据类型的Class对象

Class[] classes = new Class[] { String.class };

// 调用sayHelloToPerson方法并输出该方法的返回值

System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]);

}

}

eclipse java开发实例_eclipse+webservice开发实例相关推荐

  1. java使用axis2调用webservice接口实例

    说明:我目前的项目环境是struts2+spring+mybatis+oracle,以下代码是java使用axis2调用webservice接口实例. import javax.xml.namespa ...

  2. java调用第三方的webservice应用实例

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...

  3. eclipse java 模板下载_Eclipse Java注释模板

    这是Eclipse Java注释模板下载,Eclipse Java 注释模板,设置后可以使用快捷键快速生成文档注释,版本信息等. 软件介绍 Eclipse Java注释模板是在一个项目的完整的生命周期 ...

  4. eclipse java swt_Eclipse下搭建SWT开发环境

    0.序言 还是老风格,从头写些基本的东西,帮助自己,也帮助正处于困惑中的别人.今天介绍的是Eclipse下的SWT的配置过程.自己前两天要做个项目,配置了半天都不正确,后来慢慢总结了一下,不同环境配置 ...

  5. eclipse java混淆打包_eclipse proguard怎么混淆jar包

    展开全部 android应用程序的混淆打包32313133353236313431303231363533e59b9ee7ad9431333339663933 1 . 在工程文件project.pro ...

  6. eclipse java启动参数_Eclipse启动参数设置

    -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 这里有几个问题: 1. 各个参数的含义什么? 2. 为什么有的机器我将- ...

  7. eclipse java 64下载_Eclipse最新版下载_Eclipse 64位官方正式版下载4.8.0 - 系统之家

    Eclipse 是一个开放源代码的,基于 Java 的可扩展开发平台,软件专注于为高度集成的工具开发提供一个全功能的.具有商业品质的工业平台,可以通过安装不同的插件实现对其它计算机语言编辑开发,如C+ ...

  8. eclipse java ee 配置_eclipse配置javaee环境

    笔者开发javaee项目时惯用myeclipse,但由于个人笔记本性能较低,myeclipse对内存的消耗极大,所以考虑换成eclipse开发.本文介绍eclipse配置javaee开发环境的一些体会 ...

  9. eclipse java不能编译_eclipse里.java可以编译但不能运行??

    我学过一点之前java,一直是在UE里写然后在cmd里运行,除了有点麻烦之外完全没问题.前几天开始做一个比较正式的project,于是装了个eclipse.新建工程后写了个HelloWorld.jav ...

最新文章

  1. 实例变量的访问及数据封装
  2. mysql报196271错误_微软补丁造成MYSQL及Windows经常连接失败解决方法
  3. python使曲线变得平滑_如何在Python中平滑数据?
  4. CentOS 7添加开机启动服务脚本
  5. 视频转为flv和图片
  6. asp实训报告摘要_个人网站实训报告---asp.NET 动态网站设计
  7. 2能不用cuda_又有2款限定皮肤返场,不用花钱就能直接兑换!天美良心?
  8. react+wabpack 搭建
  9. IO流(八)之InputStreamReader类与OutputStreamWriter类
  10. C# 使用RabbitMQ(二)安装
  11. Mac下载工具哪个好?迅雷 for Mac是个不错的选择!
  12. CAD的.net开发
  13. Android App 安全登录认证解决方案
  14. 【AIOT】手表调研
  15. Linux和Windows中下载FFmpeg
  16. 使用Flying Saucer生成pdf
  17. mv150us无线网卡驱动linux,水星MW150US的正确驱动方式 适用于笔记本无线网卡驱动无解的情况...
  18. 葡,西两国发展史(大航海时代)启示
  19. 如何使用git在gitee建立仓库并上传开源文件以及会遇到的问题
  20. 西游记中孙悟空大闹天宫时玉帝为什么不亲自出手?

热门文章

  1. Python 求解斐波那切(三种方法)
  2. numpy 常用api(四)
  3. mysql 随机记录 newid()_sql随机查询数据语句(NewID(),Rnd,Rand(),random())
  4. python是什么 自学-自学python需要什么基础,要掌握哪些知识?
  5. python怎样画立体图-Python学习(一) —— matplotlib绘制三维轨迹图
  6. 自学python书籍怎么选-学习Python可以看书籍学习吗?老男孩Python入门课程
  7. python人门指南小说-致Python初学者 Anaconda入门使用指南完整版
  8. 一种语音识别模型的训练方法及装置与流程
  9. Web API-DOM事件高级
  10. Vue3.0 + Ts 项目使用element-plus 自动按需导入 使用v-loading报错