私はアプリケーション内で呼び出しようとしているSOAP Webサービスを持っています。私はcxf-codegen-plugin(3.1.10)を使用してWSDLからソースを生成しています。ClassCastException:com.sun.xml.internal.bind.v2.runtime.reflect.Accessorにキャストすることができません
私がアプリケーション内のWebサービスを呼び出すと、生成されたクライアントを使用して、それは素晴らしい作品です。しかし、問題の原因となっているアプリケーション内の同じパッケージに対して別のJAXBインスタンスを使用しています。例えば
、次は素晴らしい作品:
次のスタックトレースでJAXBContext.newInstance(SendMessageRequest.class);
OutboundServicePortType service = new OutboundService().getOutboundServicePort();
service.sendMessage(message);
:
OutboundServicePortType service = new OutboundService().getOutboundServicePort();
service.sendMessage(message);
しかし、右の前に新しいJAXBインスタンスを初期化すると失敗するgetOutboundServicePort()
呼び出します
Caused by: java.lang.ClassCastException: outbound.model.standard.StandardOutboundMessage$JaxbAccessorF_messageUUId cannot be cast to com.sun.xml.internal.bind.v2.runtime.reflect.Accessor
at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:190)
at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:179)
at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:271)
at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:77)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:488)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:153)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:488)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:305)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147)
at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:152)
at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:96)
at com.sun.xml.internal.ws.developer.JAXBContextFactory$1.createJAXBContext(JAXBContextFactory.java:98)
at com.sun.xml.internal.ws.db.glassfish.JAXBRIContextFactory.newContext(JAXBRIContextFactory.java:79)
... 25 more
これまでに試したことがあります:
-
JAXB classes from Webservice marshalling error
私はJDKフォルダには承認瓶を持っていないので、this answerは JAXB-IMPLジャー(2.2.11)がから来ている
- それので、私のアプリでラクダは、JAXBは適用されません。非常に含まれているようで、this answerのようには思わない。
- This answer問題をうまく説明しているようですが、解決策はわかりません。
Problems creating JAXBContext to marshal object as XML
- この質問は私と同じのようですが、彼らは一緒に行くことになった解決策は、私の状況のために働くことはできません(下記参照)
- 私は受け入れた解決策を試しました
System.setProperty("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize", "true");
はで動作します。しかし、このプロパティを設定することは、私の環境では残念なことに私の選択肢ではありません。さらに、実際の問題に対処していないようなハックのようだ(私が誤解していない限り)。
私は残した小さなロープで自分自身をハングアップしています。私はここで何が欠けていますか?
私はあなたに答えがありませんが、あなたがリンクしている理解できない答えによって暗示されているように、おそらく2つの別々のクラスローダーのように聞こえます。また、私はその 'noOptimize'オプションに関する情報を少なくとも少々掘り下げることができました:http://cxf.547215.n5.nabble.com/JAXB-is-not-sitting-well-in-an-OSGI -eclipse-env-tp569834p569839.html、私はjaxbが本当に奇妙なことをしていると思いますが、あなたが何をしているのかはわかりません。答えを見ることに興味があります。 Btwも何もここに来なければjaxbユーザーのメーリングリストに尋ねることを検討してください。 –