Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Передача данных из апплета в сервлет


Автор: mickhalich 6.7.2006, 10:46
Суть такова. Есть связка апплет+сервлет+БД. Из апплета с помощью SOAP передаются некоторые данные (упаковываются в SOAPMessage и посылаются через SOAPConnection). Сервлет принимает эти данные и отправляет ответ апплету, что все ОК. А вот когда необходимо обработать полученное сообщение выплывает ошибка.

Код сервлета:
Код

 public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
 {
  MessageFactory fac = MessageFactory.newInstance();
  SOAPMessage msg = null;
  saveError = "";

  try
  {
   // Get all the headers from the HTTP request
   MimeHeaders headers = getHeaders(request);

   // Get the body of the HTTP request
   InputStream is = request.getInputStream();

   // Now internalize the contents of the HTTP request
   // and create a SOAPMessage
   msg = fac.createMessage(headers, is);
  }
  catch (Exception e)
  {
   LOGGER.error("Input error: "+e.toString());
  }

  try
  {
   SOAPBody soapBody = msg.getSOAPBody();

   //Next, the code declares the SOAPMessage object reply and populates it by calling the method onMessage.
   SOAPMessage reply = null;
   reply = onMessage(msg);

   if (reply != null)
   {
    response.setStatus(HttpServletResponse.SC_OK);
    putHeaders(reply.getMimeHeaders(), response);

    // Write out the message on the response stream
    OutputStream os = response.getOutputStream();
    reply.writeTo(os);
    os.flush();
   }
   else response.setStatus(HttpServletResponse.SC_NO_CONTENT);
  }
  catch (Exception e)
  {
   LOGGER.error("Output error: "+e.toString());
  }
 }


Ошибка возникает в строке
Код

SOAPBody soapBody = msg.getSOAPBody(); 

если её закомментить, все в порядке, ответ отправляется благополучно.

Ошибка в логах
Код

javax.servlet.ServletException: Servlet execution threw an exception
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:222)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:595)
----- Root Cause -----
java.lang.NoSuchMethodError: javax.xml.parsers.SAXParserFactory.getSchema()Ljavax/xml/validation/Schema;
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:124)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:98)
    at com.sun.xml.messaging.saaj.util.ParserPool.get(ParserPool.java:42)
    at com.sun.xml.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:59)
    at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:51)
    at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:106)
    at com.sun.xml.messaging.saaj.soap.MessageImpl.getSOAPBody(MessageImpl.java:1215)
    at ru.barmaley.citymap.serv.SaveXmlServlet.doPost(SaveXmlServlet.java:73)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:595)


И ответ апплету приходит тоже ошибочный (его я пока приводить не буду).
Долго думал, но так и не понял, где же тут ошибка  smile 

JVM 1.5.0_06-b05
Tomcat 4.1 

Автор: MAPCUAHUH 6.7.2006, 11:04
 Здраствуйте mickhalich,
   мне кажется ты используешь устарелую версию SAX. Эта реализация не содержит метода 
   javax.xml.parsers.SAXParserFactory.getSchema() об этом он  тебе и сообщает:

Цитата

32: java.lang.NoSuchMethodError: javax.xml.parsers.SAXParserFactory.getSchema()  


попробуй обновить томкат или SAX




 

Автор: mickhalich 6.7.2006, 11:31
Цитата(MAPCUAHUH @ 6.7.2006,  11:04)
Здраствуйте mickhalich,
   мне кажется ты используешь устарелую версию SAX. Эта реализация не содержит метода 
   javax.xml.parsers.SAXParserFactory.getSchema() об этом он  тебе и сообщает:

Цитата

32: java.lang.NoSuchMethodError: javax.xml.parsers.SAXParserFactory.getSchema()  


попробуй обновить томкат или SAX

Да, но ведь в апплете при аналогичном:
Код

   SOAPMessage response = connection.call(message, url);

   if (response != null)
   {
    SOAPBody soapBody = response.getSOAPBody();
   }

подобная ошибка не всплывает!

Интересно, оправдано ли использование Tomcat 4.1 с Java 1.5. А то может он и не умеет с новыми библиотеками работать? 

Автор: MAPCUAHUH 6.7.2006, 12:08
Но ведь апплет работает не в среде Tomcat,  а в среде браузера. Попробуй поставить Tomcat 1.5 

Автор: mickhalich 6.7.2006, 12:45
Цитата(MAPCUAHUH @ 6.7.2006,  12:08)
Но ведь апплет работает не в среде Tomcat,  а в среде браузера. Попробуй поставить Tomcat 1.5

Но ведь можно скопировать библиотеки из JRE в WEB-INF/lib!  smile 

Ладно, попробую с Tomcat 5.1 

Автор: mickhalich 6.7.2006, 14:05
Нет, ты знаешь, с Tomcat 5.1 тоже ничего не получилось  smile 
Такая же ошибка
Код

2006-07-06 14:59:00 StandardWrapperValve[SaveData]: Servlet.service() for servlet SaveData threw exception
java.lang.NoSuchMethodError: javax.xml.parsers.SAXParserFactory.getSchema()Ljavax/xml/validation/Schema;
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:124)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:98)
    at com.sun.xml.messaging.saaj.util.ParserPool.get(ParserPool.java:42)
    at com.sun.xml.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:59)
    at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:51)
    at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:106)
    at com.sun.xml.messaging.saaj.soap.MessageImpl.getSOAPBody(MessageImpl.java:1215)
    at ru.barmaley.citymap.serv.SaveXmlServlet.doPost(SaveXmlServlet.java:73)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:595)
 

Автор: mickhalich 7.7.2006, 11:07
Да, MAPCUAHUH, ты абсолютно прав!
Томкеты (и 4.1, и 5.0) реализуют J2EE1.4, а в нем для javax.xml.parsers.SAXParserFactory метода getSchema() не существует. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)