当前位置:编程学习 > JAVA >>

200在线急救,关于xfire写的webservice问题!

本地webservice采用xfire实现,services下有如下几个方法:

//方法一
public void NotifyStatus(int eventID, String sessionID,int res,String para1); 

//方法二
public void EchoOfSendSMS(String ucNum, String cee, int msgid, int res, String recvt);

//方法三
public String RecvSMS(String caller, String time, String cont, String ucNum);

//方法四
public String RecvSMSV2(String caller, String time, String cont, String ucNum,int charset);


其中方法一、二客户端正常调用,方法三、四是两个相似的方法,客户端根据版本不同分别调用方法三和方法四。

问题出现了,在客户端调用(还未进入方法内)方法三或方法四时报错如下:(我自己写的客户端去调用方法三和四就不会报错)
我想请教的问题是:
1、有什么方法可以监控到客户端调用的是RecvSMS还是RecvSMSV2?
2、这错误我应该从何下手?

2010-12-28 01:13:51,156 [http-8080-Processor24] ERROR [org.codehaus.xfire.handler.DefaultFaultHandler] - Fault occurred!
java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
        at java.util.LinkedList.entry(LinkedList.java:368)
        at java.util.LinkedList.get(LinkedList.java:313)
        at java.util.Collections$UnmodifiableList.get(Collections.java:1155)
        at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:191)
        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)
        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:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Thread.java:595) --------------------编程问答-------------------- 哪用List 了,
我也想知道有什么方法可以监控到客户端调用的是哪个方法 --------------------编程问答-------------------- 没碰到过类似情况,错误堆栈中貌似也没有调用哪个方法的信息,最后是IndexOutOfBound比较奇怪,建议多尝试修改目标方法签名(参数类型,参数个数,以及方法名等),收集更多资料缩小可以导致出错的范围

抓http消息的话也许可以获得是调用哪个方法的信息 --------------------编程问答-------------------- 你先把你的接口实现类贴出来啊! --------------------编程问答-------------------- 我没做任何实现,只是打印了参数,代码如下!

public void NotifyStatus(int eventID, String sessionID, int res,String para1) {
System.out.println("回调地址被触发............");
System.out.println("eventID是............"+eventID);
System.out.println("sessionID是............"+sessionID);
System.out.println("res是............"+res);
System.out.println("para1是............"+para1);
}

public void EchoOfSendSMS(String ucNum, String cee, int msgid, int res,String recvt) {
System.out.println("短信发送状态接收.......................");
System.out.println("发送方号码......................."+ucNum);
System.out.println("接收方号码......................."+cee);
System.out.println("msgid客户端唯一标识......................."+cee);
System.out.println("res回执结果......................."+res);
System.out.println("recvt回执结果......................."+recvt);
}

public String RecvSMS(String caller, String time, String cont, String ucNum) {
System.out.println("短信接收方法开始.......................");
System.out.println("发送方号码......................."+caller);
System.out.println("发送时间......................."+time);
System.out.println("发送内容......................."+Base64Utils.BASE64Decoder(cont));
System.out.println("接受者号码......................."+ucNum);
return "0";
}

public String RecvSMSV2(String caller, String time, String cont,String ucNum,int charset) {
System.out.println("短信接收方法开始.......................");
System.out.println("发送方号码......................."+caller);
System.out.println("发送时间......................."+time);
System.out.println("发送内容......................."+Base64Utils.BASE64Decoder(cont));
System.out.println("接受者号码......................."+ucNum);
System.out.println("编码方式......................."+charset);
return "0";
}
--------------------编程问答-------------------- 那就是在掉用你的接口之前的代码出错了!你看一下你哪里掉的这个接口!要不就是webservices在调用其他语言的时候,其他的那个报错了!仔细检查一下吧! --------------------编程问答-------------------- 方法名改一下,两个方法名别那么相似,之前做报错就有这个疑问!
或者是哪有重名的 --------------------编程问答-------------------- 怎么不用axis2或者CXF呢! --------------------编程问答--------------------
java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
//方法三
public String RecvSMS(String caller, String time, String cont, String ucNum);

//方法四
public String RecvSMSV2(String caller, String time, String cont, String ucNum,int charset);

应该是你调用方法三的时候传递的参数格式有5个,但是只接收4个,所以索引越界了。 --------------------编程问答--------------------
引用楼主 montao 的回复:
本地webservice采用xfire实现,services下有如下几个方法:

客户端根据版本不同分别调用方法三和方法四


根据什么版本去判断
--------------------编程问答-------------------- 谢谢大家的指教,该问题已经解决! --------------------编程问答-------------------- 数组越界 错误。

既然 都已经解决了, 那就来蹭点分算了。 --------------------编程问答-------------------- 怎么解决的贴出来嘛 --------------------编程问答-------------------- 麻烦能告诉一下这个问题是 怎么解决的吗?小弟也遇到了同样的错误了
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,