Java 通过AJAX调用我的Web服务更经常地导致服务器故障
我有一个在JavaSE上运行的类,它每秒通过一个线程被调用。一切正常 然而,当我将其转换为Web服务并每秒通过AJAX调用它时,我发现SOAP服务器出现故障。但是如果我每6秒钟打一次电话,一切都会好起来 我用来调用的方法无法执行该工作。它实际上成功地读取和解析了XML,但当转换为Web服务时,XML解析崩溃 当更频繁地调用Web服务时,是什么导致了故障 以下是服务器端引发的异常:Java 通过AJAX调用我的Web服务更经常地导致服务器故障,java,ajax,xml,jax-ws,Java,Ajax,Xml,Jax Ws,我有一个在JavaSE上运行的类,它每秒通过一个线程被调用。一切正常 然而,当我将其转换为Web服务并每秒通过AJAX调用它时,我发现SOAP服务器出现故障。但是如果我每6秒钟打一次电话,一切都会好起来 我用来调用的方法无法执行该工作。它实际上成功地读取和解析了XML,但当转换为Web服务时,XML解析崩溃 当更频繁地调用Web服务时,是什么导致了故障 以下是服务器端引发的异常: [Fatal Error] :1:7: A pseudo attribute name is expected.
[Fatal Error] :1:7: A pseudo attribute name is expected.
Sep 25, 2014 3:22:46 PM com.sun.xml.internal.ws.server.sei.TieHandler createResponse
SEVERE: null
java.lang.NullPointerException
at Targets.XML.TESXMLStringToArrays(XML.java:209)
at Navires.Vessel.allVessels(Vessel.java:137)
at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.xml.internal.ws.api.server.MethodUtil.invoke(Unknown Source)
at com.sun.xml.internal.ws.api.server.InstanceResolver$1.invoke(Unknown Source)
at com.sun.xml.internal.ws.server.InvokerTube$2.invoke(Unknown Source)
at com.sun.xml.internal.ws.server.sei.SEIInvokerTube.processRequest(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(Unknown Source)
at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(Unknown Source)
at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(Unknown Source)
at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(Unknown Source)
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source)
at sun.net.httpserver.AuthFilter.doFilter(Unknown Source)
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(Unknown Source)
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source)
at sun.net.httpserver.ServerImpl$Exchange.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
以下是在客户端引发的异常:
Sep 25, 2014 3:22:39 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/Map] threw exception [An exception occurred processing JSP page /targets.jsp at line 17
14:
15: Vessel M = V.getVesselPort() ;
16:
17: List<Vessel_Type> vessel =M.allVessels ();
18:
19: int j =0 ;
20: k="{"+'"'+"vessels"+'"'+":[" ;
Stacktrace:] with root cause
com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: java.lang.NullPointerException Please see the server log to find more detail regarding exact cause of the failure.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(Unknown Source)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(Unknown Source)
at com.sun.xml.internal.ws.client.sei.StubHandler.readResponse(Unknown Source)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(Unknown Source)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at com.sun.proxy.$Proxy35.allVessels(Unknown Source)
at org.apache.jsp.targets_jsp._jspService(targets_jsp.java:90)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
当一个客户端调用Web服务时,这种情况经常发生。但是,当两个客户端调用web服务时,它会立即在服务器端和客户端崩溃。执行Ajax调用时会引发这些异常
编辑:添加详细信息
问题来自应用程序体系结构
以下是它的工作原理:
1服务器将打开到另一个服务器的套接字连接,并通过关闭连接获取XML数据
2服务器将XML数据格式化为数组,并通过webservice使其可用
3客户端调用Web服务以获取阵列数据
因此,如果我尝试在不到6秒的时间内对Web服务进行Ajax调用,我会收到以前发布的错误
当我在1中检查日志时,我可以看到错误是因为连接已关闭,因此2将自动导致错误
我可以通过多次调用eclipse多次单击来运行调用Web服务的java方法,或者通过使用ajax的JSP页面使用多个客户端调用Web服务,或者简单地通过快速调用ajax来触发错误
在1中,我可以使用许多客户端来打开连接并快速获取数据,而不会出现任何问题
因此,如果我将webmethod声明为synchronized,则可以解决我遇到的错误,不会出现任何错误,但是速度非常慢,因为多重调用将挂起,直到处理完毕
我无法理解的是,为什么在SE中,我可以每秒调用2次并获取数据,甚至更好的是,我可以在不同的机器中同时执行此操作,而不会出现任何日志错误,并且数据是100干净的,而在webservice EE中,它会失败。。。我要重新配置我的Web服务吗?查看架构?问题来自:
public class cnx {
static Socket socket ;
现在可以通过从类属性中移除套接字并将其作为局部变量放入类中来解决这个问题
但在服务器端,在我提取数据的地方,我可以看到许多连接被启动,同时只有一个客户端被连接,这是由于每秒有多个调用,要处理的数据需要2秒钟
如果您有更好的选择,请与我们分享。好,我将添加更多详细信息。谢谢