1

イントラネットで .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>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;any/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/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 サービスとデータセット

4

1 に答える 1

0

答え: 不可能です。

徹底的な調査の結果、サービス側にビジネス CSharp オブジェクトがない場合、クライアントでビジネス POJO を再構築することは不可能であることは明らかです。それは簡単です。

私の特定の状況では:

  • ASMX ASP.NET を使用する CXF 2.4.2 wsdl2java で s:schema エラーが発生する: FAIL
  • CXF 2.4.2 の SOAPUI は同じ理由で失敗します
  • ASMX ASP.NET を使用する Oracle Sun Metro Glassfish 3.1 wsimport には、スキーマのローカル コピー PASS が必要です (ただし、WSDL のローカル コピーが必要ですが、ビジネス オブジェクトは必要ありません)。

将来、最良のシナリオは次のとおりです。

  • Oracle Sun WSIT Tango は、Microsoft WCF サービスを追加の「シークレット ハンドシェイク」で消費して、消費時と実行時の両方でメタ情報を配信します。
于 2011-08-26T13:42:57.307 に答える