Web services Java/SpringJAX ws在.Net的WSDL中公开复杂类型

Web services Java/SpringJAX ws在.Net的WSDL中公开复杂类型,web-services,jax-ws,Web Services,Jax Ws,我正在尝试使用cxf创建JavaSpringWeb服务。我采用的是(自底向上)方法,即采用Java契约并注释代码以生成web服务 给定以下带注释的Web界面代码 网络界面: package org.webservice; import java.util.ArrayList; import java.util.Calendar; import javax.jws.WebMethod; @WebService public interface WebInterfaceI { @WebMe

我正在尝试使用cxf创建JavaSpringWeb服务。我采用的是(自底向上)方法,即采用Java契约并注释代码以生成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);
}
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;
}
    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


.Net 4通过VS 2010。

Hi@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;
    }
}
公共类KeyValuePair实现可序列化{
私有静态最终长serialVersionUID=1L;
列出我的价值观;
列出我的钥匙;
公钥值对(列表键、列表值){
this.myKeys=keys;
this.myValues=值;
}
公共列表getMyValues(){
返回myvalue;
}
公共void setMyValues(列出myValues){
this.myValues=myValues;
}
公共列表getMyKeys(){
归还我的钥匙;
}
公共无效设置MyKey(列出MyKey){
this.myKeys=myKeys;
}
}
在您可以为公开的WSDL文件填充KeyValuePair对象之前


希望这些帮助。:)

嗨@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;
    }
}
公共类KeyValuePair实现可序列化{
私有静态最终长serialVersionUID=1L;
列出我的价值观;
列出我的钥匙;
公钥值对(列表键、列表值){
this.myKeys=keys;
this.myValues=值;
}
公共列表getMyValues(){
返回myvalue;
}
公共void setMyValues(列出myValues){
this.myValues=myValues;
}
公共列表getMyKeys(){
归还我的钥匙;
}
公共无效设置MyKey(列出MyKey){
this.myKeys=myKeys;
}
}
在您可以为公开的WSDL文件填充KeyValuePair对象之前


希望这些能帮上忙。:)

谢谢,最后还是这么简单。我为犯了这样一个基本的错误而羞愧不已。谢谢,最后还是这么简单。我犯了这样一个基本的错误,感到羞愧。