私は C# から来ているので、Java に多くの (優れた) 使いやすさの特徴や機能があるとは期待できないことはわかっていますが、最近この Java プロジェクトに参加したばかりで、まったく理解できません。このアウト。C# / .NET では、Web サービス プロキシ クラスと生成されたデータ コントラクトを作成するのは簡単なことではありませんでしたが、何らかの理由で、Web サービスの Java 実装は適切ではないように思えます。
これが取引です...
wsimport を使用して、生成された .java ファイルを .wsdl ファイルから作成します。例えば...
"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin ".\wsdl\MyWSDL.wsdl"
wsdl の現在の場所 (「C:\Users\ME\etc\wsdl\MyWSDL.wsdl」) として、このハードコーディングされた (そのフレーズを入力すると吐きそうになりました) 「wsdlLocation」に気付きました。だから私はそれを取り出します:
"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin -wsdllocation "NULL" ".\wsdl\MyWSDL.wsdl"
生成されたサービスをインスタンス化すると...
MyService xyz = new MyService();
エラーが発生します。「can't find file C:\blahblah\Temp\NULL」の行に沿った何か。わかりました... 製図板に戻ります。これを少し調べた後、wsdl の場所として "classpath:META-INF/WSDL.wsdl" を使用することについて話している Stack Overflow の投稿を見つけました。
"%JAVA_HOME%\bin\wsimport" ... -wsdllocation "classpath:WSDLs/MyWSDL.wsdl" ".\wsdl\MyWSDL.wsdl"
copy ".\wsdl\*" .\bin\WSDLs
cd bin
"%JAVA_HOME%\bin\jar" cf WebServiceProxies.jar *
エラー!
"Unknown protocol: classpath"
奇妙なことに、Stack Overflow の投稿が回答としてマークされました。過去2年間で、「クラスパス:」がサポートされなくなったか、これを行う別の方法があるところまでかなりの量が変化した可能性があると思いますが、それを理解する/答えを見つけることができませんでした.
わかりましたので、答えが必要ないくつかの質問のうちの 1 つがあります (事前に感謝します!!!! ここで気が狂いそうです!)。
実行時に WSDL を必要としない方法はありますか? 価値があるのは、オブジェクトをインスタンス化するときにこれが必要なのはBSだと思います。この要件を抑制する方法はありますか? 別のツールを使っていたら…?
このコードが実行時に WSDL を必要としないという方法がない場合、パッケージからこの WSDL を取得するにはどうすればよいですか? JAR ファイル内から WSDL をロードするには、wsdllocation 引数に何を入力すればよいですか?