web-dev-qa-db-ja.com

WebMethodパラメータを必須にする方法

Metro 1.5スタックを使用してJAX-WS 2.0 Webサービスを作成するには、「Javaから開始する」アプローチを使用します。 SoapUIなどの標準ツールをWebサービスの1つに向けると、WebMethodsへのパラメーターがオプションであることを示します。生成されたxsdはminOccurs = 0を示します。

「Javaから開始する」アプローチでWebMethodパラメーターを必須にする方法(xsdのminOccurs = 1)が必要です。 Javaアノテーションがあると思いますが、見つかりませんでした。XmlElementアノテーションには必要な属性がありますが、XmlElementをWebMethodパラメータに適用できません。

Xsdを手動で編集してminOccursを1に設定する以外に、WebMethodパラメーターを必須にする方法はありますか?

30
Dean Schulze

Metro 2.0ではパラメーターに@XmlElement(required=true)を設定できることを確認しました。生成されたxsdにはminOccurs=0がありません。生成されたxsdからminOccursを除外するため、デフォルト値は1と見なされます。

また、JAX-WS 2.2 webservices-api.jarendorsed/ディレクトリに配置して、JDKをアップグレードする必要があります。

同じ質問を投稿しました Javaフォーラム に。

答えとminOccursのデフォルトが1であることを指摘しているjituのおかげで、.xsdから除外すると望ましい効果が得られます。

@XmlElement(required = true)がパラメーターに設定されている場合、SoapUIはパラメーターがオプションであることを示しなくなりました。

28
Dean Schulze

生成されたxsdはminOccurs = 0を示します。

これは仕様によるものです。非プリミティブはオプションであり、プリミティブのみが必要です。

「Javaから開始する」アプローチでWebMethodパラメーターを必須にする方法(xsdのminOccurs = 1)が必要です。

前述のようにプリミティブを使用しない限り、これは不可能です。

そして、実際には、これがJavaが最初に失敗する理由の1つです(そうです、開発者はそれを気に入っていますが、 それは機能しないだけです ):壊れやすく、契約が変更される可能性があります(!)、そうではありません必要なすべてのコントロールを提供しますが、それは WS-Securityとうまく適合します などではありません。したがって、実際には contract-first は快適ではありませんが、少なくとも、できます。

6
Pascal Thivent

これは、この同じ質問の別の議論です。応答によると、Metro 2.0は@XmlElementをメソッドパラメータに配置することをサポートしており、問題を解決するはずです。

http://forums.Java.net/jive/thread.jspa?messageID=385565&#385565

Metro 2.0は2009年12月10日にリリースされたため、EAにはありません。私はそれを試して、それが機能するかどうかを確認します。

2
Dean Schulze