我正在尝试使用cxf创建Java spring Web服务。我采用(自下而上)方法获取Java合同并注释代码以生成Web服务。
给出以下带注释的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的复杂类型(我不知道这个名字)。这些是在一个单独的文件中定义的(虽然我也试图使它成为一个本地类)。
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被简单地列为复杂类型。因此,当我在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(我认为称为数据合约)的简单方法?
或者它是否有办法以另一种方式(通过以某种方式指定一个XSD文件KeyValuePair?)
我正在使用:
Spring tools suite 2.9.2
cxf 2.6.1
.Net 4来自VS 2010。
答案 0 :(得分: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对象。
希望这些有帮助。:)