2012-09-03 43 views
0

我使用Eclipse IDE的Juno和Tomcat 7.0在JAVA中使用客户端 - 服务器应用程序的动态Spring AOP?

我有一台服务器,该服务器内我有TaxiStation类。现在当发生事件 在车站我记录它与春天AOP。

从另一方面我有一个客户端。客户端是一个Web应用程序。因此,当用户 想要查看站内是否有出租车(我拥有载有数据的载体)时,他点击一个按钮,然后servlet从服务器询问信息,然后显示所需的jsp页面信息。如果向量是空的,它可以正常工作,但是当有一个元素时,我会得到一个异常。

这里是我的代码:

服务器端:

的applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
    http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd"> 
    <aop:aspectj-autoproxy> 
     <aop:include name="Logging"/> 
    </aop:aspectj-autoproxy> 
    <bean id="Logging" class="pack.aop.Logging"/> 

    <bean id="Station" class="pack.bl.Station" scope ="prototype" lazy-init="true"/> 

服务器c'tor:

public MyServer() 
{ 
    al = new ArrayList<ClientHandler>(); 
    try { 
     ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
     si = (StationInterface)ctx.getBean("Station",StationInterface.class); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } 
} 

SI是站接口(I有一个实现该接口站级别)

ClientHandler的

ClientHandler(Socket client) 
    { 
     this.socket = client; 

     try{ 
      to_client = new ObjectOutputStream(socket.getOutputStream()); 
      from_client = new ObjectInputStream(socket.getInputStream()); 
      si.set_server(MyServer.this); 
     } 
     catch(IOException ioe) 
     { 
      // error when create the streams 
      return; 
     } 
    } 

    public void run(){ 

     boolean is_running = true; 
      try 
      { 
       data_from_client = (Vector)from_client.readObject(); 

       if (data_from_client.elementAt(0).equals("taxis_waits") && 
         data_from_client.elementAt(1).equals("taxis_break")) 
       { 
        Object t_b = si.get_taxis_on_break(); 
        Object t_w = si.get_taxis_on_waiting(); 
        to_client.writeObject(t_w); 
        to_client.writeObject(t_b); 
        to_client.flush(); 
       } 
       else if (data_from_client.elementAt(0).equals("all_passengers")) 
       { 
        Object x = si.get_passengesrs(); 
        to_client.writeObject(x); 
        to_client.flush(); 
       } 
      } 
    } 

注:方法:get_taxis_on_break(),get_taxis_on_waiting()和get_passengers( ), 返回Vector。 (的士或乘客) 所以当向量是空的它似乎工作正常,服务器将数据写入到servlet和servlet读取它的罚款,但是当有一个元素 我得到一个异常客户端(该servlet(WebApplication的)):

例外:

SEVERE: Servlet.service() for servlet [pack.servlets.servlet2] in context with path 
[/TaxiWeb] threw exception 
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: 
org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.readArray(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
at java.io.ObjectInputStream.readSerialData(Unknown Source) 
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
at java.io.ObjectInputStream.readSerialData(Unknown Source) 
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
at java.io.ObjectInputStream.readSerialData(Unknown Source) 
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
at java.io.ObjectInputStream.readSerialData(Unknown Source) 
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.readArray(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
at java.io.ObjectInputStream.readSerialData(Unknown Source) 
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.readObject(Unknown Source) 
at pack.servlets.servlet2.doPost(servlet2.java:90) 
at pack.servlets.servlet2.doGet(servlet2.java:47) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.NotSerializableException: 
org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeArray(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeArray(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.access$300(Unknown Source) 
at java.io.ObjectOutputStream$PutFieldImpl.writeFields(Unknown Source) 
at java.io.ObjectOutputStream.writeFields(Unknown Source) 
at java.util.Vector.writeObject(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 
at pack.my_server.MyServer$ClientHandler.run(MyServer.java:186) 

回答

1

你的站级必须,如果它是被序列化实现java.io.Serializable接口。

修订

,或者你可以扩展接口,并使其可序列化

public interface SI extends Serializable{ 
    //interface code here 
} 
+0

嗨MaVroSCY,这是我做的,该接口扩展Serilizable也站类实现它,但我m仍然得到这个excletion – eliorsh

+0

'引起:java.io.NotSerializableException: org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl'是因为这个类在spring中不能实现SERIALZIBLE吗? – eliorsh

相关问题