xfire 窄接口方式实现的客户端、偶尔报错,请指教

11097082 2014-02-18 09:48:23
服务器端也是用XFIRE写的,客户端端利用窄接口的方式进行实现,测试通过,但是运行起来,偶尔会报错,并且如果这个客户端运行的频率越高报错的几率及越大,请大大帮忙。


String serviceUrl = "http://127.0.0.1:8080/ws/services/TestModelService";


Service serviceModel = new ObjectServiceFactory().create(ITestModelService.class, null,
serviceUrl , null);

XFireProxyFactory serviceFactory = new XFireProxyFactory();
TestModel tm=new TestModel();
tm.setId(111);
tm.setMobile("133333333");
tm.setName("zzzzzzzzzzzz");
try {
ITestModelService tws=(ITestModelService)serviceFactory.create(serviceModel, serviceUrl);

String rs=tws.addModel(tm);
System.out.println(rs);

TestModel tm1=tws.getModel();

System.out.println(tm1.getName());


} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


这个代码可以运行,但是当5秒运行一次,就会报错:
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Fault: java.lang.NullPointerException
org.codehaus.xfire.fault.XFireFault: Fault: java.lang.NullPointerException
at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)
at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)


有时甚至会出现SOKET没有关闭的情况。
...全文
375 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
11097082 2014-02-20
  • 打赏
  • 举报
回复
大概每6小时左右还会出现这样的一个错误:

2014-02-20 21:23:30  ERROR FaultSender.invoke(41) | Could not send fault.
org.codehaus.xfire.fault.XFireFault: Couldn't write message.
	at org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:92)
	at org.codehaus.xfire.transport.http.HttpChannel.writeWithoutAttachments(HttpChannel.java:56)
	at org.codehaus.xfire.transport.http.XFireServletChannel.sendViaServlet(XFireServletChannel.java:87)
	at org.codehaus.xfire.transport.http.XFireServletChannel.send(XFireServletChannel.java:44)
	at org.codehaus.xfire.fault.FaultSender.invoke(FaultSender.java:37)
	at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
	at org.codehaus.xfire.handler.DefaultFaultHandler.sendFault(DefaultFaultHandler.java:88)
	at org.codehaus.xfire.handler.DefaultFaultHandler.invoke(DefaultFaultHandler.java:51)
	at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:77)
	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:643)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:73)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at zhi.architecture.filter.CheckLogonFilter.doFilter(CheckLogonFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:891)
	at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:750)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2282)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: javax.xml.stream.XMLStreamException: ClientAbortException:  java.io.IOException: 远程主机强迫关闭了一个现有的连接。
	at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.flush(XMLStreamWriterImpl.java:389)
	at org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:88)
	... 38 more
Caused by: ClientAbortException:  java.io.IOException: 远程主机强迫关闭了一个现有的连接。
	at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:330)
	at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:296)
	at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:124)
	at com.sun.xml.internal.stream.writers.UTF8OutputStreamWriter.flush(UTF8OutputStreamWriter.java:140)
	at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.flush(XMLStreamWriterImpl.java:387)
	... 39 more
Caused by: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
	at sun.nio.ch.SocketDispatcher.write0(Native Method)
	at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)
	at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
	at sun.nio.ch.IOUtil.write(IOUtil.java:75)
	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334)
	at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:116)
	at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:93)
	at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:156)
	at org.apache.coyote.http11.InternalNioOutputBuffer.writeToSocket(InternalNioOutputBuffer.java:460)
	at org.apache.coyote.http11.InternalNioOutputBuffer.flushBuffer(InternalNioOutputBuffer.java:800)
	at org.apache.coyote.http11.InternalNioOutputBuffer.flush(InternalNioOutputBuffer.java:319)
	at org.apache.coyote.http11.Http11NioProcessor.action(Http11NioProcessor.java:1071)
	at org.apache.coyote.Response.action(Response.java:183)
	at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:325)
	... 44 more
11097082 2014-02-20
  • 打赏
  • 举报
回复
引用 10 楼 11097082 的回复:
对的,因为我使用一天timer定时通过WEBSERVICE上报信息,通常是可以的,但是有时候会报错; 而且有时发现链接服务端被拒绝,好像服务端的WEBSERVICE被关闭一样,但是通过HTTP是可以登录到服务平台。
对于服务端的WEBSERVICE类似宕机情况,只有重启TOMCAT才能 解决。我平台的系统是SSH2
11097082 2014-02-20
  • 打赏
  • 举报
回复
对的,因为我使用一天timer定时通过WEBSERVICE上报信息,通常是可以的,但是有时候会报错; 而且有时发现链接服务端被拒绝,好像服务端的WEBSERVICE被关闭一样,但是通过HTTP是可以登录到服务平台。
ay转身遇 2014-02-20
  • 打赏
  • 举报
回复
楼主的意思是 有时候程序运行正常?有时候报空指针异常?
11097082 2014-02-20
  • 打赏
  • 举报
回复
服务器端也报错,但是不知道什么问题,大部分时间是正常的,偶尔报错

2014-02-20 11:40:12  ERROR DefaultFaultHandler.invoke(35) | Fault occurred!
java.lang.NullPointerException
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(XMLEntityScanner.java:1598)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1684)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$XMLDeclDriver.next(XMLDocumentScannerImpl.java:794)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:548)
	at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:44)
	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:643)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:73)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at zhi.architecture.filter.CheckLogonFilter.doFilter(CheckLogonFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760)
	at java.lang.Thread.run(Thread.java:619)
11097082 2014-02-18
  • 打赏
  • 举报
回复
CSDN没落了,没高手了
11097082 2014-02-18
  • 打赏
  • 举报
回复
唉,没人懂啊?!
learnejb 2014-02-18
  • 打赏
  • 举报
回复
也许是服务端的问题,服务端返回的soap报文不合法引起客户端readMessage出现异常,检查下服务端日志 或者直接wireshark类软件监控此端口的http消息,检查出问题时的请求/应答报文内容
11097082 2014-02-18
  • 打赏
  • 举报
回复
我测试代码、准备用作设备状态上报的,计划通过定时器每5秒执行一次,大部分时候运行正确的,但是就是偶尔会报错,我是奇怪好好可以运行的程序,没理由会出现空指针啊
teemai 2014-02-18
  • 打赏
  • 举报
回复
空指针还不好去debug吗? 还有你的代码哪里每五秒执行一次了?
安心逍遥 2014-02-18
  • 打赏
  • 举报
回复
java.lang.NullPointerException 空指针,太常见的错误了。自己调试一下吧,问题不大

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