2014-09-25 78 views
0

我有一个在Java SE上运行的类,每秒都会通过线程调用它。一切正常。通过AJAX调用我的WebService更经常会导致服务器故障

但是,当我将其转换为WebService并每秒通过AJAX调用它时,我都会遇到SOAP服务器故障。但是,如果我每6秒钟呼叫一次,一切都很好。

我以前拨打的方法无法执行此项工作。它实际上成功读取和解析XML,但是当转换为WebService时,XML解析会崩溃。

当更频繁地调用WebService时,会导致错误的原因是什么?

这里是扔在服务器端异常:

[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服务。但是,当2个客户端调用Web服务时,它立即在服务器和客户端崩溃。这些异常在执行Ajax调用时引发。

编辑:添加详细信息。

问题来自应用程序体系结构。

这里是它如何工作的:

1)服务器将打开一个套接字连接到另一台服务器并获取XML数据密切相关。

2)服务器将格式化XML数据阵列,并通过Web服务

3)客户端调用web服务,以获得阵列数据可用它。

所以,如果我尝试使Ajax调用web服务少于6秒我得到我以前发布的错误。

当我检查登录1)我可以看到,错误是因为连接已关闭,所以2)会自动导致错误。

我可以通过调用多次触发错误(通过Eclipse多次点击运行java方法调用web服务),或者通过使用多个客户端通过具有ajax的JSP页面调用webservice,或者简单地通过调用ajax调用快速。

在1)我可以使用许多客户端打开连接,并获取数据非常快速地没有任何问题。

所以,我得到的错误可以解决,如果我宣布webmethod作为同步,没有错误会出现,但它是非常非常慢,因为多个电话将挂起直到处理。

我在哪里我不明白的是为什么在SE我可以每秒调用2次并获取数据,甚至更好我可以在不同的机器中同时做到这一点,没有任何日志错误和数据在webservice (EE)它失败...我应该重新配置我的web服务?审查架构?

+0

好吧添加更多详情。谢谢 – Java 2014-09-25 13:14:15

回答

0

的问题来自:

public class cnx { 

static Socket socket ; 

现在,它是通过从类属性插座,并把它的内部类为局部变量解决。在服务器端(我拉数据),我可以看到许多连接同时启动,只有一个客户端连接,这是由于多次调用(每秒和要处理的数据需要2秒)。

如果您有更好的选择,请分享。