2017-01-12 4 views
1

実行時に自分のコードで何かがうまくいかない。私はapache CXFを使ってSOAPクライアントを実装しました。私はJaxWsProxyFactoryBean経由でエンドポイントを作成しました。ここに私のコードは次のとおりです。Apache CXF java.lang.StackOverflowError

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
      factory.setServiceClass(MYAPI.class); 
      factory.setAddress(service); 
      api = (MYAPI) factory.create(); 

私はそれを実装したときに、それがうまく働いていたので、私はいくつかのリファクタリングを行うことを決め、(その上、異なるパッケージ内の別でAPIインターフェイスをスタブクラスを移動し、最初に時間が... )私がそれを再構築して実行すると、間違ったことが起こります。誰もがこの問題を解決するために私を助けることができる

Thread [main] (Suspended (exception StackOverflowError))  
    ReflectionUtil.getDeclaredFields(Class<?>) line: 169  
    JAXBContextInitializer.walkReferences(Class<?>) line: 395 
    JAXBContextInitializer.addClass(Class<?>) line: 317 
    JAXBContextInitializer.addType(Type, boolean) line: 236 
    JAXBContextInitializer.addType(Type) line: 226 
    JAXBContextInitializer.walkReferences(Class<?>) line: 424 
    JAXBContextInitializer.addClass(Class<?>) line: 317 
    JAXBContextInitializer.addType(Type, boolean) line: 236 
    JAXBContextInitializer.addType(Type) line: 226 
    JAXBContextInitializer.walkReferences(Class<?>) line: 424 
    JAXBContextInitializer.addClass(Class<?>) line: 317 
    JAXBContextInitializer.addType(Type, boolean) line: 236 
    JAXBContextInitializer.addType(Type) line: 226 
    JAXBContextInitializer.walkReferences(Class<?>) line: 424 
    JAXBContextInitializer.addClass(Class<?>) line: 317 
    JAXBContextInitializer.addType(Type, boolean) line: 236 
    JAXBContextInitializer.addType(Type) line: 226 
    JAXBContextInitializer.walkReferences(Class<?>) line: 424 
    JAXBContextInitializer.addClass(Class<?>) line: 317 
    JAXBContextInitializer.addType(Type, boolean) line: 236 
    JAXBContextInitializer.addType(Type) line: 226 
    JAXBContextInitializer.walkReferences(Class<?>) line: 424 
    JAXBContextInitializer.addClass(Class<?>) line: 317 
    JAXBContextInitializer.addType(Type, boolean) line: 236 
    JAXBContextInitializer.addType(Type) line: 226 
    JAXBContextInitializer.walkReferences(Class<?>) line: 424 
    JAXBContextInitializer.addClass(Class<?>) line: 317 

....

:アプリケーションは、スタックトレースです。ここapi = (MYAPI) factory.create();java.lang.StackOverflowErrorでのに失敗しますか?私は何が問題なのか分からない。私はCXFをビルドするためにJava 8を使用するのが問題かもしれませんが、私はバージョン3.1.7を使用していますが、Java 7を使用してビルドしようとしました(Java 8固有の実装がないため)同じ問題が再び発生しました。

+0

循環参照と思われます。あなたのJAXBモデルを見せていただけますか? – pedrofb

+0

JAXBアノテーションを使ったスタブクラスですか? –

+0

はい。それはどういうわけか、クラスが再帰的に課金しているようです – pedrofb

答えて

2

(コメントで解決) JAXBクラスがスタックオーバーフローを再帰的に課金している循環参照のようです。あなたは

アクション

をリファクタリングしましたか?戻って、ステップバイステップでそれを行う。できない場合は、問題の原因となっているサービスとクラスを検出しようとします。たとえば、エラーが発生しなくなるまでサービスメソッドを削除します。

ソリューション(@AleydinKaraiminがコメントとして)

CXFは、同じ名前の2つのクラスを生成して第一第二に参照フィールドを有するが、別のパッケージへの移動をリファクタリングした後、それ自体を参照するようになりました実装ロジックのために、それは何度も何度もロードされます。

関連する問題