java怎么写webservice_利用Java编写简单的WebService实例

使用Axis编写WebService比较简单,就我的理解,WebService的实现代码和编写Java代码其实没有什么区别,主要是将哪些Java类发布为WebService。下面是一个从编写测试例子到发布WebService,以及编写测试代码的过程介绍。

本例子的WebService提供了两个方法,分别是sayHello和sayHelloToPerson,第一个只是返回一个"Hello"字符串,没有参数,第二个函数接受一个字符串作为参数,返回"Hello 参数值",该例子比较简单,但是清楚的说明了从编写代码到发布为WebService以及测试编写好的WebService全过程。

编写服务代码

服务代码提供了两个函数,分别为sayHello和sayHelloToPerson,源代码如下:

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCode24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png/**//*1408c5260b2f05e450dee929db9be5f7.png * File name: HelloService.java

1408c5260b2f05e450dee929db9be5f7.png * 

1408c5260b2f05e450dee929db9be5f7.png * Version: v1.0

1408c5260b2f05e450dee929db9be5f7.png * 

1408c5260b2f05e450dee929db9be5f7.png * Created on Aug 2, 2008 9:40:20 AM

1408c5260b2f05e450dee929db9be5f7.png * 

1408c5260b2f05e450dee929db9be5f7.png * Designed by Stephen

1408c5260b2f05e450dee929db9be5f7.png * 

1408c5260b2f05e450dee929db9be5f7.png * (c)Copyright 2008

f466905a3bcb5dcef110eab799825254.png*/731655954c7be9d8835ece551b5385f8.pngpackagecom.sinosoft.webservice;

731655954c7be9d8835ece551b5385f8.png

24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png/** *//**1408c5260b2f05e450dee929db9be5f7.png *@authorStephen

1408c5260b2f05e450dee929db9be5f7.png * 

1408c5260b2f05e450dee929db9be5f7.png * Test web service

f466905a3bcb5dcef110eab799825254.png*/24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.pngpublicclassHelloService222530190136c9c4cfd237cc0d5cff99.png{

715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.png/** *//**1408c5260b2f05e450dee929db9be5f7.png     * 不带参数的函数

1408c5260b2f05e450dee929db9be5f7.png     * 

1408c5260b2f05e450dee929db9be5f7.png     *@return返回Hello字符串

5bcb1807ee3e00d2b3c225f0b3f5c751.png*/715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.pngpublicString sayHello()222530190136c9c4cfd237cc0d5cff99.png{

1408c5260b2f05e450dee929db9be5f7.pngreturn"Hello";

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }1408c5260b2f05e450dee929db9be5f7.png

715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.png/** *//**1408c5260b2f05e450dee929db9be5f7.png     * 带参数的函数

1408c5260b2f05e450dee929db9be5f7.png     * 

1408c5260b2f05e450dee929db9be5f7.png     *@paramname

1408c5260b2f05e450dee929db9be5f7.png     *            名称

1408c5260b2f05e450dee929db9be5f7.png     *@return返回加上名称的欢迎词

5bcb1807ee3e00d2b3c225f0b3f5c751.png*/715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.pngpublicString sayHelloToPerson(String name)222530190136c9c4cfd237cc0d5cff99.png{

715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.pngif(name==null||name.equals(""))222530190136c9c4cfd237cc0d5cff99.png{

1408c5260b2f05e450dee929db9be5f7.png            name="nobody";

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }1408c5260b2f05e450dee929db9be5f7.pngreturn"Hello"+name;

5bcb1807ee3e00d2b3c225f0b3f5c751.png    }f466905a3bcb5dcef110eab799825254.png}731655954c7be9d8835ece551b5385f8.png

发布WebService

要将上边写的HelloService类发布为WebService,需要先搭建Web应用。下面是在Tomcat下使用Axis创建WebService服务的例子。

在Tomcat下创建Web应用

在该例子中,在Tomcat下创建了一个context path为ws的WEB应用。

1. 在Tomcat的webapps下创建如下文件系统

ws

WEB-INF

lib

classes

2. 在WEB-INF文件夹下创建web.xml文件,该文件的内容如下:

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCode731655954c7be9d8835ece551b5385f8.png<?xml  version="1.0" encoding="ISO-8859-1"?>731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.pngweb-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web

