イントラネットで .asmx?WSDL リンクとして表示される、MS ベースの Web サービスがいくつかあります。最新の Visual Studio でこの Web サービスを使用する場合は問題ありません。すべてのビジネス オブジェクトには意味があります。Microsoft は、ServiceReference が消費されるときに何らかの秘密のハンドシェイクを使用し、実際の CSharp 型が次のように型付けされた要素の背後にあるという独自の知識に依存していると思われます。<s:schema>
しかし、私たちの部門ではすべて Java を使用する必要があります。私が選んだフレームワークは CXF (v.2.4.2) で、Eclipse、SOAP-UI、Tomcat とうまく連携します。また、相互運用性にも問題があります。まず、すべての wsdl を手動で修正する必要があります。すべて<s:schema> <s:any> are replaced with single <s:any>
。この後、CXF はクライアント側 Java の生成を完了することができます。しかし、Java オブジェクトはビジネス向けの POJO ではありません。それらはある種の DOM 要素です。
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <any/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
public static class GetDepartmentsResult {
@XmlAnyElement(lax = true)
protected Object any;
/**
* Gets the value of the any property.
*
* @return
* possible object is
* {@link Object }
*
*/
public Object getAny() {
return any;
}
/**
* Sets the value of the any property.
*
* @param value
* allowed object is
* {@link Object }
*
*/
public void setAny(Object value) {
this.any = value;
}
}
コードが実行時にテストされると、すべて正常に動作します。ただし、すべてのオブジェクトは DOM 要素として扱われる必要があります。<s:schema>
wsld2javaを削除したり、使用したりするときにどこかで間違いを犯したと確信しているため、セマンティクスが失われました。しかし、Java クラスを CSharp と同じくらいきれいに見せるために、CXF で正確に何をすべきでしょうか?
ありがとうございました。
編集: http://msdn.microsoft.com/en-us/magazine/cc188755.aspxでいくつかの手がかりを得ました。誰かが同じ答えを検索したときに、このリンクが後で有効になることを願っています。記事を見つける他の方法は次のとおりです。
MSDN マガジン > 発行物 > 2003 > 4 月 > XML ファイル: Web サービスとデータセット