1

cxfを使用してJavaSpringWebサービスを作成しようとしています。私は、Javaコントラクトを取得し、コードに注釈を付けてWebサービスを生成する(ボトムアップ)アプローチを採用しています。

次の注釈付きWebインターフェイスコードが与えられます。

Webインターフェイス:

package org.webservice;
import java.util.ArrayList;
import java.util.Calendar;
import javax.jws.WebMethod;

@WebService
public interface WebInterfaceI {
    @WebMethod(operationName = "writeXML")
    public String writeStuff(String objectType, String payloadXML,
                             String callerInfo, String options);
@WebMethod(operationName = "XML")
    public ArrayList<String> readStuff(KeyValuePair Data, Calendar asOfDate,
                                       KeyValuePair options);
}

writeStuff ()関数はWSDLで問題なく公開されます。

readStuff ()メソッドは、KeyValuePairと呼ばれる複合型を渡します(私が知っている素晴らしい名前ではありません)。これらは別のファイルで定義されています(私もローカルクラスにしようとしましたが)。

KeyValuePairクラス:

package org.webservice;
import java.io.Serializable;
import java.util.List;
import javax.jws.WebService;

public class KeyValuePair implements Serializable {    
    private static final long serialVersionUID = 1L;
    KeyValuePair() {
        myValues = null;
        myKeys = null;
    }
    KeyValuePair(List<String> keys, List<String> values) {
        myValues = values;
        myKeys = keys;
    }
    List<String> myValues;
    List<String> myKeys;
}

ただし、WSDLでは、KeyValuePairは単純に複合型としてリストされています。したがって、.Net4サービスリファレンスをWSDLにポイントすると、生成されるコードはKeyValuePairをオブジェクトとして扱います。

生成された.Netクライアントコード:

    public partial class keyValuePair: object, System.ComponentModel.INotifyPropertyChanged {
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(string propertyName) {
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if((propertyChanged != null)) {
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));   
            }
        }
    }

KeyValuePairのメンバーは公開されていないため、クライアントにメンバーを設定することはできません。

したがって、質問は次のとおりです。

私がやろうとしていることは実際に可能ですか?

アノテーションを使用してWSDLを介してKeyVlauePair(データコントラクトと呼ばれるもの)を公開する簡単な方法はありますか?

または、別の方法で実行する必要がありますか(XSDファイルにKeyValuePairを指定することによって)

私が使用しているもの:

Springツールスイート2.9.2

cxf 2.6.1

VS2010経由の.Net4。

4

1 に答える 1

1

こんにちは@DUFF多分あなたはKeyValuePairオブジェクトをWEBサービスに入力していませんあなたはKeyValuePairクラスでこのようなことを試すことができます、

public class KeyValuePair implements Serializable {
    private static final long serialVersionUID = 1L;
    List<String> myValues;
    List<String> myKeys;

    public KeyValuePair(List<String> keys, List<String> values) {
        this.myKeys = keys;
        this.myValues = values;
    }

    public List<String> getMyValues() {
        return myValues;
    }

    public void setMyValues(List<String> myValues) {
        this.myValues = myValues;
    }

    public List<String> getMyKeys() {
        return myKeys;
    }

    public void setMyKeys(List<String> myKeys) {
        this.myKeys = myKeys;
    }
}

そして、公開されたWSDLファイルのKeyValuePairオブジェクトを設定する前に。

これらがお役に立てば幸いです。:)

于 2012-08-01T23:22:36.720 に答える