731655954c7be9d8835ece551b5385f8.pngApplication 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngApache-Axis731655954c7be9d8835ece551b5385f8.png    

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngorg.apache.axis.transport.http.AxisHTTPSessionListener731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png    

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngAxisServlet731655954c7be9d8835ece551b5385f8.pngApache-Axis Servlet731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png        org.apache.axis.transport.http.AxisServlet

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngAdminServlet731655954c7be9d8835ece551b5385f8.pngAxis Admin Servlet731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png        org.apache.axis.transport.http.AdminServlet

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png100731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngSOAPMonitorService731655954c7be9d8835ece551b5385f8.pngSOAPMonitorService731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png        org.apache.axis.monitor.SOAPMonitorService

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngSOAPMonitorPort731655954c7be9d8835ece551b5385f8.png5001731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png100731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngAxisServlet731655954c7be9d8835ece551b5385f8.png/servlet/AxisServlet731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngAxisServlet731655954c7be9d8835ece551b5385f8.png*.jws731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngAxisServlet731655954c7be9d8835ece551b5385f8.png/services/*731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngSOAPMonitorService731655954c7be9d8835ece551b5385f8.png/SOAPMonitor731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png5731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngwsdl731655954c7be9d8835ece551b5385f8.pngtext/xml731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png  

731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngxsd731655954c7be9d8835ece551b5385f8.pngtext/xml731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.pngindex.jsp731655954c7be9d8835ece551b5385f8.pngindex.html731655954c7be9d8835ece551b5385f8.pngindex.jws731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

在上面的web.xml中主要是配置了axis的相关配置。

axis的相关配置

在上述的web.xml文件中已经对axis进行了配置,但是还需要进行额外的配置。

复制axis相关的jar文件

将axis的相关jar文件复制到WEB-INF\lib文件夹下。这些文件包括:

activation.jar

axis.jar

axis-ant.jar

axis-schema.jar

commons-discovery-0.2.jar

commons-logging-1.0.4.jar

jaxrpc.jar

log4j-1.2.8.jar

mailapi.jar

saaj.jar

wsdl4j-1.5.1.jar

xmlsec-1.3.0.jar

复制WebService服务主文件

将HelloService.java编译后的class文件复制到WEB-INF\classes文件夹下,也就是说在WEB-INF\classes文件夹下的文件夹结构为:com\sinosoft\webservice,在webservice文件夹下有一个helloservice.class文件。

测试发布的Web应用

启动Tomcat服务,打开IE浏览器,访问地址http:host:port/ws/services,如果看到如下界面就说明AXIS部署成功了。

832b92220d510c3111734410b0cf4efe.png

发布WebService

发布WebService需要使用现有的AdminService来实现,这里我写了一个批处理文件来发布WebService,以后如果需要发布其他文件,只需要修改相应的参数就可以了。

创建deploy.wsdd文件

文件deploy.wsdd内容如下所示:

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCode731655954c7be9d8835ece551b5385f8.png<?xml  version="1.0" encoding="UTF-8"?>731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

创建发布WebService服务的批处理文件

批处理文件deploywebservice.bat内容如下:

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCodejava -cp E:\Stephen\Lib\axislib\activation.jar;E:\Stephen\Lib\axislib\axis-ant.jar;E:\Stephen\Lib\axislib\axis-schema.jar;E:\Stephen\Lib\axislib\axis.jar;E:\Stephen\Lib\axislib\commons-discovery-0.2.jar;E:\Stephen\Lib\axislib\commons-logging-1.0.4.jar;E:\Stephen\Lib\axislib\jaxrpc.jar;E:\Stephen\Lib\axislib\log4j-1.2.8.jar;E:\Stephen\Lib\axislib\mailapi.jar;E:\Stephen\Lib\axislib\saaj.jar;E:\Stephen\Lib\axislib\wsdl4j-1.5.1.jar;E:\Stephen\Lib\axislib\xmlsec-1.3.0.jar org.apache.axis.client.AdminClient -lhttp://localhost:8090/ws/services/AdminService deploy.wsdd

其中E:\Stephen\Lib\axislib是存放axis对应的jar文件的文件夹,现在将所有的jar文件都加入到classpath中进行执行。

-l后的参数是本地要发布WebService的AdminService对应的访问地址。

最后deploy.wsdd是对应的配置文件名称。

发布WebService服务

将deploy.wsdd文件和deploywebservice.bat文件复制到同一个文件夹下,执行deploywebservice.bat批处理文件,就可以将deploy.wsdd中描述的Java类发布为WebService。发布完成之后在访问http://host:port/ws/services如下图所示:

2cb501c26194c0f19abfe030d9b0b7c1.png

从上图可以看出,发布成功后,多了一个HelloServices的服务。这样就说明HelloService发布成功了。

查看HelloServices的wsdl

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCode731655954c7be9d8835ece551b5385f8.png<?xml  version="1.0" encoding="UTF-8"?>731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png731655954c7be9d8835ece551b5385f8.png

用Java调用WebService实例

下面是用Java调用刚发布的WebService例子。

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCode/** File name: TestHelloService.java

*

* Version: v1.0

*

* Created on Aug 2, 2008 9:54:10 AM

*

* Designed by Stephen

*

* (c)Copyright 2008*/packagetest.com.sinosoft.webservice;importjava.io.IOException;importjava.net.MalformedURLException;importjavax.xml.namespace.QName;importjavax.xml.rpc.ServiceException;importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;/***@authorStephen

*

* 测试调用WebService*/publicclassTestHelloService {privatestaticfinalLog log=LogFactory.getLog(TestHelloService.class);privatestaticfinalString HELLO_SERVICE_ENDPOINT="http://localhost:8090/ws/services/HelloServices?wsdl";publicstaticvoidmain(String[] args) {

TestHelloService tester=newTestHelloService();//tester.callSayHello();tester.callSayHelloToPerson();

}publicvoidcallSayHello() {try{

Service service=newService();

Call call=(Call) service.createCall();

call.setTargetEndpointAddress(newjava.net.URL(

HELLO_SERVICE_ENDPOINT));

call.setOperationName(newQName("http://webservice.sinosoft.com/","sayHello"));

call.setReturnType(org.apache.axis.Constants.XSD_STRING);try{

String ret=(String) call.invoke(newObject[] {});

System.out.println("The return value is:"+ret);return;

}catch(IOException e) {

e.printStackTrace();

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(ServiceException e) {

e.printStackTrace();

}

log.error("call sayHello service error!");

}publicvoidcallSayHelloToPerson() {try{

Service service=newService();

Call call=(Call) service.createCall();

call.setTargetEndpointAddress(newjava.net.URL(

HELLO_SERVICE_ENDPOINT));

call.setOperationName(newQName("http://webservice.sinosoft.com/","sayHelloToPerson"));

call.addParameter("name", org.apache.axis.Constants.XSD_STRING,

javax.xml.rpc.ParameterMode.IN);

call.setReturnType(org.apache.axis.Constants.XSD_STRING);try{

String ret=(String) call.invoke(newObject[] {"Stephen"});

System.out.println("The return value is:"+ret);return;

}catch(IOException e) {

e.printStackTrace();

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(ServiceException e) {

e.printStackTrace();

}

log.error("call sayHello service error!");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有一个webservice服务,它提供了一个方法,可以返回两个整数的和。我们的任务是编写一个Java程序,调用这个webservice服务并计算两个数的和。 1. 创建一个Java项目,并在其中添加webservice客户端代码。 2. 在项目中添加webservice服务的WSDL文件,并通过Eclipse中的“Web Services Explorer”工具来检查服务是否可用。 3. 在项目中创建一个Java类来调用webservice服务。我们可以使用Eclipse的“Web Services Client”向导来生成客户端代码。 4. 在Java类中创建一个webservice客户端,指定webservice服务的WSDL文件地址,并调用服务提供的方法。 下面是一个简单Java代码示例,用于调用我们的webservice服务: ```java import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; public class CalculatorClient { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/calculator?wsdl"); QName qname = new QName("http://webservice.example.com/", "CalculatorImplService"); Service service = Service.create(url, qname); Calculator calculator = service.getPort(Calculator.class); int result = calculator.add(10, 20); System.out.println("Result: " + result); } } ``` 在上面的示例中,我们首先创建了一个URL对象,指向我们的webservice服务的WSDL文件地址。然后,我们使用QName对象指定服务的命名空间和服务名称。接下来,我们使用Service类创建一个webservice客户端,并使用我们的Calculator接口获取webservice服务的代理实例。最后,我们使用代理实例调用服务提供的add()方法,并打印结果。 注意,我们在上面的示例中创建了一个Calculator接口,用于访问webservice服务的方法。我们可以通过Eclipse的“Web Services Client”向导自动生成这个接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值