2017-12-06 20 views
0

私は、一般的にSpring MVCやWebアプリケーションにはかなり新しいです。私はソケットの出力ストリームを通してオブジェクトを読み込むプロジェクトを作ろうとしています。単純なメインクラスを持つ別のプロジェクトでソケット接続とオブジェクトを試すと、inputStream.readObject()が動き出し、TradeRecordが読み込まれます。しかし、Springmvcのテスト・プロジェクトでそれを組み合わせると、私はTradeRecordのためにClassNotFoundExceptionを取得します。私controller.javaクラスのObjectInputStreamからオブジェクトを読み込むときにClassNotFoundExceptionが発生する

パート:

public void readRecord(){ 
    try { 
     Socket socket = connectServer(); 
     ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); 
     while (true) { 
      TradeRecord rec = (TradeRecord) inputStream.readObject(); 
      System.out.println(inputStream.readObject()); 
     } 
    } catch (SocketException se) { 
     se.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e){ 
     e.printStackTrace(); 
    } 
} 

TradeRecordクラスオブジェクトを送信者から直接コピーされます。

package models; 
import java.io.Serializable; 

public class TradeRecord implements Serializable 
{ 
    public static final int STATUS = 0; 
    ... 
    public String TradeID; 
    public char OrdStatus; 
    public char TimeInForce; 
    ... 

    public int timeOnList = 0; 
    public String venueID = ""; 
    public String sourceID = ""; 
    public String errMsg = ""; 
} 

ディスパッチャ:

<mvc:annotation-driven /> 
<context:component-scan base-package="controllers"/> 
<mvc:resources mapping="/bootstrap/**" location="/bootstrap/" /> 
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
<property name="prefix" value="/WEB-INF/views/" /> 
<property name="suffix" value=".jsp" /> 
</bean> 

ウェブ。 xml:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

とエラー:私は私のWEB-INFのlibの下に、とTomcat内のlib(下、ジャーにTradeRecordを作ってみましたし、手動で私の外部ライブラリに追加している

java.lang.ClassNotFoundException: TradeRecord 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:348) 
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:626) 
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613) 
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371) 

別々の機会に)。私はPOJOをベースコントローラーパッケージの下に置いてみましたが、POJOが見つかるかどうかは分かりませんでしたが、どれもうまくいきませんでした。どんな助けでも大歓迎です。ありがとう!

編集*現在、Intellij IDEA 2017.1.1とmavenを使用してビルドしています。

+1

どのようにjava.lang.ClassNotFoundExceptionにクラスのパッケージ名 'models'が含まれていないのですか? – tsolakp

+1

'TradeRecord'クラスを別のパッケージモデルにコピーすると、' models.TradeRecord'という別の別のクラスを作成します。シリアライゼーションを使用することは、すでに悪い考えですが、あるプロジェクトから別のプロジェクトにソースコードをコピーすることによってそれを使用することはさらに悪化します。正確に同じコンパイルされたクラスを両側で使用します。 –

+0

@tsolakp私は確信していません...私はまだ別のマシンから送られてきた 'TradeRecord'を使用しようとしていると思います。 – Bluu

答えて

0

TradeRecordクラスが存在しないため、Tomcatはクラスを見つけることができません。必要な「コンフィグレーション」は、ソースとデスティネーションの同じパッケージに配置し、そのクラスをWARまたはその従属JARの1つをlibディレクトリに含めます。

関連する問題