問題タブ [cxf-codegen-plugin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ホルダー クラスを生成するための cxf-codegen-plugin を取得します。
web-service
以前に を使用していたクライアントをaxis
、現在使用するようにアップグレードしていますCXF
。web-service
はサードパーティに属しているため、自分で変更することはできませんwsdl
。
ご覧のとおり、 とmessage
はoperation
に記載されています。 を介してを呼び出すWSDL
と、 のバインド スタイルWRAPPED
が選択されます。これで問題ありません。/を介して生成された私の古いクラスには、クラスをパラメーター型として使用し、戻り値の型を持たないスタイルのすべてのメソッドもありました。wsdl2java
cxf-codegen-plugin
*PortType
axistools-maven-plugin
wsdl2java
WRAPPED
Holder
しかし、私の問題は、以前に を使用してクラスaxistools-maven-plugin
を生成していたときに、インターフェイスのニーズに合わせてjava
すべての*Holder
クラスも自動的に生成されたことです。*PortType
しかし、cx-codegen-plugin
では、インターフェイスのみがパラメータの型を必要とするスタイルを*PortType
反映します。!の一部として生成されたクラスが表示されません。WRAPPED
Holder
OUT
*Holder
wsdl2java
クラスを自分で作成せずに、クラスcxf-codegen-plugin
を生成する方法はありますか? 多くのリファクタリングを意味するため、バインディング スタイルに切り替えたくありません。前述のように、どちらも変更できません。*Holder
wsdl2java
BARE
WSDL
私はfwiwv3.0.2
のデータバインディングを使用しcxf-codegen-plugin
ています。JAXB
xml - Maven を使用した WS クライアントの生成とクラスの再利用
私のアプリケーションは 2 つのレイヤーに分かれています。バックエンド レイヤーは一連の Web サービスを公開し、プレゼンテーション レイヤーはそれらを使用してビジネス データを取得します。
構築を可能な限り自動化するために、すべての結果の WSDL ファイルと関連する XSD ファイルを (Maven アセンブラー プラグインを使用して) ZIP 依存関係にパッケージ化し、インストール フェーズで nexus にアップロードします。
次に、UI POM で、この ZIP ファイルを (maven 依存関係プラグインを使用して) ローカル ディレクトリ ( src/main/resources/wsdl
) に解凍し、CXF-CODEGEN プラグインを使用してクライアントを生成します。
問題は、これらのサービスの多くが共通のモデル エンティティを共有していることです。たとえば、多くのメソッドがCatalogue
クラスを使用しています。これは、ID とテキスト値で構成されるオブジェクトに使用するエンティティです。
CXF で生成されたコードを使用すると、Catalogue
Web サービスごとに異なるクラス (異なるパッケージ名を持つ) になり、実際にはすべて異なるクラスであるため、コード内の OO ポリモーフィズム機能が失われます。
この問題を回避するには、XSD クラスを最初に「エピソード」と呼ばれるものにコンパイルし、次にそれらのエピソード ファイルを CXF に供給して、クラスを生成する代わりにそれらを利用するように指示することで、この問題を回避できると聞いています。
maven-jaxb2-plugin を実行して XSD からクラスを生成する追加のコンパイル手順を追加しようとしましたが
org.xml.sax.SAXParseException; (...) 'catalogueDTO' is already defined
、このクラスが XSD ファイルに沿って繰り返されるため、例外が発生します。
誰かが私を正しい方向に向けることができますか?
java - 異なるモジュールの cxf-codegen-plugin のオプション wsdlArtifact
maven の cxf-codegen-plugin に奇妙な動作があります。
いくつかの情報:
3 つの子 (SERVICE、CLIENT1、CLIENT2) を持つ 1 つの親 pom (PARENT と呼ばれる)。
このサービスは、2 つのクラスから始まる 2 つの分類子によって記述された 2 つの wsdl を生成します。サービス pom.xml は次のとおりです。
CLIENT1 と 2 は、SERVICE で生成された分類された wsdl から始まる 2 つの Java クライアントを生成します。したがって、CLIENT1 pom.xml
CLIENT2 pom.xml
CLIENT2 pom ( mvn -U clean install ) だけを実行すると、PARENT pom で目的のmvn -U generate-sourcesを実行する限り、すべてが正常に機能します。
2 番目のクライアントが生成されないため、親 pom でmvn -U clean installを実行すると問題が発生します。実際には、常に最初の wsdl が「解決」されます。
この場合、1 回のビルドで 2 回の実行があったため、問題はこれとは異なります。最後の 2 つの情報: 1) ローカルではこの問題が発生しますが、Jenkins ではすべてが正常に動作します。2) Maven バージョン
手伝って頂けますか?
どうもありがとう!
cxf - cxf-xjc-runtime が Wildfly に含まれていない
cxf-codegen-plugin バージョン 2.7.13 (Wildfly の cxf バージョンと同じ) を使用しています。wsdl から toString メソッドを生成したいので、 -xjc-Xts 引数と依存関係を追加します。
生成されたクラスは、org.apache.cxf.xjc.runtime.JAXBToStringStyle を使用して、以下でのみ使用可能な toString メソッドを作成します。
この依存関係は wildfly cxf モジュールには含まれていないため、この依存関係を「提供された」スコープで使用すると、次のエラーが発生します。
依存関係と共にアプリケーションをデプロイすると、次のエラーが発生します。
ws エンドポイントのデプロイメントでApache CXF ライブラリ (cxf-xjc-runtime-2.6.2.jar) が検出されました。組み込みライブラリをコンテナ モジュールの依存関係に置き換える適切なデプロイメントを提供するか、適切な jboss-deployment-structure.xml 記述子を追加して現在のデプロイメントの webservices サブシステムを無効にします。前者のアプローチをお勧めします。後者のアプローチでは、ほとんどの Web サービス Java EE と JBossWS 固有の機能が無効になるためです。
さらに奇妙なのは、私が見つけた記事です。
これは、生成されたクラスが別のクラス、つまり org.apache.cxf.jaxb.JAXBToStringStyle を使用することを述べています
どんな助けでも大歓迎です。
java - wsdl2java - cxf-codegen-plugin で特定のスキーマを無視して依存関係を追加する方法
以下を参照してください。前述のように、3つのプロジェクトがあります。
以下に示すように、 Age.xsdスキーマAnimalService.wsdl
をインポートします。PersonService.wsdl
質問:
AgeType (名前空間http://xmlns.common/ageにあります)のコードを生成せずcxf-codegen wsdl2java
、それぞれのプロジェクトで com.person.AgeType および com.animal.AgeType の代わりに common.xmlns.age.AgeType を使用するように指示する方法プロジェクトを依存関係として提供することによって?Common
cxf - cxf-codegen-plugin 不正な構成ファイルの構文
Java 6 用に開発された Web サービス コードを Java 8 に更新しようとしています。モジュールは maven cxf-codegen-plugin を使用します。Java 6 バージョンは、cxf バージョン 2.2.2 を使用しました。cxf を 2.7.9 に更新することで Java 7 で動作するようになりましたが、Java 8 ではビルドできませんでした。cxf を 3.0.3 に更新しようとしましたが、まだ次のエラーが発生します。
XPathFactory#newInstance()は、XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: java.xml.xpath.XPathFactory により、デフォルトのオブジェクト モデル: http://java.sum.com/jaxp/xpath/domの XPathFactory を作成できませんでした。 : jar:file:/c:/Documents%20and%20Settings/Kevin/.m2/repository/saxon/saxon-xpath/8.9.0.3/saxon-xpath-8.9.0.3.jar!META-INF/services/javax. xml.xpath.XPathFactory:2: 設定ファイルの構文が正しくありません
jdk 1.8.0_31、maven 3.0.3、および cxf 3.0.3 を使用しています。
java - CXF で生成されたコードを JAX-B にアンマーシャリングし、マップされていないフィールドを無視する方法は?
コントラクトに定期的に要素を追加できる Web サービスを呼び出します。
例: SOAP 応答本文には以下が含まれます。
CXF で生成された JAXB Bean は次のようになります。
JAXB Bean は、Maven プラグインcxf-codegen-plugin
バージョン 2.6.2 (apache.cxf から) で生成されます。
ここで、SOAP 応答に新しい要素が表示された場合に備えて、Bean をフォールト トレラントにするソリューションがあるかどうかを知りたいと思います。
今のところ、そのような反応を受け取ったときは、Unmarshalling Error
この新しい要素があるためです。
私の JAXB には、管理したい最小限のフィールドが含まれていますが、Bean が新しい要素に対処し、それらを無視できるようにしたいと考えています。
JAXB Bean を再生成せずにそれを行う方法はありますか? (現在、Bean を再生成してプロジェクトをリリースする必要があります)
CXFオプション(およびxjc)を確認しましたが、ドキュメント(およびGoogle)には何も見つかりませんでした。アンマーシャリング操作はReferentialService
、CXF によって生成されたものでも自動的に行われるため、この部分の生成を変更するオプションで十分です。
CXF で生成されたクラスを使用して Web サービスを呼び出すコードは次のとおりです。
そして呼び出し:
更新:この投稿を見ましたが、私の気持ちは同じでした: JAXB は、CXF なしで単独で使用された場合、マップされていない要素を無視します。を使用することによりcxf-codegen-plugin
、そうではありません。