我正在嘗試使用cxf創建Java Spring Web服務。我正在採取(自下而上)採用Java合約並註釋代碼來生成Web服務的方法。Java/Spring Jax-ws在WSDL中公開了.Net的複雜類型
鑑於以下帶註釋的Web界面代碼。
WebInterface:
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的複雜類型(不是我知道的一個好名字)。這些都是在一個單獨的文件中定義的(儘管我也試圖使它成爲一個本地類)。
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被簡單地列爲複雜類型:
KeyValuePair類。所以,當我在WSDL中指向一個.Net4服務引用時,生成的代碼會將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(我認爲稱爲數據協定)?
或者它habve做的另一種方式(通過指定XSD文件莫名其妙的KeyValuePair?)
我使用:
春天工具套件2.9.2
CXF 2.6.1
通過VS.NET 4的2010
謝謝,它最終如此簡單。我犯這樣一個基本的錯誤讓我感到羞愧。 – DUFF 2012-08-03 06:01:08