XFire配置webService 调用报错:org.codehaus.xfire.util.stax.DepthXMLStreamReader

合集下载

XFire开发webservice服务和客户端全攻略

XFire开发webservice服务和客户端全攻略

使用XFire开发webservice服务和客户端全攻略收藏XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service 各项标准协议,帮助你方便快速地开发Web Service应用。

相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web Service开源社区拥有众多的追随者。

并且因为XFire为Spring提供的支持,使得我们可以很容易在Spring中使用XFire构建Web Service应用。

XFire 与Axis2相比具有如下特征:l 支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security 等;l 使用Stax解释XML,性能有了质的提高。

XFire采用Woodstox 作Stax实现;l 容易上手,可以方便快速地从pojo发布服务;l 支持Spring、Pico、Plexus、Loom等容器;l 灵活的Binding机制,包括默认的Aegis,xmlbeans,jaxb2,castor;l 高性能的SOAP 栈设计;l 支持Spring、Pico、Plexus、Loom等容器。

XFire 与Axis1性能的比较如下:l XFire 比Axis1.3快2-6倍;l XFire 的响应时间是Axis1.3的1/2到1/5。

XFire 在WebService框架中开始较晚,它从现有的框架中借鉴了许多优秀的理念,力争将Web Service的应用开发难度降到最低。

此外,还提供了各种绑定技术、支持多种传输协议,对WebService体系中许多新的规范提供了支持。

下面让我们来看一个XFire于Spring集成的helloWorld的简单例子。

一.实现的功能和特点本例具有如下功能和特点:1)基于J2EE平台的Web Service服务;2)开发方便,配置简单;3)与spring无缝集成。

Web+Services发布与调用(axis,xfire)

Web+Services发布与调用(axis,xfire)

目录一使用Axis和XFire发布Web Service (2)1.1 准备工作 (2)1.1.1 新建工程 (2)1.1.2 axis依赖文件 (3)1.1.3 XFire依赖文件 (3)1.2 Axis发布Web Service (4)1.2.1 传递简单数据类型的Web Service (4)1.2.2 带自定义对象传递的Web Service (8)1.3 XFire发布Web Services (10)1.3.1 传递简单数据类型的Web Service (10)1.3.2传递复杂数据类型的Web Service (12)附录: 1Server的结构 (16)二调用Web Services (17)2.1 准备工作 (17)2.1.1 新建工程 (17)2.1.2 启动Tomcat上发布的1Server服务 (17)2.2 Axis发布的Web Service调用方式 (18)2.2.1 Dynamic Invocation Interface (DII)方式 (18)2.2.2 Dynamic Proxy方式 (19)2.2.3 Stubs方式 (20)2.3调用XFire发布的Web Service (22)2.3.1服务以jar包形式发布的时候直接调用 (23)2.3.2 使用Axis的Client包 (23)2.3.3 使用Xfire的Client包 (24)附录2:2Client目录结构 (31)一使用Axis和XFire发布Web Service 1.1 准备工作Axis主页:/Axis下载:/dist/ws/XFire主页:/XFire下载:/Download去以上站点下载axis最新包和XFire最新包,包内有axis和XFire依赖的其他jar包。

1.1.1 新建工程1.1.2 axis依赖文件1.1.3 XFire依赖文件1.2 Axis发布Web Service1.2.1 传递简单数据类型的Web Service1.把Axis依赖的jar包放入lib文件夹下.2.在web.xml中加入如下:<!-- ****************** axis ws start ****************** --> <listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener </listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMonitorService</servlet-name><servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!-- uncomment this if you want the admin servlet --><!--<servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping>--><session-config><!-- Default to 5 minute session timeouts --><session-timeout>5</session-timeout></session-config><!-- currently the W3C havent settled on a media type for WSDL;/TR/2003/WD-wsdl12-20030303/#ietf-draftfor now we go with the basic 'it's XML' response -->3.发布到Tomcat5.0+ 启动Tomcat服务启动的时候若出现下面错误。

Xfire开发的webservice客户端超时问题解决

