【问题标题】:Java SOAP WebService: how can I use as input an array of String for a method on a WSDL?Java SOAP WebService:如何将字符串数组用作 WSDL 上的方法的输入?
【发布时间】:2020-11-08 10:55:38
【问题描述】:

我正在开发 Java 1.6 版本的 WebService SOAP(客户基础设施的约束),我需要开发一种操作方法,该方法将带有字符串和字符串数组的普通对象作为输入,并返回输出(经过一番阐述)。它由字符串 codiceFiscale 组成的输入对象和字符串数组是您在代码示例中看到的名为 classificazioni 的字段:

我在 WSDL 上遇到过这种情况:

<complexType name="VerificaClassiPFInputDTO">
            <sequence>
                <element name="codiceFiscale" nillable="true" type="xsd:string" />
                <element name="classificazioni" type="xsd:string" nillable="true"
                    minOccurs="0" maxOccurs="unbounded" />
            </sequence>
        </complexType>

这是我的 INPUT DTO(java 端):

public class VerificaClassiPFInputDTO implements Serializable {


private static final long serialVersionUID = -3933923831884051815L;

/**
 * Codice Fiscale della PF
 */
private String codiceFiscale = "";
/**
 * Array di classificazioni da processare sul codice fiscale passato
 */
private String[] classificazioni = null;

/**
 * Costruttore default
 */
public VerificaClassiPFInputDTO() {
    super();
}

public String getCodiceFiscale() {
    return codiceFiscale;
}

public void setCodiceFiscale(String codiceFiscale) {
    this.codiceFiscale = codiceFiscale;
}

public String[] getClassificazioni() {
    return classificazioni;
}

public void setClassificazioni(String[] classificazioni) {
    this.classificazioni = classificazioni;
}

那个 String[] 这是我的数组。当我在 SOAPUI 客户端部署 WS 时,这种方法的情况是这样的

对我来说是正确的。对于该字段,我希望“0 on more”字符串作为该数组中的输入。在这种情况下,数组中有三个String,另一个是codiceFiscale

即使在 IBM RAD Web Service Explorer 工具中,情况也是这样:

所以,对我来说没关系。但是,当我传递更多字符串(在数组中)只有最后一个被处理

在代码中,当我处理输入时,我总是获得一个长度为 1 的字符串数组,最后一个。

那么,怎么了? 如何在 WSDL、DTO 等中映射这种类型的输入?为什么会发生这种情况?

如果我在 DTO 中切换类型

from String[] to List<String> classificazioni

不做那个操作,运行时说格式不匹配,我尝试调用方法。

请问有人可以帮助我吗?如果我必须更改 WSDL 中的地图,并相应地更改 DTO,那不是问题,但是如何?

为了获得这种输入,我应该将什么作为 complextype 放入 WSDL 并因此放入 DTO?

请帮帮我....我快疯了:(

【问题讨论】:

    标签: java web-services soap wsdl


    【解决方案1】:

    我认为我和我的同事已经解决了这个问题。你必须这样写setClassificazioni方法:

    添加其他两种方法

    public String getClassificazioni(int i){
      return classificazioni[i];
    }
    
    public void setClassificazioni(int i, String classificazione){
       this.classificazioni[i] = classificazione;
    }
    

    重要提示: 它适用于所有类型的数组,也适用于没有 java 原始类型的数组。我不知道它是否也适用于多维数组(自适应方法)。

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2011-07-10
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多