2

次のフォームのJAXBExceptionが発生します

クラスSomeClassもそのスーパークラスも、このコンテキストでは認識されていません。

完全なスタックトレースは次のようになります。

javax.xml.ws.WebServiceException:javax.xml.bind.JAXBException:クラスcom.myCompany.generatedCode.WebServiceOperationNameも、そのスーパークラスもこのコンテキストで認識されていません。
    org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175)で
    org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70)で
    org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128)で
    org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:586)で
    org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:130)で
    org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93)で
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:364)で
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185)で
    $ Proxy41.deleteAccount(不明なソース)
    com.myCompany.myPackage.MyWebServiceClient.callSomeWebService(MyWebServiceClient.java:100)で
(私のアプリケーションとフレームワークに固有の他のクラス)
..。
のせいで:
javax.xml.bind.JAXBException:クラスcom.myCompany.generatedCode.WebServiceOperationNameも、そのスーパークラスもこのコンテキストに認識されていません。
    com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:556)で
    com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:452)で
    com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314)で
    com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243)で
    javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)で
    com.ibm.xml.xlxp2.jaxb.marshal.MarshallerProxy.marshal(MarshallerProxy.java:100)で
    org.apache.axis2.datasource.jaxb.JAXBDSContext $ 1.run(JAXBDSContext.java:470)で
    org.apache.axis2.java.security.AccessController.doPrivileged(AccessController.java:76)で
    org.apache.axis2.datasource.jaxb.JAXBDSContext.marshalByElement(JAXBDSContext.java:455)で
    org.apache.axis2.datasource.jaxb.JAXBDSContext.marshal(JAXBDSContext.java:414)で
    org.apache.axis2.jaxws.message.databinding.impl.JAXBBlockImpl._outputFromBO(JAXBBlockImpl.java:189)で
    org.apache.axis2.jaxws.message.impl.BlockImpl.outputTo(BlockImpl.java:372)で
    org.apache.axis2.jaxws.message.impl.BlockImpl.serialize(BlockImpl.java:296)で
    org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerializeAndConsume(OMSourcedElementImpl.java:808)で
    org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:975)で
    org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMElementImpl.java:1016)で
    org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.serializeInternally(SOAPEnvelopeImpl.java:271)で
    org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:233)で
    org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMElementImpl.java:1016)で
    org.apache.axiom.om.impl.llom.OMNodeImpl.serializeAndConsume(OMNodeImpl.java:488)で
    org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:88)で
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.writeMessage(SOAPOverHTTPSender.java:3271)で
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.sendChunkedRequest(SOAPOverHTTPSender.java:888)で
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.sendSOAPRequest(SOAPOverHTTPSender.java:807)で
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.send(SOAPOverHTTPSender.java:611)で
    com.ibm.ws.websvcs.transport.http.HTTPTransportSender.invoke(HTTPTransportSender.java:364)で
    org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:531)で
    org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:401)で
    org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)で
    org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)で
    org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:581)で
    ...52もっと

これをトリガーするのは、という名前のWebサービス操作を呼び出そうとしていることWebServiceOperationNameです。このエラーに対処するための他のヒントを見てきました。これには通常、@XmlSeeAlso注釈を追加したり、マーシャリングとアンマーシャリングの実行方法を調整したりすることが含まれます。

この場合、WSDL(およびサポートスキーマ)に基づいてMavenによってコードが生成されるWebサービスを呼び出しています。Mavenによって生成されたコードを直接制御することはできません。また、マーシャル/アンマーシャル呼び出しを制御することもできません。アプリケーション内の他のWebサービス呼び出しは問題がないようです。

さらに奇妙なことに、これは開発サーバーでは発生しますが、ローカルサーバーでは再現できません。Webサービス用に生成されたJARは、アプリケーションの残りのコードと同じです。

この例外は今週(そして一貫して)突然発生し、環境的に何かが変わったのではないかと思いますが、何が起こっているのかわかりません。何か案は?


新しい観察:

起動/再起動後にサーバーでこのコードを初めて実行しようとすると、失敗して例外がスローされるまでにしばらく(約1分)かかります。その後は毎回、例外はほぼ瞬時に発生します...


さらに詳しい情報:

この問題は、WebSphere 7.0.0.23(サーバー上)には存在しますが、WebSphere 7.0.0.7(ワークステーション上)には存在しません。

4

2 に答える 2

2

