Java使用XFire调用WebService接口
在Eclipse上使用XFire开发WebService
在Eclipse上使用XFire开发WebServiceWeb Service概述什么是Web ServiceWeb Service是能够基于网络,尤其是基于万维网(World Wide Web)直接调用的能够处理离散任务或连续任务的软件模型。
目前较为流行的应用是,由一家公司对其专有数据进行封装,提供Web Service,然后其它公司就可以通过Internet来动态使用这些在线服务。
这为未来全球的电子商务发展提供了新的标准和架构。
Web Service架构Web Service是独立的、模块化的应用,能够通过因特网来描述、发布、定位以及调用。
在Web Service的体系架构中包括三个角色:服务提供者(Service Provider)、服务请求者(Service Requestor)、服务注册器(Service Registry)。
角色间主要有三个操作:发布(Publish)、查找(Find)、绑定(Bind)。
下图清楚的描述了三种角色,以及角色之间的作用关系。
图示一:图示二:这个流程图显示了Web Services中的核心技术是如何工作的。
这里,Provider是提供服务的应用程序组件,Requester是使用服务的客户端程序。
很多其他技术也会参与到交互中,但是这个图只显示了在Web Services环境中必需的核心技术组件。
Web Service协议标准简单对象访问协议(SOAP)SOAP是Simple Object Access Protocol的缩写,是一种基于XML的不依赖传输协议的表示层协议,用来在分散或分布式的应用程序之间方便地以对象的形式交换数据。
在SOAP的下层,可以是HTTP/HTTP,也可以是SMTP/POP3,还可以是为一些应用而专门设计的特殊的通信协议。
SOAP包括三个主要部分:²SOAP封装结构:定义了一个整体框架,以表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
webservice(Xfire的使用)
WebService1、WebService有什么用,使用它有什么好处及它的原理是怎样的Web Service主要为了使原来各个孤立的站点之间的信息能够相互通信、共享而提出的一种接口。
Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议simple object access protocal)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。
注:SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个基于XML的通讯协议用于分散和分布式环境下网络信息交换。
在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。
它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
2、Webservice移植性是不同系统(不同语言开发的系统、相同语言但属于不同应用开发的系统)之间互操作的平台,他提供一种标准,不同平台和不同语言之间进行互操作(异构系统之间互连互通)的标准它与语言和平台无关(无关性),有的时候无关性比性能更重要,意味着更通用也可以认为webservice就是一种应用程序,不同的系统通过它可以是实现互操作如果其它系统要访问发布在web服务器上java Web系统中某个类中的方法,这个时候只需要给该类封装成一个WebService Api接口3、如果一个webservice创建好了之后就可以访问了通过Soap(simple object access protocol)协议,实际使用了xml来描述和封装request和response,使得他们(request和response)可以通过soap协议进行传递.soap协议中提供了标准的远程过程调用RPC(方法)来访问webservice,rpc使用xml和xsd(xml schema Definition是DTD的替代品)来描述被请求的方法以及该方法的参数情况和返回情况{ 即用xml和xsd来描述和封装request和response,使得他们(request和response)可以通过soap协议进行传递}4、为什么其它系统都可以访问webservicewebservice使用xml和xsd来描述内部一些配置,xml和xsd是webservice基本数据格式wsdl(webservice description language),它使用的全是xml和xsd。
java web service接口的调用方法
Java Web Service 接口的调用方法一、配置 axis在 Java 项目中配置 Web Service 服务的第一步是使用 axis 来配置服务器。
axis 是 Web Service 服务器的驱动程序,它负责将Web Service 发布到网络上,并提供调用 Web Service 接口的服务。
在 axis 中配置服务器很简单,只需要在服务器配置文件中添加如下内容:```axis2.xml:``````<axis2><transports><transport name="http" /></transports><services><service name="MyService"><endpoint name="httpEndpoint"address="http://localhost:8080/axis2/services/MyService" /> </service></services></axis2>```上述配置中,需要将“http”改为实际的 Web Service 接口地址,例如“http://localhost:8080/axis2/services/MyService”。
此外,需要将“httpEndpoint”设置为 Web Service 接口的实际地址。
二、在项目中配置 axis在配置 axis 之后,需要在 Java 项目中使用 axis 来加载 Web Service 接口。
在 Java 项目中配置 axis 的方法有多种,其中一种方法是使用 axis 的 servlet 来加载 Web Service 接口。
1.创建 web 项目 testWebService,将 axis 那个源文件中/axis-src-14/axis-14/lib 下的几个主要的包 (就是第一步中那个配置中提到的那个几个包),拷贝到这个项目的webRoot/WEB-INF/lib 下。
Java使用XFire调用WebService接口
看了一些Java调用WebService接口的例子,很多都是Ctrl+C,Ctrl+V的,其中有很多拿来使用后发现有错误,令人郁闷,特此写了一篇经过测试的,只是一个小例子。
服务端(为客户端提供Webservice接口):使用工具:myeclipse-8.6.1-win32,apache-tomcat-7.0.11开发步骤:1.创建工程File->New->Web Service Project,弹出Web Service Project窗口,需要填写Project Name(例子是Demo),选择XFire,然后一路next,直到完成。
创建完成后,打开生成的web.xml文件,可以看到,XFire已经配置好了。
1<?xml version="1.0" encoding="UTF-8"?>2<web-app xmlns=" " xmlns:xsi=" :// /2001/XMLSchema-instance" version="2.5"xsi:schemaLocation="">3<servlet>4<servlet-name>XFireServlet</servlet-name>5<servlet-class>org.codehaus.xfire.transport. .XFireConfigurableServlet</servlet-class>6<load-on-startup>0</load-on-startup>7</servlet>8<servlet-mapping>9<servlet-name>XFireServlet</servlet-name>10<url-pattern>/services/*</url-pattern>11</servlet-mapping>12<welcome-file-list>13<welcome-file>index.jsp</welcome-file>14</welcome-file-list>15</web-app>2.创建WebService服务选择Toolbars上的New Web Service,弹出New Web Service窗口,选择Strategy:Create web service from Java class(Bottom-up scenario)并勾选下面的Create new Java bean,然后Next>,在Web service name中填写MyService,在Java package栏点击New...弹出窗口中Name:中填com.demo.service,然后点Finish。
XFire实现webservice
使用XFire实现webservice1 导入必要的包在eclipse里面导入xfire核心包导入xfire http client libraries包或下载XFire1.2.6,解压缩后单独导入下载xalan-j_2_7_1-bin-2jars.zip解压缩后放到tomcat/common/endorsed下数据库:数据源名字:accp数据库名字:Account字段:creditcard varchar(50)balance int2做一个接口package y2javaee.sg.ch09;public interface IProcessCredit {int creditProcess(String creditCard, double total);}做一个接口的实现类,类中定义了具体的web服务业务逻辑package com;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import y2javaee.sg.ch05.ConnectionManager;public class ProcessCreditCard implements IProcessCredit{public int creditProcess(String creditCard, double total){int result = 0;Connection con = null;PreparedStatement pStatement = null;try {con = ConnectionManager.getConnction();String strSql = "update Account "+ "set balance = balance - ? where creditcard = ?";pStatement = con.prepareStatement(strSql);pStatement.setDouble(1, total);pStatement.setString(2, creditCard);System.out.println(strSql);result = pStatement.executeUpdate();} catch (SQLException sqlE) {sqlE.printStackTrace();} finally {ConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);}return result;}}3 在src下手动创建/META-INF/xfire/services.xml,然后刷新工程,输入以下内容<beans xmlns="/config/1.0"><service><name>CreditCard</name><namespace>/CreditCard</namespace><serviceClass>sell.IProcessCredit</serviceClass><implementationClass>sell.ProcessCreditCard</implementationClass></service></beans>4 修改web.xml<servlet><servlet-name>XFireServlet</servlet-name><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class> </servlet><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/servlet/XFireServlet/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>////////////////////////////////////////////////察看webservice是否可用可以输入地址http://localhost:7000/sell/services/CreditCard?wsdl如果看到wsdl文件,说明服务可用///////////////////////////////////////////////调用service程序,做一个普通的servletimport java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import .MalformedURLException;import org.codehaus.xfire.XFire;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.aegis.AbstractXFireAegisTest;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.ServiceFactory;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import org.codehaus.xfire.service.invoker.ObjectInvoker;import javax.servlet.http.*;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取会话HttpSession session = request.getSession();// 读取订单的参数//String creditcard = request.getParameter("creditcard");String creditcard ="1001";//double total = ((Double) session.getAttribute("total")).doubleV alue();double total=1000;// 创建服务的元数据Service serviceModel = new ObjectServiceFactory().create(IProcessCredit.class);System.out.println("返回了服务的模型.");// 创建服务的代理XFire xfire = XFireFactory.newInstance().getXFire();XFireProxyFactory factory = new XFireProxyFactory(xfire);String serviceUrl = "http://localhost:8088/store/services/CreditCard";// 服务的地址IProcessCredit client = null;try {client = (IProcessCredit) factory.create(serviceModel, serviceUrl);} catch (MalformedURLException e) {System.out.println("客户端调用异常: " + e.toString());}// 调用服务int serviceResponse = 0;try {serviceResponse = client.creditProcess(creditcard, total);System.out.println("WsClient.callWebService(): status="+ serviceResponse);} catch (Exception e) {System.out.println("WsClient.callWebService(): EXCEPTION: "+ e.toString());}if (serviceResponse == 1) {request.getRequestDispatcher("/ch09/bye.jsp").forward(request,response);} else {request.getRequestDispatcher("/ch09/error.jsp").forward(request,response);}session.invalidate();}。
Xfire WebService服务器端配置详解
Xfire WebService服务器端配置详解Xfire简介XFire是codehaus推出的下一代的java SOAP框架,通过提供简单的API和支持标准协议,你可以方便的开发面向服务的程序。
内建在STAX基于流的XML解析引擎的基础上,XFire拥有很高的性能。
相对Axis来说,目前它的人气指数相当的高,加上和Spring集成,在目前的j ava webservices开源社区非常的受欢迎,也被多个开源项目所集成。
这里我们用xfire来做webservice开发。
准备工作1、到网址/Download下载xfire的工具包(xfire-all-1.0.jar),最新的版本为1.2.6。
2、查看下解压缩后的目录中的docs和examples中的内容,加以粗略了解。
开发步骤1、配置XFire运行环境:新建一个Web 工程,命名为xfire,然后在web.xml文件中添加xfire配置Xml代码1.<?xml version="1.0"encoding="GB2312">2.<!DOCTYPE web-app3. PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"4. "/dtd/web-app_2_3.dtd">5.6.<web-app>7.8.<servlet>9.<servlet-name>XFireServlet</servlet-name>10. <display-name>XFire Servlet</display-name>11. <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>12. </servlet>13.14. <servlet-mapping>15. <servlet-name>XFireServlet</servlet-name>16. <url-pattern>/servlet/XFireServlet/*</url-pattern>17. </servlet-mapping>18.19. <servlet-mapping>20. <servlet-name>XFireServlet</servlet-name>21. <url-pattern>/services/*</url-pattern>22. </servlet-mapping>23.24.</web-app>其中主要就是引入了XFireServlet,用以处理Web Service请求,并且负责提供Web Service的WSDL2.开发一个webservice,创建三个类PersonJava代码1.package com.eagle.bean;2.3.import java.io.Serializable;4.import java.util.Date;5.6.public class Person implements Serializable {7.8. private int id;9.10. private String name;11.12. private int age;13.14. private Date birthday;15.16. public int getId() {17. return id;18. }19.20. public void setId(int id) {21. this.id = id;22. }23.24. public String getName() {25. return name;26. }27.28. public void setName(String name) {29. = name;30. }31.32. public int getAge() {33. return age;34. }35.36. public void setAge(int age) {37. this.age = age;38. }39.40. public Date getBirthday() {41. return birthday;42. }43.44. public void setBirthday(Date birthday) {45. this.birthday = birthday;46. }47.48. public String toString() {49. return "id:" + id + ", name:" + name + ", age:" + age +"birthday: "50. + birthday;51. }52.}PersonService:Java代码1.package com.eagle.service;2.3.import java.util.Date;4.import java.util.List;5.6.import com.eagle.bean.Person;7.8./**9. * TODO web服务接口 date:Jan 14, 2010 time:2:29:49 PM author:wxj10. * email:jxauwxj@11. */12.public interface PersonService {13.14. /**15. * 返回一个String类型16. *17. * @param name18. * @return19. */20. public String sayHello(String name);21.22. /**23. * 返回一个int类型24. *25. * @return26. */27. public int getAge();28.29. /**30. * 返回一个Date类型31. *32. * @return33. */34. public Date getBirthday();35.36. /**37. * 返回一个自定义类型38. *39. * @return40. */41. public Person getPerson();42.43. /**44. * 返回一个复杂类型45. *46. * @return47. */48. public List<Person> getPersons();49.50.}PersonServiceImplJava代码1.package com.eagle.service;2.3.import java.util.ArrayList;4.import java.util.Date;5.import java.util.List;6.7.import com.eagle.bean.Person;8.9./**10. * TODO web服务接口实现类 date:Jan 14, 2010 time:2:29:49 PM author:wxj11. * email:jxauwxj@12. */13.public class PersonServiceImpl implements PersonService {14.15. public int getAge() {16. return (int) (Math.random() * 100);17. }18.19. public Date getBirthday() {20. return new Date();21. }22.23. public Person getPerson() {24. Person person = new Person();25. person.setId(1);26. person.setAge(60);27. person.setName("china");28. person.setBirthday(new Date());29. return person;30. }31.32. public List<Person> getPersons() {33. List<Person> persons = new ArrayList<Person>();34.35. Person person1 = new Person();36. person1.setId(1);37. person1.setAge(60);38. person1.setName("ls");39. person1.setBirthday(new Date());40. persons.add(person1);41.42. Person person2 = new Person();43. person2.setId(2);44. person2.setAge(50);45. person2.setName("bj");46. person2.setBirthday(new Date());47. persons.add(person2);48.49. Person person3 = new Person();50. person3.setId(3);51. person3.setAge(56);52. person3.setName("ww");53. person3.setBirthday(new Date());54. persons.add(person3);55.56. return persons;57. }58.59. public String sayHello(String name) {60. return "hello," + name + ",welcome to xfire";61. }62.63.}3.创建目录:webroot\WEB-INF\classes\META-INF\xfire4.在此目录下新建文件services.xml文件内容:Xml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<beans xmlns="/config/1.0">3.<service>4.<name>Person</name>5.<serviceClass>test.services.IPerson</serviceClass>6.<implementationClass>7. test.services.PersonImpl8.</implementationClass>9.</service>10.</beans>如果不适用的话则要在lib下放入xfire相关的jar包,jar包下载地址: /DownloadOK,webservice服务器端创建完成,部署到tomcat下后启动tomcat在浏览器中输入http://localhost:8080/xfire/services/person?WSDl注意:这里的localhost:8080根据自己的tomcat配置的端口号来写,xfire为创建的web工程名称,services为默认的不得更改,person是services.xml中配置name值。
java调用webservice接口的方法
第一步:理解主题在开始撰写文章之前,我们首先需要对要写的主题进行全面的评估和理解。
我们先来简单了解一下Java调用WebService接口的方法。
Java调用WebService接口是指通过Java语言来访问并与WebService进行交互。
WebService是一种基于Web的服务架构,它通过标准的XML和HTTP协议来提供服务。
Java调用WebService 接口的方法通常包括使用Java自带的工具、使用开源的工具包,或者自行编写代码来实现。
这其中涉及到的知识点有SOAP协议、HTTP 请求、XML解析等。
第二步:深入探讨主题在深入探讨主题之前,我们可以先从WebService的基本概念开始,逐步引出Java调用WebService接口的方法。
可以简要介绍一下WebService的定义、优点、工作原理等内容,然后逐步过渡到Java 如何调用WebService接口,可以分别介绍使用Java自带的工具如JAX-WS、使用开源工具包如Apache CXF、或自行编写代码来实现。
还可以讨论如何处理WebService的返回数据、异常处理等内容。
第三步:个人观点和总结个人观点和总结部分,可以结合自己的实际经验和对主题的理解,对Java调用WebService接口的方法进行总结和回顾。
可以共享一些实际应用中的经验和技巧,也可以谈谈对未来发展的看法和期待。
通过以上步骤,我们可以撰写一篇有价值的文章来探讨Java调用WebService接口的方法,让读者能够全面、深刻地理解这个主题。
文章内容示例(非Markdown格式的普通文本):标题:Java调用WebService接口的方法1. WebService的概念和优点在当今互联网时代,Web服务被广泛应用于各种领域。
WebService 是一种基于Web的服务架构,它通过标准的XML和HTTP协议来提供服务。
它具有跨评台、跨语言、松耦合等优点,因此受到了广泛的关注和应用。
使用XFire调用WebService需注意的事项
比如:HttpClientParams.CONNECTION_MANAGER_TIMEOUT // 设置Timeout
这其实不止是这里需要,任何网络编程都需要注意此事项。当对方服务死了或网络异常,
如果不做timeout处理,按照默认的时间去处理,将会导致服务积压严重甚至被脱死。
E_EXPECT_CONTINUE //client handshake
如果服务不需要传输大量的数据,保持长连接,还是建议关闭掉此功能,设置为false。
否则,在业务量很大的情况下,很容易将服务端和自己都搞的很慢甚至拖死。
HttpClientParams params = new HttpClientParams();
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.Client.invoke(Client.jkeisuo贡献
使用XFire调用WebService需注意的事项
(一):注意过滤输入和输出参数空白字符
如果出现空白字符解析不了导致调用失败,导致下面的异常:
org.codehaus.xfire.fault.XFireFault: Error writing document.. Nested exception is com.ctc.wstx.exc.WstxIOException: Invalid null character in text to output
hcparams.setParameter(E_EXPECT_CONTINUE, Boolean.FALSE);
java-调用Webservice接口
java 调用webservice的各种方法总结现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!!由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用方法。
一、利用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;@WebServicepublic class Hello {@WebMethodpublic String hello(String name) {return "Hello, " + name + "\n";}public static void main(String[] args) {// create and publish an endpointHello 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 MyEclipse34public interface IHelloWorldService {56 public String example(String message);78} 接着实现这个借口:1package com.myeclipse.wsExample; 2//Generated by MyEclipse34public class HelloWorldServiceImpl implements IHelloWorldService { 56 public String example(String message) {7 return message;8 }910} 修改service.xml 文件,加入以下代码:1<service>2 <name>HelloWorldService</name>3 <serviceClass>4 com.myeclipse.wsExample.IHelloWorldService5 </serviceClass>6 <implementationClass>7 com.myeclipse.wsExample.HelloWorldServiceImpl8 </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;23import .MalformedURLException;4import .URL;56import 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;1112import com.myeclipse.wsExample.IHelloWorldService;1314public class HelloWorldClient {15public static void main(String[] args) throws MalformedURLException, Exception {16// TODO Auto-generated method stub17Service s=new ObjectServiceFactory().create(IHelloWorldService.class);18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());19String url="http://localhost:8989/HelloWorld/services/HelloWorldService";2021 try22 {2324 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 }3334}35 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:1public static void main(String[] args) throws MalformedURLException, Exception {2 // TODO Auto-generated method stub3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class);4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 567//远程调用.net开发的webservice8Client c=new Client(new URL("/webservices/qqOnlineWebService.asmx?wsdl"));9 Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"});1011//调用.net本机开发的webservice12Client c1=new Client(new URL("http://localhost/zj/Service.asmx?wsdl"));13Object[] o1=c1.invoke("HelloWorld",new String[]{});1415}三、使用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;45import .MalformedURLException;6import .URL;7import java.rmi.RemoteException;89import space.QName;1011public class TestHelloWorld {121314 public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {15 // TODO Auto-generated method stub1617 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";2122 ServiceFactory serviceFactory = ServiceFactory.newInstance();23 Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));24 HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);25 System.out.println("return value is "+proxy.getName("john") ) ;2627 }2829}30四、使用axis2开发webservice(这里首先感谢李宁老师)使用axis2 需要先下载axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip/axis2/同理,也需要将axis2复制到webapp目录中在axis2中部署webservice有两种方法,第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明下面分别说明使用方法:1.pojo方式:在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
java动态调用webservice方法
java动态调用webservice方法1. 引言1.1 背景介绍随着信息技术的快速发展,web服务已经成为了不可或缺的一部分。
企业级应用通常使用web服务来实现不同系统之间的数据交换和通信。
而在Java开发中,使用webservice调用远程方法是一种常见的方式。
传统的webservice调用通常需要通过生成客户端代码来调用远程方法,这种方式对开发者来说比较繁琐。
有时候,我们需要在运行时动态调用webservice方法,使得程序更加灵活和可扩展。
本文将介绍动态调用webservice方法的原理、Java中动态调用webservice方法的实现方式以及使用Apache CXF库和JAX-WS库调用webservice方法的步骤。
我们也会探讨一些常见问题及解决方法,帮助读者更好地理解和应用动态调用webservice方法的技术。
接下来,我们将详细讨论动态调用webservice方法的原理和Java 中的实现方式。
1.2 问题提出在项目开发中,我们经常会遇到需要调用外部的Web服务方法的情况。
而在Java开发中,如何动态调用Web服务方法是一个常见的问题。
在传统的开发模式中,我们通常会通过生成客户端代码来调用Web服务方法,但是这种方式存在一定的局限性,比如需要提前知道Web服务方法的信息,不能动态适应接口的变化等等。
我们需要寻找一种更加灵活和高效的方式来动态调用Web服务方法,以满足项目需求的变化和扩展。
在本文中,我们将深入探讨如何在Java中实现动态调用Web服务方法,探讨其中的原理和实现方式,以及结合Apache CXF和JAX-WS两种常见的Web服务框架,详细介绍如何使用这两种框架来实现动态调用Web服务方法的步骤。
通过对问题进行深入的探讨和研究,我们希望为Java开发者提供一种更加灵活和高效的解决方案,帮助他们更好地应对Web服务调用的需求,提升项目的开发效率和质量。
【问题提出】1.3 研究目的并不符合要求,或者内容不相关。
Java调用WebService接口
Java调⽤WebService接⼝在实际开发⼯作中,会遇到接⼝对接的场景,有直接HTTP调⽤⽅式,参数体为JSON串;还有⼀种是SOAP⽅式,即webService接⼝。
⾸先,可以在浏览器上安装⼀个插件(Wizdler),如下图。
通过这个插件,我们可以轻松的看到所有的⽅法点击⽅法,可以直接⽣成对应的请求参数,替换相关参数,可以直接调⽤⽅法;下⾯来讲⼀下如何使⽤Java代码实现接⼝的调⽤;@Testpublic void test(){try{String webServiceUrl = "http://238.62.169.140:8090/g6_venues/webservice/gtv-external-venues-service?wsdl";JaxWsDynamicClientFactory factory1 = JaxWsDynamicClientFactory.newInstance();Client client = factory1.createClient(webServiceUrl);HTTPConduit conduit = (HTTPConduit)client.getConduit();HTTPClientPolicy clientPolicy = new HTTPClientPolicy();//连接超时clientPolicy.setConnectionTimeout(2000);//取消块编码clientPolicy.setAllowChunking(false);//响应超时clientPolicy.setReceiveTimeout(12000);conduit.setClient(clientPolicy);String startDateTime = "20201018090000";String endDateTime = "20201228160000";Object[] result = client.invoke("queryFreeRoomInfo",startDateTime ,endDateTime ); //queryFreeRoomInfo为⽅法名;System.out.println("返回结果:" + result[0].toString());}catch (Exception e){e.printStackTrace();}}JaxWsDynamicClientFactory、HTTPConduit、Client、HTTPClientPolicy需要引⼊对应的依赖,。
XFire 1.2.6调用Web Service的几种方法
XFire 1.2.6调用Web Service的几种方法最近由于项目的需求,我开始学习XFire 1.2.6。
XFire的服务发布很简单,但由于xfire为用户提供了多种调用(invoke) web service的方法,所以在编写客户端代码的时侯,需要我们做一番斟酌。
在不同的应用环境下,我们可能需要采用不同的服务调用的方法。
本文将详细介绍这几种调用web服务的方法。
方法一:动态客户端(Dynamic Client)这是一种最简单的web服务调用方法。
具体过程如下:1.创建一个服务代理,其中url为调用服务的wsdl地址。
Client client = new Client(new URL(url));2.调用web服务,输入参数(简单类型)。
Object[] results = client.invoke(methodName, new Object[]{param1,param2});3.打印web 服务运行结果System.out.println((ReturnValueType)results[0]);全过程只需要三个过程,非常简单。
但是,上述过程仅限于简单的方法调用,对于那些以复杂数据结构为参数的方法,以及复杂结构的返回值的方法,需要采用另外的处理方法,否则将无法正常运行。
关于复杂参数的传递以及调用复杂返回值方法的过程还有待进一步研究,如果哪个读者熟悉这一块,可以与我联系,本人将非常感谢。
方法二:代理工厂方法(Proxy Factory)一般的方法如如下:1.创建一个服务实例,就像在自己的服务器上创建一样。
要注意的是,这里的“”Service serviceModel = new ObjectServiceFactory().create(YourService.class);要注意的是,这里的“YourService”是接口类,而不是接口的实现类。
2.定义服务URLString serviceURL = “http://localhost:8080/XFireTest/services/YourService”;3.为服务创建一个代理YourService client = (YourService) new XFireProxyFactory().create(serviceModel,serviceURL);4.使用代理访问服务提供的方法String name = (String) client.getName();如果已经知道调用的服务在本地时,我们可以采取下面方法(本地传输)来调用,这种方法可以提高调用服务的速度,减少调用服务的延迟时间。
java用XFire调用webservice例子
java用XFire开发调用webService例子XFire 概述XFire 是codeHaus 组织提供的一个开源框架,它构建了POJO 和SOA 之间的桥梁,主要特性就是支持将POJO 通过非常简单的方式发布成Web 服务,这种处理方式不仅充分发挥了POJO 的作用,简化了Java 应用转化为Web 服务的步骤和过程,也直接降低了SOA 的实现难度,为企业转向SOA 架构提供了一种简单可行的方式。
XFire 目前最新的版本是1.2.2,目前支持的特性主要包括:支持将Web 服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0 和Castor;支持基于HTTP、JMS、XMPP 等多种协议访问Web 服务;支持多种Web 服务业界重要标准如SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;支持JSR181,可以通过JDK5 配置Web 服务;高性能的SOAP 实现;服务器端、客户端代码辅助生成;对Spring、Pico、Plexus 等项目的支持等。
XFire 安装包XFire 框架目前的最新版本是1.2.6,可以访问 下载XFire 框架的安装包,下载时请选择“全部二进制发布包(Binary Distribution in zip package)”,而不仅仅是“XFire jar 文件(Jar of all XFire modules)”。
下载完成后,我们可以将下载的.zip 文件解压缩到任意的文件夹中(后面的章节中使用% XFIRE_HOME % 表示XFire 框架的安装目录),解压缩后形成的文件目录结构如下:api(目录)api 目录中是XFire 框架中所有类(class)对应的API 文档,为开发者使用XFire 完成应用开发提供帮助。
examples(目录)examples 目录中包含了所有随XFire 二进制包发布的实例,包括这些实例的源代码和相关Web 应用配置内容。
JAVA之WebService框架---Xfire
Java WebService框架之XFire使用说明声明:此文档只为做学习交流用,如果你有任何异议或更好的想法,欢迎你在群里讨论或者与我讨论!希望能够帮到你!WebService这个字眼,或许大家听起来,并不陌生,一般做过几年开发经验的程序员,几乎都跟它打过交道,首先,我要说明的是,WebService并不是java的特权,也就是说,并不是java只有WebService,.net有,C#有。
等等不罗嗦,首先我得让大家知道,WebService是干嘛用的,从字面意思理解就是web服务,其实,说白了,Web Services就是发布的、完成其特定需求的、在线应用服务。
其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
WebService的主要目标是跨平台的可互操作性。
他独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。
(相关详细解释,大家可以百度的文库)我举个例子,或许大家就明白了,我举个它的应用,比如说,现在有这么一个需求:WebService应用案例一:张三传递给李四某个城市的名字比如说北京,李四反馈给张三北京的天气预报为:晴,王五传递给李四的城市名字济南,李四反馈给王五济南的天气预报为:阴;赵六传递给李四武汉。
等等。
但是,无论是谁想给李四传递城市的名字,必须遵循李四开放出来的一个发送地址,要不然你找不到李四,李四也收不到你的请求城市。
那么,在该示例中,无非就是想实现的一个功能就是,任何人传递给李四一个城市的相关名字,李四反馈给请求者该城市的天气情况,前提是,按照李四公布给大家的发送地址,那么,所有向李四发送请求城市的人,都会收到李四反馈的请求的城市的天气情况,那么这就是一个典型的webservice的调用,它与平台无关,跟每一个系统都无关,是独立的在线服务,那么,在此例中,每一个向李四发送请求的人,都是客户端,而李四所实现的接受城市,反馈回天气预报的功能,就是webservice的服务断,而李四提供的发送地址,就是大名鼎鼎的访问Webservice得到WSDL地址再给大家举一个例子:WebService应用案例二:有两套系统,A系统为用。
XFire配置webService 调用报错:org.codehaus.xfire.util.stax.DepthXMLStreamReader
XFire配置webService调用报错:org.codehaus.xfire.util.stax.DepthXMLStreamReader--------------------------------------解决ok添加weblogic.xml文件到WEB-INF<?xml version='1.0' encoding='UTF-8'?><weblogic-web-app xmlns="/ns/weblogic/90"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd /ns/weblogic/90 /ns/weblogic/90/weblogic-web-app.xsd"><context-root>/rootpath_sxwh</context-root><container-descriptor><prefer-web-inf-classes>true</prefer-web-inf-classes></container-descriptor></weblogic-web-app>--------------------------------------解决ok2012-10-14服务器端错误日志:<2012-10-14 01:43:25><ERROR> [org.codehaus.xfire.handler.DefaultFaultHandler] -Fault occurred!ng.UnsupportedOperationExceptionat weblogic.xml.stax.XMLStreamReaderBase.getTextCharacters(XMLStreamReaderBase.java:515)at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getTextCharacters(DepthXMLStreamReader.java:180)at org.codehaus.xfire.util.stax.DepthXMLStreamReader.getTextCharacters(DepthXMLStreamReader.java:180)at org.codehaus.xfire.aegis.type.basic.Base64Type.readObject(Base64Type.java:74)at org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:727)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:820)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)atweblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3 715)atweblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)atweblogic.work.ExecuteThread.execute(ExecuteThread.java:207)atweblogic.work.ExecuteThread.run(ExecuteThread.java:176)附:在网上找到的解决方案weblogic9.x与xfire1.2.6冲突解决心得2010-04-22 09:41:55| 分类:软件技术类| 标签:|字号大中小订阅前些日子用xfire1.2.6开发了一个webservice接口,主要功能是用来传输文件,接口定义如下:public interface WSExport {public byte[] export(String docPath,StringxmlPath) throws Exception;}开发好服务端和客户端后,在tomcat6下面测试通过,以为一切ok了。
java用XFire调用webservice例子
java用XFire开发调用webService例子XFire 概述XFire 是codeHaus 组织提供的一个开源框架,它构建了POJO 和SOA 之间的桥梁,主要特性就是支持将POJO 通过非常简单的方式发布成Web 服务,这种处理方式不仅充分发挥了POJO 的作用,简化了Java 应用转化为Web 服务的步骤和过程,也直接降低了SOA 的实现难度,为企业转向SOA 架构提供了一种简单可行的方式。
XFire 目前最新的版本是1.2.2,目前支持的特性主要包括:支持将Web 服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0 和Castor;支持基于HTTP、JMS、XMPP 等多种协议访问Web 服务;支持多种Web 服务业界重要标准如SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;支持JSR181,可以通过JDK5 配置Web 服务;高性能的SOAP 实现;服务器端、客户端代码辅助生成;对Spring、Pico、Plexus 等项目的支持等。
XFire 安装包XFire 框架目前的最新版本是1.2.6,可以访问 下载XFire 框架的安装包,下载时请选择“全部二进制发布包(Binary Distribution in zip package)”,而不仅仅是“XFire jar 文件(Jar of all XFire modules)”。
下载完成后,我们可以将下载的.zip 文件解压缩到任意的文件夹中(后面的章节中使用% XFIRE_HOME % 表示XFire 框架的安装目录),解压缩后形成的文件目录结构如下:api(目录)api 目录中是XFire 框架中所有类(class)对应的API 文档,为开发者使用XFire 完成应用开发提供帮助。
examples(目录)examples 目录中包含了所有随XFire 二进制包发布的实例,包括这些实例的源代码和相关Web 应用配置内容。
java调用webservice XFire
问一下.Net 的开发者,开发 Web Services 有多困难?他们会被你的问题逗乐,他们会告诉你所有步骤花费 的时间不会超过一分钟。
再问一下 Java 开发者,运气好的话你会碰到上面的回答,一般情况下,你会得到 一个完全不同的答案。
从 Web Services 引入到 Java 中至今已经 5 年了,然而它仍然被认为是一门较新的 技术,一个主要的原因就是使用 Java 实现 Web Services 太困难了。
现在,随着新一代 Web Services 引 擎 XFire 的发布, 这种情况将会发生明显的变化。
类方法发布为 使用 XFire, , 你可以把 Java 类方法发布为 Web Services 而不需要编写额外的代码。
而不需要编写额外的代码。
在这篇文章中,你将会看到 XFire 使 Web Services 开发变得多么容易和简单。
Web Services 使我们能够在网络上建立分布式系统,应用程序组件可以通过任何平台、任何语言和任 何方式访问。
无论应用程序如何开发,使用了什么语言,以及运行在什么操作系统平台上,只要它作为 Web Service,并且为协同解决问题而设计,那么你的应用程序,以任何语言开发或在任何平台上,都可 以利用它的服务。
这是 Web Service 的主要概念。
为了实现 Web Services 的平台无关性和实现访问独立性,软件行业需要遵循一些作为标准的技术。
其中一些包括: ---XML:在 Web Services 环境中各层之间进行传递的默认数据格式。
---SOAP:封装和交换信息的默认协议。
第一次被提出时,它是只取 Simple Object Access Protocol(简 单对象访问协议)的首字母。
但是现在 SOAP 更多被认为是一个特定的名词,以它自己而命名,同样很多人 认为这是用词不当:SOAP 实际上不是用来访问对象的。
另外,它也不再简单。
创建JavaWebService(使用xfire)
1.下载需要的xfire包下载地址:/Download,下载xfire-distribution-1.2.6.zip文件,并解压。
新建web项目,取名TestXFire,将解压目录下的xfire-all-1.2.6.jar和lib目录下的所有包导入到项目中。
2.创建类使用接口的设计是一个好的实践,所以先创建接口:ITestService,代码如下:package com.gdie.xfire.example;//该接口提供一个方法,用于计算public interface ITestService {public int add(int p1, int p2);}创建接口实现类package com.gdie.xfire.example;public class TestService implements ITestService {public int add(int p1, int p2) {// TODO Auto-generated method stubreturn p1 + p2;}}3.创建META-INF文件夹简便起见,将WebRoot下的META-INF文件夹复制到项目的src下,这样的话会在部署发布目录下web-inf下的classes下自动建立META-INF,而同时WebRoot下也有一个META-INF文件夹,这两个容易混淆,实际webservice下真正起作用的是web-inf下的classes下的web-inf下的META-INF,所以,关键是在项目的src下面有META-INF这个文件夹,并定义里面的内容,与WebRoot下META-INF无关。
然后在src下的META-INF建立xfire子文件夹,里面建立一名叫services.xml配置文件,配置如下:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/config/1.0"><service><name>TestService</name><namespace>http://com/gdie/xfire/example/ITestService</namespace><serviceClass>com.gdie.xfire.example.ITestService</serviceClass><implementationClass>com.gdie.xfire.example.TestService</implementationClass></service></beans>注意:包文件路径com.gdie.xfire.example.ITestService等需要正确对应。
用XFire开发 WebService全教程
XFire开发WebServiceXFire简介:XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。
和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring 集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率. 详细内容请看:/view/920041.htmlWebService简介:它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web .应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
具体内容请访问:/view/837392.html开发环境:JDK 1.6;MyEclipse8.5;tomcat 6.0;Windows XP;XFire1.2接下来我们看怎么用XFire来构建一个webservice服务端。
1.创建工程打开MyEclipse 8.5,新建一个WebService工程。
如下图Webservice服务端名称Webservice服务路径什么都不用改动services.xml2.创建webserice服务.MyServiceTestImpl.java代码如下:Service.xml配置文件如下:3.测试服务端测试服务器我们采用Tomcat, 需要将做好的服务端打包部署到tomcat上,然后启动. 在进行测试.可以看到,我们服务端提供了一个名叫“sayHello”的接口.我们点击这个方法名.在下面填入字符串. 点击GO如下这样服务端就返回一个字符串. 说明我们服务端测试通过.4.创建客户端代码创建客户端可以用MyEcilse自带的创建客户端方式.去创建. 比较简单. 傻瓜式操作.这里我就不在示范. 我采用手写的方式写一个客户端.这样有助于大家理解.也能加深记忆.(1)创建一个工程. MyserviceCilent 添加XFire架包. 工程架构如下.(2)创建接口实现类.IMyServiceTest.java. 源码如下:package service.client;//Generated by MyEclipsepublic interface IMyServiceTest {public String sayHello(String user);}MyServiceTestImpl.java 源码如下:package service.client;//Generated by MyEclipsepublic class MyServiceTestImpl implements IMyServiceTest { public String sayHello(String user) {return"您好,"+user;}}(3)写测试类.ClientTest.java 源码如下:public static void main(String [] args){Service serviceModel = newObjectServiceFactory().create(IMyServiceTest.class);XFire xfire = XFireFactory.newInstance().getXFire();XFireProxyFactory factory = new XFireProxyFactory(xfire); String serviceUrl ="http://10.222.22.97:8080/MyServiceTest/services/MyServiceTest";IMyServiceTest client = null;try {client = (IMyServiceTest) factory.create(serviceModel, serviceUrl);} catch (MalformedURLException e) {System.out.println("Client call webservice has exception: "+ e.toString());}String result1 =client.sayHello("张三");System.out.print(result1);}直接执行后会返回以下结果.5.现在一个简单的webservice已经开发完成. 当然有的同学会提出. 只可以传递字符串类型吗?当然不是. 后续我还为大家在写传递对象类型. 集合类型. 数组类型. 敬请期待.谢谢!有什么问题,可以联系我. 邮箱:zhubox1j7253@很高兴能和你探讨.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
看了一些Java调用WebService接口的例子,很多都是Ctrl+C,Ctrl+V的,其中有很多拿来使用后发现有错误,令人郁闷,特此写了一篇经过测试的,只是一个小例子。
服务端(为客户端提供Webservice接口):
使用工具:myeclipse-8.6.1-win32,apache-tomcat-7.0.11
开发步骤:1.创建工程
File->New->Web Service Project,弹出Web Service Project窗口,需要填写Project Name(例子是Demo),选择XFire,然后一路next,直到完成。
创建完成后,打开生成的web.xml文件,可以看到,XFire已经配置好了。
1<?xml version="1.0" encoding="UTF-8"?>
2<web-app xmlns=" " xmlns:xsi=" :// /2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="
">
3<servlet>
4<servlet-name>XFireServlet</servlet-name>
5<servlet-class>org.codehaus.xfire.transport. .XFireConfigurableServlet</servlet-class> 6<load-on-startup>0</load-on-startup>
7</servlet>
8<servlet-mapping>
9<servlet-name>XFireServlet</servlet-name>
10<url-pattern>/services/*</url-pattern>
11</servlet-mapping>
12<welcome-file-list>
13<welcome-file>index.jsp</welcome-file>
14</welcome-file-list>
15</web-app>
2.创建WebService服务
选择Toolbars上的New Web Service,弹出New Web Service窗口,选择Strategy:Create web service from Java class(Bottom-up scenario)并勾选下面的Create new Java bean,然后Next>,在Web service name中填写MyService,在Java package栏点击New...弹出窗口中Name:中填com.demo.service,然后点Finish。
完成后,生成了一个Service的配置services.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="">
3
4<service>
5<name>IMyService</name>
6<serviceClass>com.demo.service.IIMyService</serviceClass>
7<implementationClass>
8 com.demo.service.IMyServiceImpl
9</implementationClass>
10<style>wrapped</style>
11<use>literal</use>
12<scope>application</scope>
13</service></beans>
生成了接口和默认实现:
1package com.demo.service;
2//Generated by MyEclipse
3
4public interface IIMyService {
5
6public String example(String message);
7
8 }
1package com.demo.service;
2//Generated by MyEclipse
3
4public class IMyServiceImpl implements IIMyService {
5
6public String example(String message) {
7return message;
8 }
9
10 }
服务端代码生成完毕。
测试服务端:1.前提:配置Tomcat服务器,并完成WebService服务端的部署,然后启动Tomcat。
2.选择Toolbars上的Launch SOAP Web Service Explorer,Web Services Explorer窗口右侧WSDL Page,输入网址显示如下图
3.双击examlpe,输入hello,下面会显示out(string):hello,测试通过。
客户端(调用服务端提供的WebService接口方法):
使用工具:eclipse
需要引入如下包:commons-codec-1.2.jar、commons- client-3.0.-rc2.jar、jdom.jar、xfire-all-1.2.6.jar、wsdl4j-1.5.1.jar、commons-logging-1.0.4.jar。
开发步骤:1.创建工程
File->New->Java Project->Project name:Demo,一路Next>,最后Finish,然后新建包
com.demo.client,包中建立2个文件,一个是服务端接口文件(直接复制粘贴过来)IMyService.java,一个是测试文件Test.java,其代码如下:
1package com.demo.client;
2import org.codehaus.xfire.client.XFireProxyFactory;
3import org.codehaus.xfire.service.Service;
4import org.codehaus.xfire.service.binding.ObjectServiceFactory;
5
6public class Test {
7/**
8 * @param args
9*/
10public static void main(String[] args) {
11// TODO Auto-generated method stub
12 String serviceUrl = " ";
13 Service serviceModel = new ObjectServiceFactory().create(IMyService.class, null, " ://localhost:8080/Demo/services/MyService?wsdl", null);
14 XFireProxyFactory serviceFactory = new XFireProxyFactory();
15try{
16 IMyService service = (IMyService)serviceFactory.create(serviceModel,serviceUrl);
17 String hello = service.example("hello");
18 System.out.println(hello);
19 }catch(Exception e){
20 e.printStackTrace();
21 }
22 }
23 }。