2009-07-06 26 views
1

私はj2meアプリケーション(ブラックベリー)から消費したいwcf serivceを持っています。j2meプロジェクトへのWCF参照の追加

ウェブサービスを消費するために使用されるj2SEでうまく動作するツールがj2meでうまく動作しないため、私は狂ってしまいました。少なくとも私のサービスではありません。

それはそれを説明するために、古いASMXサービスのスタイルを使用していますが、私は http://www.netbeans.org/kb/60/mobility/mobile-dilbert.html

で便利なチュートリアルを発見しました。手順を踏んで、私のwcfリファレンスを使用して、私は接続することができました。

このソリューションでは、j2eeプロキシを使用して参照を機能させています。

これは.NETとJavaの非互換性を解決する方法ですか? 私は、これが起こる大きな理由は、Microsoftがサービス用に非標準のwsdlファイルを生成していることです。

私の質問は:これは一般的にJavaからの.net Webサービスを消費するために使用されるソリューションですか、それとも良い方法ですか? 参照ポインタは非常に高く評価されます。

+0

j2me(netbeans)プロジェクトから参照を直接追加することができませんでした。 j2ee Webサイトへの参照を追加してから、j2meプロジェクトの新しいWebサイトへの参照を追加すると成功しました(netbeansウェブサイトで説明したように) –

答えて

0

追加のリサーチを行う際には、 。

この質問には明確な回答がなかったため、おそらく私は明らかではなかったし、他の情報源から主題を調べたのかもしれない。私は自分が見つけたものを投稿することに決めました。

最も基本的なWCFサービス(1つのメソッドを持つ)を見ると、文字列が返されます。代わりに他の方法はありません。参照を追加中にエラーが発生しました。

JSR-172はguid(実際のメッセージではなくメッセージの考え方)を理解していません。 charとdurationの場合と同じことです。

Microsoft以外の標準のwsdlファイルで参照が見つかりました。いくつかのインターフェイスを実装すると、生成されたwsdlファイルから非標準のスキーマ参照をすべて削除できます。

これは、複雑なサービスではなく、簡単なサービスを支援しました。

私は既存のサービスを試しましたが、私はamazon.comアフィリエイトサービスを使ってテストすることにしました。

私のwcfサービスと同様のエラーが発生したため、好きではないタイプのリストが表示されました。

最後に私は学んだ。ビジュアルスタジオはあなたを台無しにして、あなたを怠惰にする(常に悪いことではない)。何らかのウィザードタイプのツールを使用して参照を入力し、サービスを呼び出す生成されたコードをたくさん取得し、オブジェクトに対処して呼び出しメソッドを提供する方法が必要でした。

Netbeansは私にとってJ2SEではなくJ2SEでこれを行いました。

j2meプロジェクトにWCFを直接使用する場合は、すべての配管コードを書き込む準備ができている必要があります。

また、j2eeプロキシを使用する方法を提案することもできます。 http://www.netbeans.org/kb/60/mobility/mobile-dilbert.html

この方法では、使用するデータ型に注意する必要があります。サービスの失敗や使用不能の原因があります。例、私は、datetimeを返すメソッドを持っていた、netbeansは、スタブ生成のためにそのメソッドを選択させることさえできませんでした。サービス中のメソッドを呼び出すことで、例外がスローされます。 (メソッドが削除され、呼び出しが成功しました)

+0

セバスチャン、あなたは何を指していますか?どんなタイプが問題を引き起こしたか。あなたはエラーを投稿できますか?また、どのような非標準スキーマ参照ですか? –

+0

おそらく私の問題のより良い説明。私は私の質問を書いた後、この解決方法を見つけました。私の目標は、可能な限りwcf側を変更しないようにすることです。 http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/df9fcce7-816c-4ed5-9bb4-c0c40f5f65e4 –

0

セバスチャン、

は、私は非標準のMicrosoft WSDLについて聞いた唯一の不満は、WSDLが平らでないことを不満となっています。つまり、1つのWSDLは別のWSDLまたは別のファイルで定義されたXMLスキーマを参照することがあります。プラットフォームによってはそれを処理できません。特に、スマートデバイス開発を行っている人からの苦情があったことを思い出します。私はそれがj2meだったかどうか思い出しません。

