2012-03-08 11 views
13

私はそれがTransacao "Xstreamの引数なしのコンストラクタエラー

`Error: Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor ` 

---- Debugging information ---- 

message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor 

cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException 

cause-message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor ` 

class : br.com.cbmp.ecommerce.resposta.Transacao 

required-type : br.com.cbmp.ecommerce.resposta.Transacao 

path : /transacao 

のインスタンスを作成しようとしたとき、私はXStreamの1.3.1とJDK7でのバグがあることを認識しています、次のエラーを取得していますが、私は現在、XStream 1.3.1とJDK6を使用しています。このエラーがまだ起こっている理由は何ですか?

おかげ

+1

クラスには、非argコンストラクタがありますか?コンストラクタを記述しない場合は、 'Object'の引数なしコンストラクタが使用されますが、コンストラクタを記述すると、それ自体は引数なしのコンストラクタを用意する必要はありません。 – twain249

+0

@ twain249クラスは実際に引数を持つコンストラクタを持っています。これは私に質問につながります:実際には引数なしのコンストラクタを作成する必要がありますか?パラメータを渡す必要があります。それ以外の場合、クラスは機能しません。引数なしのコンストラクタを追加すると、このコンストラクタが呼び出され、オブジェクトが不完全になり、NullPointerExceptionが発生します。 –

+1

少し前にDynamic Web Projectで同様の問題が発生しました。かつて私はすべてがうまくいくように思った。私はそれがなぜ必要なのか正確には分かりません(RESTサービスがデフォルトで呼び出されたデータなしでレスポンスを作成しようとしていると仮定しています)が、コードを追加してもコードのパフォーマンスには影響しませんでした。私がコンストラクタで行ったことは、 'super()'と呼んでいた – twain249

答えて

5

単純な答え:あなたの内部クラスのすべてが静的にマークしなければならない、またはあなたが完全な例を使用する必要があります内部クラスではありません。

長い答え:Javaは自動的にいくつかのことを行いますが、あなたは遭遇しました(hereを参照)。内部クラスが引数なしのコンストラクタを持つことは(ほとんど)不可能です。 Javaは常に内部/ローカルクラスのコンストラクタに1つの引数を追加し、その引数は親クラスへの参照です。これは、親のすべての変数/メソッドにアクセスできるようにするために使用されますが、no-args(コード内)コンストラクタでも(xstreamのようにリフレクションを使用する場合)1つの引数があることを意味します。修正するには、親クラスのメソッド/変数のすべてを継承する必要がなくなるようにクラスを静的としてマークします。

+1

+1長い答えに感謝します。私の問題も解決しました。 – RyanfaeScotland

+1

JRLがうまくいきませんでしたので、私はXStream 1.4.4にアップグレードしましたが、これは私にとってはうまくいきました。ありがとうございます@Hamy – praveenb

17

3ソリューション:

  1. は、このオブジェクトはSerializableを実装してください(明らかに)引数なしのコンストラクタを提供します。
  2. アップグレードは1.4.4 *

私は溶液#2のすべての時間を使用しXStreamをします。私は1.2.2が動作しないと1.4.4が作業を行い、私は1.4.4をXStreamのために更新することにより、同様のエラーメッセージを修正することができたで-間

+0

JDK6でXStream 1.4.4を使用しています。私はソリューション1または2を使用することはできません。 – cadavre

2

任意のバージョンを試していない検証*

これはjdk7の方が面白いです。私の特定のインスタンス(さらにodder)では、エディタで失敗し、コマンドラインで成功します。私のコマンドラインはjdk6を使用していたことを示し、エディタはjdk7を使用していました。 Go figure。

参照:なし非引数コンストラクタが存在しない場合http://xstream.10960.n7.nabble.com/JAVA-7-compatibility-problem-td7172.html

2

XStreamの1.3.1は、JDK 1.7の下でもう直列化復元をサポートしていません。

解像度:

1)この問題を解決するには、あなたは1.3.1のjarを続行したい場合はJDK6を使用する必要があります。

2)JDK7以降を使用してこの問題を解決する場合は、JAR xstream.jar 1.3.1をリリースする必要があります。

詳細については、https://jira.atlassian.com/browse/JRA-32823を参照してください。

関連する問題