0

Eclipse Juno IDE と Tomcat 7.0 を使用しています

サーバーがあり、サーバー内にTaxiStationクラスがあります。ステーションでイベントが発生すると、Spring AOP でログに記録します。

反対側から私はクライアントを持っています。クライアントは Web アプリケーションです。したがって、ユーザーが駅にタクシーがあるかどうかを確認したい場合 (データを保持するベクトルがあります)、ボタンをクリックすると、サーブレットがサーバーに情報を要求し、必要な jsp ページを表示します。 . ベクトルが空の場合は正常に動作しますが、要素が 1 つでもあると例外が発生します。

これが私のコードです:

サーバー側:

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"/>

サーバーセンター:

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はステーションインターフェースです(このインターフェースを実装するステーションクラスがあります)

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 を返します。(タクシーまたは乗客の)ベクトルが空の場合は正常に動作し、サーバーはデータをサーブレットに書き込み、サーブレットはそれを正常に読み取りますが、要素がある場合、クライアント側で例外が発生します(サーブレット (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)
4

1 に答える 1

1

Station クラスをシリアル化する場合は、java.io.Serializable インターフェイスを実装する必要があります。

更新しました

または、インターフェースを拡張してシリアライズ可能にすることができます

public interface SI extends Serializable{
  //interface code here
}
于 2012-09-03T09:45:33.403 に答える