特別なことはありません。 ASMXサービスは非常に基本的な旧式のSOAPサービスです。 WCFは、WS- *標準をサポートしています。しかし、彼らはすべてうまく一緒に遊ぶべきです。

j2meでうまく動作しないときに、どのような問題が発生したのか正確に言うことができますか?すべての例外、エラーメッセージなどを投稿してください。Javaから.NETへの変換が必要なことがあれば、私はいくつかの助けを得ることができます。

+0

netbeansの使用(新しいWebサービスクライアントの作成)私のwcfサービス用のファイル。 私はすぐにエラー(j2me)を受け取りました char、guidとdurationはサポートされていません。私のアプリケーションではguidを使用していますが、使用しないchar(すべての文字列は文字列)、duration(時間マップへの読み取りマップ)は使用しません。 j2seは単純なものでしたが、参考文献を追加しました。ソースファイル(nice netbeans feauture)に必要なメソッドをdragedして、小さなスタブを作成しました。 Guidsは文字列に翻訳されました。(続き) –

+0

をj2meで使用しても、プロジェクトへの参照を取得できませんでした。 eclipseを使用するWeb参照を取得するためのツールが見つかりませんでした。 私はビジュアルスタジオで甘やかされているので、ウェブサービスへの参照をクリックして呼び出すのは簡単です)。いくつかの成功で、私はj2eeプロキシのメソッドを使用することができました、ちょうどプロキシの部分を削除したいと思います。 そしてあなたの助けに感謝します:) –

+0

@セバスチャン:Netbeans/j2meの問題は、j2meがサポートしているものであるようですね。そして2番目のJ2MEはEclipseのためのツールではないようです。私が誤解しているかどうか教えてください。私はEclipseを1年以上使っておらず、自分が何をしているのか本当に分かっていませんでした。 –

1

まず、basicHttpBindingを使用するようにWCFサービスを設定しましたか?

第2に、データコントラクトでネイティブデータ型(文字列、int、boolなど)のみを使用します。これは、DateTimeなどの.NETオブジェクトを使用しないでください。これは、WCFサービスを呼び出して、友人の更新を取得し、ツイートを投稿するMIDLet Twitterアプリケーションを開発しなければならなかったときに行ったことです。 2.5.2)スタブジェネレータを使用してクライアントを作成します。 WCFのwsdlに外部インポート(wsdl:importとxsd:import)があっても、クライアントを作成するのに問題はありませんでした。

+0

この点までの答えを私と私の実験まで提供しました。私はdatetimeに問題があることに気付きました。スタブを生成するためにj2me sdkツールを使用して、私は結果を混在させました。グラフィカルユーザインタフェースでは、コマンドラインツールでjava.util.calendarに不満を表明したため、コードは生成されませんでした。カレンダーのエラー、UNKOWNトークンが導入された場所のエラー j2seが同じ参照を呼び出す際に問題がなかったということは、不快な点です。 –

+0

あなたの所見は正しいです。主にJ2SEで実行できるのはJ2MEで実行可能なものではありません。その理由は、実行中のデバイスの制限があるからです。 DateTimeで問題が発生している場合は、文字列に変換してクライアント側の日付に戻すのはなぜですか? – user20155

0

JSR172 Webサービスを動作させるためのトリックは、スキーマを本当にシンプルに保つことです(基本データ型と文字列)。複雑なオブジェクトを避け、文字列にnullを渡さない(空文字列を使用する)。

0

私もこのエラーを受けました(シンプルなタイプ、charなどを理解していません)。
VSを使ってwsdlを自動生成すると、それが作成され、(スキーマファイルで定義された)型への外部参照が作成されます。 文字列、boolなどの型だけを使用しても、charを使用する型の参照リストのように見えるものが生成され、その他の型ではJ2MEクライアントジェネレータが不満を感じます。 私は生成されたwsdlを取り出し、使用していなかったタイプを参照するスキーマへの参照を削除し、それが機能しました。

関連する問題