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。