問題は解決しました。WAS が不満を言っているクラスを含む jar を調べていたところ、いくつかのクラスがパッケージ階層の異なるレベルで重複していることに気付きました。元のエラーで報告されたクラスは、実際にはこれらの重複したクラスの 1 つではなかったことを指摘する価値があります。また、アプリケーションは同じクラスの異なるバリアントを参照していませんでした。参照されたクラスは、予期されたパッケージに含まれていました。1 レベル上の余分な複製は、どこにも参照されていませんでした (私が知る限り)。

Maven の設定が不適切なように見えましたが、xjb バインディング ファイルを調べたところ、そのスキーマ名前空間の型が 2 つの異なるパッケージにバインドされている方法がわかりませんでした。いずれにせよ、Maven で使用されるバインディング ファイルの一部をクリーンアップし、一般的なバインディングを 1 つのファイルにリファクタリングし、Maven に jar を再構築してからテストしたところ、問題は突然なくなりました。

元の jar が WAS 7.0.0.7 で正常に動作したため、明らかに WAS 7.0.0.23 に問題がありました。これは、奇妙に見えるが技術的に有効な jar をもたらす Maven バインディングの問題が原因である可能性があります。

また、興味深いことに、開発者の 1 人が WAS を 7.0.0.25 にアップグレードし、元の「不良」jar を使用したところ、JAXBException の代わりに「そのような操作はありません」というエラーが発生しました。

于 2013-02-21T16:50:48.047 に答える
1

Guidewire ClaimCenterでも同じ問題があります。これは、構成はできるがコアはまったく変更できない保険アプリケーションです。Javaベースで、axis2のようなコンポーネントが含まれていますが、Webサービス呼び出しをラップする別のJavaプロジェクトを作成しました。 、wsimportを使用してすべてのスタブコードを作成しました。それを構成するためのガイドワイヤープラットフォームであるため、それは窓と突堤である私の開発環境の下でうまく機能します(他のオプションはありません)。実稼働サーバーとしてWAS7を使用します。

    原因:javax.xml.ws.WebServiceException:javax.xml.bind.JAXBException:au.com.mycompany.policyinquiry.retrieveinsurancepolicydetails.v1.RetrieveInsurancePolicyDetailsRespはこのコンテキストでは認識されていません
    org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175)で
    org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70)で
    org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128)で
    org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMinimalMethodMarshaller.demarshalResponse(DocLitBareMinimalMethodMarshaller.java:158)で
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:499)で
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:377)で
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185)で
    $ Proxy80.retrieveInsurancePolicyDetails(不明なソース)

別のJDKプラットフォームに関連するものである場合に備えて、サーバー側でクライアントを生成してコンパイルしようとしましたが、問題は解決しませんでした。次の記事は6でした!しかし、WAS 6の場合、私は試していません。

    JAX-WS Webサービスエンジンは、メッセージを受信すると、
    メッセージをJavaBeanに変換するJAXBエンジン。
    このメッセージは、xmlの変換中にエラーが発生したことを示しています
    タイプのオブジェクトに
    com.somecom.lib.business.xml.ComIdentifierXml。失敗
    JAXBエンジンがで初期化されなかったことを示します
    このユーザークラスに関する情報。
    。
    このユースケースでは、クラス
    com.somecom.lib.business.xml.ComIdentifierXmlは、
    EARレベルのJAR。例外は発生しません
    クラスは、WARモジュールのにあるJARにパッケージ化されています
    WEB-INF/libディレクトリ。
SOLUTION:

ターゲット環境:IBMサーバーIBM JDK 1.6 IBM Webpshere 7.0.0.25

Webサービスを呼び出すクライアントは、外部ライブラリJAX-WSRI2.1.6に依存しない純粋なJAVAを使用しています。

webspehreの場合1-アプリケーションの最後の親にロードするクラスを設定します2-これを使用してWebサービスのアノテーションをオフにします:com.ibm.websphere.webservices.DisableIBMJAXWSEngineプロパティをtrueに設定します。これにより、変更されたAxis2に基づくWebsphere独自の実装が無効になります。3-サードパーティのJAX-WSランタイムを使用してアプリケーションをデプロイします。私の場合、JAX-WSRI2.1.7を含むGlassfishMetro1.5を使用し、ローカル環境と同じです。 JDK 1.6.0_37

それでおしまい

乾杯アレックス:)

于 2013-02-13T06:12:24.103 に答える