Xfire开发的webservice客户端超时问题解决

Xfire开发的webservice客户端超时问题解决Xfire开发的webservice客户端超时问题解决最近某电信ISAG升级后我们的客户端出现大量超时提示,并且下发很慢[MeChannelGw]2010-06-10 06:00:05 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:08 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:11 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:14 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:17 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request每隔3-4秒才下发一次数据。

曾以为是对方服务器问题,网络的问题等等,就是换台机器部署,还是会有这个问题。

实际,上因为Xfire默认的机制下,会不断的去和服务端握手造成的。

XFire开发WebService返回复杂对象

XFire开发WebService返回复杂对象

xFire开发webService返回复杂对象分类:webservice2009-07-21 14:192739人阅读评论(1)收藏举报XFire开发时,在返回数据类型时遇到了一些麻烦,查到这样一篇文单,非常不错,故收藏之。

翻译:zilong3927 原文地址:/display/XFIRE/Mapping+collections调用Web Services时,经常需要返回集合(collection)作为结果,或者接受collection型的参数。

SOAP本身就支持这一点。

但是这一机制的问题在于,java语言的collections是无类型的(untyped).因此,如果要在Java 1.4 当中支持collections,就需要做一些额外的工作。

Java 5 & 范型(Generics)首先而且是推荐的做法是在JDK5当中使用范型(generics)。

范型能够使你在代码当中为你的collections 指定类型信息,从而允许xfire自动地推导出collection类型,生成正确的wsdl等等。

下面示例了如何写这样的一个方法:public Collection< String > getValuesForIds(Collection< Integer >);Java 1.4 & 集合(Collections)有些情况下并不总能够使用范型(generics).例如,如果你的部署环境使用JDK 1.4,或者你想暴露一些遗留的服务,而同时又不打算修改任何代码也不打算进行移植。

对于这样的一些情况而言,你需要生成一个xml映射文件,来指定方法和它们对应的集合类型(collection types).这个xml文件的名字必须是<className>.aegis.xml,其中className是你的服务(service)的接口类(unqualified class)的名字。

axis,jax-ws,xfire客户端调用分析,以及webservice万能客户端

axis,jax-ws,xfire客户端调用分析,以及webservice万能客户端

