2012-03-03 8 views
2

私はwebservicesに少し新しくなっています。私はNetbeans 7.0とAxis2を使用しています。私はJavaサーバー側のコードとJavaクライアントを持っています。簡単にするために、私は非常に単純な例を使用します。Axis2 Webserviceから作成されたクライアントサイドオブジェクトのtoString()メソッドの定義方法

私はworkSiteId、workSiteName、refCodeフィールドを持つWorkSiteクラスを持っており、それぞれgetterとsetterがあります。また、サーバー側では、クラスには、単にworkSiteNameを返すオーバーライドされたtoString()メソッドがあります。ですから、JComboBoxでGUIサーバー側を作成してWorkSiteオブジェクトを追加すると、workSiteNameは各オブジェクトのJComboBoxに表示されるものになります。

"getWorkSiteList"のようなWebメソッドを作成しました。データベースからクエリを出し、WorkSiteオブジェクトを作成して配列に追加し、配列を返します。 NetBeansのクライアントサイドのJax-WS "Generated Sources"を見ると、gettersとsetterはすべて存在しますが、toString()メソッドはそこには存在しないことを除いて、問題なくWorkSiteオブジェクトを使用できます。ですから、WorkSiteオブジェクトを配列から取り出してJComboBoxに配置すると、コンボボックスには、「itempackagename.WorkSite.a6d35」のような非常に醜いものが表示されます。

私の本当の疑問は、私はtoString()メソッドを持たないNetbeansのクライアント側に自動生成されたWorkSite.javaファイルを持っていることです(これはスケルトンの権利と呼ばれていますか?サーバー側クラスで定義されたtoString()メソッドをインクルードする方法はありますか?そうでない場合は、自動生成されたクラスを編集することは安全ですか(これはスケルトンと呼ばれています)、toString()メソッドを追加するだけです。クライアントサイドで自動生成されたクラスを編集すると、リビルド時に上書きされますか?

ありがとうございました!私はそれがあまりにも長く巻き込まれていないことを望む。私はまだ簡潔な方法でそれを説明するためのすべての専門用語を知っていません。

答えて

0

私はコメントで述べたように、私は何もしませんSubWorkSiteクラスと例の現場のクラスをサブクラス化することでこれを回避働いていたが、オーバーライドを定義しますsuper.getWorkSiteName.getValue()を返すtoString()メソッド。

私はWebサービス呼び出しから返されたWorkSiteオブジェクトのリストを持っています。これを繰り返し実行するだけです。リスト内の各WorkSiteオブジェクトに対して、SubWorkSiteオブジェクトを作成してJComboBoxに追加します。アプリケーションを実行すると、自動生成されたクラスから取得する醜いtoString()値 "examplepackagename.WorkSite.xxxxx"ではなく、workSiteNameがJComboBoxに表示されます。

私は誰もがあれば良い方法でこれを行うための提案にはもちろん開きます。ジェネレータのXSLTテンプレートの編集に関するスティーブンCの提案に関する情報があれば、

2

これを達成する方法は、Axis2コードジェネレータのテンプレートを変更することです。 this pageのアーキテクチャ図を見ると、コードジェネレータが中間データ構造をXMLで生成し、XSLTと一連の言語固有のテンプレートを使用してコードが生成されることがわかります。コードに余分なtoString()メソッドを含めるには、これらのメソッドのサポートを含むようにテンプレートを変更するのがよいでしょう。

警告:

  1. あなたは発電機のアーキテクチャと実装を理解する必要があり、それは使用していますtecnologiesます:特に、XSLT。

  2. 必要なメソッドを生成するのに中間XMLファイルに十分な情報があるとは限りません。 (私はあるだろう期待して、私は見ていない。)

+0

良い情報スティーブンCさん、返信いただきありがとうございます。私は、テンプレートをどこに置いているのか、Javaクライアントのために編集するのかといったような詳細情報を見つけようと、ウェブの周りを見渡し、本当に有用なものは何も思い付きませんでした。私はまた、私の開発ボックスのどこかでこれらのテンプレートを探しましたが、空になりました。あなたはどんなアイデアを持っていますか? – Jim

+0

私は、これを行うためのあまり理想的でない方法は、自動生成されたクライアントサイドクラスをサブクラス化し、サブクラスでtoString()メソッドを定義することかもしれないと考えました。それから、WorkSiteオブジェクトの配列を取得したら、toString()メソッドが定義されているSubWorkSiteオブジェクトを作成し、JComboBoxに渡して、希望の名前を表示させてから、SubWorkSiteオブジェクトサーバーに戻すと、自動生成されたWorkSiteクラスにキャストすることができます。あなたはそのアプローチに何か問題が見えますか? (見た目のノービス以外の) – Jim

+0

さて、問題があります。生成されたクラスではなく、サブクラスを使用してインスタンスを修正するために、クライアントサイドのコードをどのように納得させるのですか? –

関連する問題