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);
- 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 }。