2

データバインディングメソッドとしてXMLBeansを使用してAxis2フレームワークを使用してクライアントを生成しました。XSDスキーマは次のとおりです。
<xsd:schema>
<xsd:element name="profile" type="anyType"/>
</xsd:schema>

SOAPリクエストの一部として生成されるJavaオブジェクトには、プロファイルの取得と設定を可能にするgetterメソッドとsetterメソッドが含まれています。メソッドのシグネチャは次のとおりです。 requestDocument.setProfile(XmlObject profile);

問題は、有効なXMLドキュメントではなく、プロファイルとして複数のノードを渡す必要がある場合でも、XMLObjectはルートノードを持つXMLドキュメントを想定していることです。

私は合格する必要があります:
<accounts></accounts>
<payees></payees>

実際、私が使用するサービスはこれらのノードを想定していますが、スキーマでそれらを制約していません。したがって、サービスが例外をスローしなくてもプロファイルを使用できないため、別のルートノードを追加することはできません。

XMLBeansは、基になるXMLツリーをすでに追加しています。つまり、リクエストドキュメントのプロファイルノードです。したがって、ルートノードとして使用することはできません。ルートノードを追加すると、次のXMLが作成されます
<profile> <profile></profile> </profile>

そして、ドキュメントを次のようにフォーマットしたいと思います。
<profile>
<accounts></accounts> <payees></payees>
</profile>

サービスのスキーマを変更したくない。Axis2/XMLBeansでこの問題に取り組む方法があるかどうか知りたいです。

4

1 に答える 1

1

私はおそらく回避策であり、それが行われるべきクリーンな方法ではない解決策を見つけました。XMLObject次のようにプロファイルを設定する代わりに、オブジェクトを
requestDocument.setProfile(XmlObject profile);
使用org.w3c.dom.Nodeしてプロファイルコンテンツを作成しました。以下を参照してください。1。プロファイルに追加する
要素を作成し ます。2。サービスに送信するドキュメントに空のプロファイルを作成します。オブジェクトは自動生成されることに注意してください。3 。空のプロファイルを取得し、そのプロファイルに子を追加します。ルートノード: org.w3c.dom.Element
Element accountsElt = profileDocument.createElement("accounts");
Element payeesElt = profileDocument.createElement("payees");

requestDocument.addNewProfile();
requestDocument.getProfile().getDomNode().appendChild(accountsElt); requestDocument.getProfile().getDomNode().appendChild(payeesElt);

お役に立てば幸いです。

于 2010-10-28T15:33:03.103 に答える