如何解决java axis java调用webservicee服务器操作异常

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
一个axis2的webservice调用异常,当家帮忙看看如何解决呀
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口&1.准备工作:
概念:SOAP(简单对象访问协议)、WSDL(web服务描述语言)、XML(可扩展标记语言)、axis(阿帕奇可扩展交互系统)
(1)&&&& 下载axis1.4,将axis1.4中的axis项目中WEB-INF\lib,将lib下的jar文件拷贝到工程如webservice的WEB-INF\lib下
(2)&&&& 将axis1.4中的axis项目,拷贝到tomcat的webapps目录下
(3)&& 配置Java和Tomcat环境,设置axis环境,类似jdk的配置方法,例如:
AXIS_HOME= E:\apache-tomcat-6.0.37-windows-x86\apache-tomcat-6.0.37\webapps\axis&
AXIS_LIB=%AXIS_HOME%\lib
AXISCLASSPATH=%AXIS_LIB%\axis.%AXIS_LIB%\commons-discovery-0.2.%AXIS_LIB%\commons-logging-1.0.4.%AXIS_LIB%\jaxrpc.%AXIS_LIB%\saaj.%AXIS_LIB%\log4j-1.2.8.AXIS_LIB%\xml-apis.%AXIS_LIB%\xercesImpl.jar&&&& (最后两个可能没有,不是必须的)
(4)&&&&&& 配置web.xml添加
&&?xml version="1.0" encoding="ISO-8859-1"?&
&!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" "/dtd/web-app_2_3.dtd"&
&display-name&Apache-Axis&/display-name&
&listener&
&listener-class&org.apache.axis.transport.http.AxisHTTPSessionListener&/listener-class&
&/listener&
&servlet-name&AxisServlet&/servlet-name&
&display-name&Apache-Axis Servlet&/display-name&
&servlet-class&
org.apache.axis.transport.http.AxisServlet
&&& &/servlet-class&
&/servlet&
&servlet-name&AdminServlet&/servlet-name&
&display-name&Axis Admin Servlet&/display-name&
&servlet-class&
org.apache.axis.transport.http.AdminServlet
&&& &/servlet-class&
&load-on-startup&100&/load-on-startup&
&/servlet&
&servlet-name&SOAPMonitorService&/servlet-name&
&display-name&SOAPMonitorService&/display-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&
&session-config&
&session-timeout&5&/session-timeout&
&/session-config&
&mime-mapping&
&extension&wsdl&/extension&
&mime-type&text/xml&/mime-type&
&/mime-mapping&
&mime-mapping&
&extension&xsd&/extension&
&mime-type&text/xml&/mime-type&
&/mime-mapping&
&welcome-file-list id="WelcomeFileList"&
&welcome-file&index.jsp&/welcome-file&
&welcome-file&index.html&/welcome-file&
&welcome-file&index.jws&/welcome-file&
&/welcome-file-list&
&/web-app&
1.写一个方法类,以bean的形式作为入参
RequestBean.java
package com.webservice.
public class RequestBean {
&&& private S
&&& public String getMsg()
&&&&&& return
&&& public void setMsg(String msg)
&&&&&& this.msg =
2.写一个方法类,以bean的形式作为回参
ResultResponse.java
package com.webservice.
public class ResultResponse {
&&& private int
&&& private String errorM
&&& public int getCode()
&&&&&& return
&&& public void setCode(int code)
&&&&&& this.code =
&&& public String getErrorMsg()
&&&&&& return errorM
&&& public void setErrorMsg(String errorMsg)
&&&&&& this.errorMsg = errorM
3.写一个方法类service,以上面两个bean作为入参和回参
BusinessService.java
package com.webservice.
import com.webservice.request.RequestB
import com.webservice.respone.ResultR
public class BusinessService {
&&& public ResultResponse send(RequestBean requestBean)
&&&&&& ResultResponse res = new ResultResponse();
&&&&&& try
&&&&&&&&&& String msg = requestBean.getMsg();
&&&&&&&&&& System.out.println("收到消息:" + msg);
&&&&&&&&&& if (null != msg && !"".equals(msg))
&&&&&&&&&& {
&&&&&&&&&&&&& res.setCode(0);
&&&&&&&&&&&&& res.setErrorMsg("ok");
&&&&&&&&&& } else
&&&&&&&&&& {
&&&&&&&&&&&&& res.setCode(-1);
&&&&&&&&&&&&& res.setErrorMsg("msg is null");
&&&&&&&&&& }
&&&&&& } catch (Exception e)
&&&&&&&&&& res.setCode(-1);
&&&&&&&&&& res.setErrorMsg("exception:" + e.getMessage());
&&&&&& return
4.在工程的WEB-INF目录下 编写deploy.wsdd
主要用来定义service名字,描述service、入参、回参
&deployment xmlns="http://xml.apache.org/axis/wsdd/"
&&& xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&
&&& &service name="businessService" provider="java:RPC"&
&&&&&& &parameter name="className" value="com.webservice.service.BusinessService" /&
&&&&&& &parameter name="allowedMethods" value="*" /&
&&&&&& &beanMapping qname="myNS:RequestBean" xmlns:myNS="urn:BeanService"
&&&&&& &&& languageSpecificType="java:com.webservice.request.RequestBean" /&
&&&&&& &beanMapping qname="myNS:ResultResponse" xmlns:myNS="urn:BeanService"
&&&&&& &&& languageSpecificType="java:com.webservice.respone.ResultResponse" /&
&&& &/service&
&/deployment&
5. 在工程的WEB-INF目录下编写undeploy.wsdd
用来卸载webservice服务
&undeployment xmlns="http://xml.apache.org/axis/wsdd/"&
&& &service name="businessService"/&
&/undeployment&
6. 部署项目(启动tomcat),接下来发布接口(关键一步)
进入到tomcat的项目中的WEB-INF目录下,执行下列命令进行发布。会在此WEB-INF下生成server-config.wsdd文件(以后可以在此目录配置其他接口)
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://192.168.30.143:8080/webservice/servlet/AxisServlet deploy.wsdd
Ps:下面命令用于取消一个已经发布的服务
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://192.168.30.143:8080/webservice/servlet/AxisServlet undeploy.wsdd
7.获取wsdl(完成)
(1)重启tomcat,访问工程目录,如:http://192.168.30.143:8080/webservice/servlet/AxisServlet(其中webservice为工程名)
(2)可以看到新的服务方法businessService,点击一下,跳刀wsdl内容页面,ctr+A拷贝到文本编辑器,去掉开头的空格,替换去掉所有开头的&-&为空(即将- &替换为&);另存为businessService.wsdl,即可提供其他方使用,注意:如果部署在linux上,要访问linux的网页获取wsdl,不然可能会有问题。
-----------------------------------------------至此发布完毕------------------------------------------------
3.测试验证
1.根据wsdl生成客户端代码
(1)首先制作生成代码工具,方便以后重用;
在D:\webservice,放个axis1.4的包,创建一个批处理文件&wsdl生成java客户端文件.bat&,内容如下:根据实际情况配置
set Axis_Lib=D:\webservice\axis1.4\axis\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\webservice\Testclient
set Package=com.my.client
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% D:\webservice\businessService.wsdl
@echo& -------------OK-----------------
@echo ---The code has been created in the folder: Testclient---
说明:蓝色部分根据实际情况调整
Axis_Lib 是axis1.4的lib位置
Output_Path是生成客户端代码存放位置
Package 是生成客户端代码所在包
最后是wsdl文件位置
(2)生成客户端代码
将wsdl文件,如businessService.wsdl放到D:\webservice下(上一步应该做了),执行文件&wsdl生成java客户端文件.bat&,即可生成客户端代码,在Testclient目录。
2.测试接口
将生成的客户端带拷贝到java或其他web工程的src下
建立测试java类,如Test.java,测试完成
public class Test {
&&& public static void main(String[] args) throws RemoteException,
&&&&&&&&&& ServiceException, MalformedURLException
&&&&&& // BusinessServiceService为接口;BusinessServiceServiceLocator为接口实现类
&&&&&& BusinessServiceService service = new BusinessServiceServiceLocator();
&&&&&& // 设置要使用的接口服务地址:多用于动态调用不同服务器上的接口
&&&&&& URL portAddress = new URL(
&&&&&&&&&& &&& "http://192.168.30.143:8080/webservice/services/businessService");
&&&&&& BusinessService client = service.getbusinessService(portAddress);
&&&&&& // 传参数bean
&&&&&& RequestBean requestBean = new RequestBean();
&&&&&& requestBean.setMsg(".cn");
&&&&&& // requestBean.setMsg("");
&&&&&& // 发送并接收返回的结果
&&&&&& ResultResponse resp = client.send(requestBean);
&&&&&& System.out.println("消息已发送...");
&&&&&& int code = resp.getCode();
&&&&&& String errorMsg = resp.getErrorMsg();
&&&&&& System.out.println("消息已返回,code=" + code + ",errorMsg=" + errorMsg);
阅读(...) 评论()多次使用axis2调用webservice后,报连接超时错误 - webservice- - ITkeyowrd
多次使用axis2调用webservice后,报连接超时错误
推荐:以下代码为调用 JAVA 调用Axis2 code generator 生成的webservice的代码。import java.rmi.RemoteEimport org.apache.axis2.A
多次使用axis2调用webservice后,报连接超时错误 分类: WebService
16:36 766人阅读 评论(0) 收藏 举报 使用Axis2d的RPCServiceClient调用webservice,连续调用几次web服务后,后台报错,如下所示: [html] view plain copy mons.httpclient.ConnectionPoolTimeoutException: Timeout waiting for connectionat mons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:497)at mons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)at mons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)at mons.httpclient.HttpClient.executeMethod(HttpClient.java:397)at mons.httpclient.HttpClient.executeMethod(HttpClient.java:346)at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:542)at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)at org.apache.axis2.monsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)at org.apache.axis2.monsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)at com.res.rc.client.RPCClient.callService(RPCClient.java:282)at com.res.rc.handlers.service.ServiceListHandler.doWebServiceAndReturn(ServiceListHandler.java:337)at com.res.rc.handlers.service.ServiceListHandler.process(ServiceListHandler.java:126)at com.res.framework.handler.OnlineHandler.handleRequest(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doService(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doPost(Unknown Source)at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.res.portal.init.SetCharacterEncodingFilter.doFilter(Unknown Source)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:619)org.apache.axis2.AxisFault: Timeout waiting for connectionat org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)at org.apache.axis推荐:Axis2和Axis相比,增加了异步调用的方式,而且代码的使用更方便。本文用一个例子来描述如何快速使用Axis2来创建WebService客户端代码。 1 准备环境 (1)下载Axis22.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203)at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)at org.apache.axis2.monsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)at org.apache.axis2.monsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)at com.res.rc.client.RPCClient.callService(RPCClient.java:282)at com.res.rc.handlers.service.ServiceListHandler.doWebServiceAndReturn(ServiceListHandler.java:337)at com.res.rc.handlers.service.ServiceListHandler.process(ServiceListHandler.java:126)at com.res.framework.handler.OnlineHandler.handleRequest(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doService(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doPost(Unknown Source)at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.res.portal.init.SetCharacterEncodingFilter.doFilter(Unknown Source)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:619)解决办法: [java] view plain copy try{serviceClient = new RPCServiceClient ();Options options = serviceClient.getOptions();//指定调用WebService的URLEndpointReference targetEPR = new EndpointReference(wsURL);options.setTo(targetEPR);options.setManageSession(true);options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);//指定某调用方法的参数值Object[] opAddEntryArgs = inPClass[] classes = outParamC//指定要调用的getGreeting方法及WSDL文件的命名空间QName opAddEntry = new QName(nameSpace, methodName);Object[] result=serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);serviceClient.cleanupTransport();}catch (AxisFault e){e.printStackTrace();}catch (Exception e){e.printStackTrace();}上述代码中的 [java] view plain copy options.setManageSession(true);options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);serviceClient.cleanupTransport();可以解决多次调用webservice后的连接超时异常 该错误参照apache官网: https://issues.apache.org/jira/browse/AXIS2-4797
推荐:我用的是axis2-1.6.2版本。请看下面的客户端代码: import org.apache.axis2.client.O import com.ctis.ta.service.impl.OpenAccountForUnitServiceS
多次使用axis2调用webservice后,报连接超时错误 分类: WebService
16:36 766人阅读 评论(0) 收藏 举报 使用Axis2d的RPCServiceClient调用webservice,连续调用几次web服务后,后台
相关阅读排行
相关内容推荐
请激活账号
为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。
您的注册邮箱:
如果您没有收到激活邮件,请注意检查垃圾箱。使用axis调用WebService - gqsunrise - ITeye博客
博客分类:
公司项目有一个给用户发送短信的需求,需要调用一个.NET写的WebService。在写客户端过程中,遇到了不少的问题,在这里整理下,也希望和我遇到同样问题的小伙伴些少走点弯路。
直接上代码:
public static boolean send(String MsgContent, String DestNumber){
boolean res =
// webservice路径
// 这里后面加不加 "?wsdl" 效果都一样的
String endpoint = ":8080/SmsService/SmsService.asmx";
// 发送短信接口方法名
String operationName = "SendEx";
String targetNamespace = "http://tempuri.org/";
// 定义service对象
Service service = new Service();
// 创建一个call对象
Call call = (Call) service.createCall();
// 设置目标地址,即webservice路径
call.setTargetEndpointAddress(endpoint);
// 设置操作名称,即方法名称
call.setOperationName(new QName(targetNamespace, operationName));
// 设置方法参数
call.addParameter(new QName(targetNamespace, "UserId"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "Password"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "MsgContent"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "DestNumber"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "SendTime"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "SubNumber"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "BatchSendID"),
XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter(new QName(targetNamespace, "BizType"),
XMLType.XSD_STRING,
ParameterMode.IN);
// XMLType.XSD_INT
call.addParameter(new QName(targetNamespace, "WapURL"),
XMLType.XSD_STRING,
ParameterMode.IN);
* 设置返回值类型-由于文档给的是返回一个代理类SendExResp-这个需要用ws工具生成,不然就要手动写,
* 故这里设置成org.w3c.dom.Element.class,不然会报org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected错误。
* 注:具体的返回类型,根据对方提供的ws进行设置即可,如:call.setReturnClass(String[].class);
call.setReturnClass(org.w3c.dom.Element.class);
// 解决错误:服务器未能识别 HTTP 头 SOAPAction 的值
call.setUseSOAPAction(true);
call.setSOAPActionURI(targetNamespace + operationName);
// 调用ws方法
call.invoke(new Object[]{SMS.USERID, SMS.PASSWORD, MsgContent, DestNumber, SMS.SENDTIME, SMS.SUBNUMBER, SMS.BATCHSENDID, SMS.BIZTYPE, SMS.WAPURL});
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
注:上述WSDL里面描述的参数BIZTYPE是int类型的,但传递参数时要传递字符串类型,否则报如下错误:
服务器无法读取请求。 ---& XML 文档(1, 841)中有错误。 ---& 输入字符串的格式不正确
浏览 12223
浏览: 305542 次
来自: 成都
还有一些url,抓图片的时候会提示脚本错误什么的,什么情况?
为什么 给 有些url,就抓不了图片呢
总结很好。
elvwong 写道请问:IECapt.exe 是什么文件?根 ...
请问:IECapt.exe 是什么文件?

我要回帖

更多关于 纯java调用webservice 的文章

 

随机推荐