最近一个项目需要调用一个webservice接口,遇到一个问题.项目中的jdom版本为0.9.而webservice client需要用到jdom1.0 如果将jdom版本升级则会造成现有系统异常.因此需要在不改变现有项目jar的情况下解决这个问题.service端使用的jax-ws2.wsdl如下:Java代码<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at . RI's version is JAX-WS RI 2.1.1 in JDK 6. --><!-- Generated by JAX-WS RI at . RI's version is JAX-WS RI 2.1.1 in JDK 6. --><definitionsxmlns:soap="/wsdl/soap/"xmlns:tns="/ZySearch"xmlns:xsd="/2001/XMLSchema"xmlns="/wsdl/"targetNamespace="/ZySearch"name="UserLinkWebServiceService"><types></types><message name="getUserLink"><part name="linkNo" type="xsd:string"></part></message><message name="getUserLinkResponse"><part name="returnVal" type="xsd:string"></part></message><portType name="UserLinkWebService"><operation name="getUserLink" parameterOrder="linkNo"><input message="tns:getUserLink"></input><output message="tns:getUserLinkResponse"></output></operation></portType><binding name="UserLinkWebServicePortBinding"type="tns:UserLinkWebService"><soap:binding transport="/soap/http"style="rpc"></soap:binding><operation name="getUserLink"><soap:operation soapAction="getUserLink"></soap:operation><input><soap:body use="literal"namespace="/ZySearch"></soap:body></input><output><soap:body use="literal"namespace="/ZySearch"></soap:body></output></operation></binding><service name="UserLinkWebServiceService"><port name="UserLinkWebServicePort"binding="tns:UserLinkWebServicePortBinding"><soap:addresslocation="http://192.168.1.1.154:9010/ZySearch"></soap:address></port></service></definitions>1.xfire调用对方给我们的client是使用xfire的client调用,代码如下:Java代码package mon;import .URL;import java.util.Map;import org.codehaus.xfire.client.Client;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver;public class Test {public static void main(String[] args) {String url ="http://192.168.1.1:8000/RES_Searcher/service/IUserLinkWebService?wsd l";Client client;try {client = new Client(new URL(url));Object params[] = {"123456"};String result = (String)client.invoke("getUserLink", params)[0];XStream xStream = new XStream(new DomDriver());Map map = (Map)xStream.fromXML(result);} catch (Exception e) {e.printStackTrace();}}}2.axis调用但是由于jar包的原因,我们不能使用上面的方法,想出的第一个解决方案是使用axis的客户端来调用接口,代码如下:Java代码import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import space.QName;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver;public class TestReflection {public static void main(String[] arg) {String url = "http://192.168.1.1:9010/ZySearch";try {Service service = new Service();Call call = (Call) service.createCall();// 设置调用服务地址call.setTargetEndpointAddress(new .URL(url));//此处一定要配置wsdl的namespace参数/ZySearchcall.setOperationName(newQName("/ZySearch", "getUserLink"));//此处需要配置传入参数类型与参数名称,如果未设置jax-ws则无法接受参数,会认为传入的参数为nullcall.addParameter("linkNo",org.apache.axis.encoding.XMLType.XSD_ST RING,javax.xml.rpc.ParameterMode.IN);//如果设置类传入参数类型,此处也需要设置返回参数类型call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);call.setUseSOAPAction(true);call.setSOAPActionURI(url);String result = (String) call.invoke(new Object[] { "AD0006526305" });XStream xStream = new XStream(new DomDriver());Map map = (Map) xStream.fromXML(result);Iterator it = map.entrySet().iterator();while (it.hasNext()) {Map.Entry enty = (Entry) it.next();System.out.println(enty.getKey() + ":" + enty.getValue());}} catch (Exception e) {e.printStackTrace();}}}3.http模拟调用由于开始对axis的了解有限,在写axis调用是总是有问题,于是便想了另外一个方法,这个方法有点剑走偏锋.但是适用性却很强,因为调用的是java自带的api 不会产生兼容性问题.大家知道webservice请求实际上也就是一个http请求,将数据通过xml文件进行交换.既然知道了原理我们就可以模拟一个http请求来调用webservice.Java代码try{String url2 = "http://192.168.1.1:9010/ZySearch?wsdl";URL getUrl = new URL(url2);HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();connection.setDoOutput(true);connection.setDoInput(true);connection.setRequestMethod("POST");connection.setRequestProperty("Content-type","text/xml");connection.setRequestProperty("Accept","text/xml");connection.setRequestProperty("User-Agent","JAX-WS RI2.1.3-hudson-390-");String send="<soap:Envelopexmlns:soap=\"/soap/envelope/\"xmlns:xsd=\"/2001/XMLSchema\"xmlns:xsi=\"/2001/XMLSchema-instance\"><soap:Body><ns1:getUserLinkxmlns:ns1=\"/ZySearch\"><linkNoxmlns=\"\">"+par+"</linkNo></ns1:getUserLink></soap:Body></soap:Envel ope>";connection.getOutputStream().write(send.getBytes());connection.getOutputStream().flush();connection.getOutputStream().close();connection.connect();// 取得输入流,并使用Reader读取BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));//设置编码,否则中文乱码System.out.println("=============================");System.out.println("Contents of get request");System.out.println("=============================");String lines="";String reuslts = "";while ((lines = reader.readLine()) != null){//lines = new String(lines.getBhqytes(), "utf-8"); reuslts+=lines.replaceAll("&lt;", "<").replaceAll("&gt;", ">");}reader.close();System.out.println("type:"+connection.getContentType()); // 断开连接connection.disconnect();System.out.println(reuslts);System.out.println("============================="); System.out.println("Contents of get request ends"); System.out.println("=============================");XStream xStream = new XStream(new DomDriver());reuslts =reuslts.substring(reuslts.indexOf("<returnVal>")+11);reuslts =reuslts.substring(0,reuslts.indexOf("</returnVal>"));System.out.println(reuslts);Map result = (Map)xStream.fromXML(reuslts);Iterator it = result.entrySet().iterator();while(it.hasNext()){Map.Entry enty = (Entry) it.next();System.out.println(enty.getKey()+":"+enty.getValue());}}catch(Exception e){e.printStackTrace();}4.jax-ws调用最后再写上一个jax-ws的client代码Java代码import .MalformedURLException;import java.util.Map;import space.QName;import javax.xml.soap.MessageFactory;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPBodyElement;import javax.xml.soap.SOAPElement;import javax.xml.soap.SOAPMessage;import javax.xml.ws.BindingProvider;import javax.xml.ws.Dispatch;import javax.xml.ws.Service;import javax.xml.ws.WebServiceException;import javax.xml.ws.soap.SOAPBinding;public class Client {// 名字空间public static final String targetNamespace ="/ZySearch";//服务名public static final String serName = "UserLinkWebServiceService"; //端口名public static final String pName = "UserLinkWebServicePort";//服务地址public static final String endpointAddress ="http://192.168.1.1:9010/ZySearch?wsdl";//方法名public static final String OPER_NAME = "getUserLink";//参数名public static final String INPUT_NMAE = "linkNo";/*** @param args* @throws MalformedURLException* @throws Exception*/public static void main(String[] args) throws MalformedURLException, Exception {// TODO Auto-generated method stubQName serviceName = new QName(targetNamespace, serName);QName portName = new QName(targetNamespace, pName);javax.xml.ws.Service service = Service.create(serviceName); service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);Dispatch<SOAPMessage> dispatch =service.createDispatch(portName,SOAPMessage.class, Service.Mode.MESSAGE);BindingProvider bp = (BindingProvider) dispatch;Map<String, Object> rc = bp.getRequestContext();rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, OPER_NAME);MessageFactory factory =((SOAPBinding)bp.getBinding()).getMessageFactory();SOAPMessage request = factory.createMessage();SOAPBody body = request.getSOAPBody();QName payloadName = new QName(targetNamespace, OPER_NAME, "ns1"); SOAPBodyElement payload = body.addBodyElement(payloadName);SOAPElement message = payload.addChildElement(INPUT_NMAE);message.addTextNode("AD0006526305");SOAPMessage reply = null;try{reply = dispatch.invoke(request);}catch (WebServiceException wse){wse.printStackTrace();}SOAPBody soapBody = reply.getSOAPBody();SOAPBodyElement nextSoapBodyElement =(SOAPBodyElement)soapBody.getChildElements().next ();SOAPElement soapElement =(SOAPElement)nextSoapBodyElement.getChildElements().next();System.out.println("获取回应信息为:" +soapElement.getValue());}}。

Java使用XFire调用WebService接口

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实现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 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值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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了。

但昨天做集成测试时,把客户端发布到weblogic9.1问题就来了。

问题一:调用接口,报ng.NoSuchMethodError: javax.jws.WebService.portName()Ljava/lang/String 异常。

问题一原因:经过在网上google+baidu,找到了问题所在,原因是weblogic里面用到包%WL_HOME%\server\lib\weblogic.jar里面有javax.jws.WebService这个类,版本跟xfire里面用到的包xfire-jsr181-api-1.0-M1.jar里面的类javax.jws.WebService版本不一致,而运行时默认优先加载的是weblogic.jar 里面的类,所以引起冲突。

问题一解决方法:把xfire的包xfire-jsr181- api-1.0-M1.jar复制到%WL_HOME%\server\lib\目录下,并且修改配置文件%WL_HOME%\common\bin \commEnv.cmd(linux下修改commEnv.sh)。

找到SET WEBLOGIC_CLASSPATH= 这行,把%WL_HOME%\server\lib\xfire-jsr181-api-1.0-M1.jar加在%WL_HOME%\server\lib \weblogic.jar前面,然后保存。

重启weblogic问题一解决。

相关文档
最新文档