【问题标题】:JAX-WS response with holder<List<T>> with an object but with null attributesJAX-WS 响应与 holder<List<T>> 具有对象但具有空属性
【发布时间】:2015-01-15 11:09:14
【问题描述】:

我在调用 webService 时遇到了一个大问题。当我导入 wsdl 的类时,我将此 @WebService 作为接口:

public void consultarProgramaCronicos(
        @WebParam(name = "consultarProgramaCronicos", targetNamespace = "") ConsultarProgramaCronicosVO consultarProgramaCronicos,
        @WebParam(name = "sip", targetNamespace = "", mode = WebParam.Mode.OUT) Holder<String> sip,
        @WebParam(name = "programaCronico", targetNamespace = "", mode = WebParam.Mode.OUT) Holder<List<ProgramaCronicoVO>> programaCronico,
        @WebParam(name = "marcaCronicidad", targetNamespace = "", mode = WebParam.Mode.OUT) Holder<List<MarcaCronicidadVO>> marcaCronicidad)
        throws ConsultarProgramaCronicosFault;    

所以在我的课堂上,当我调用这个方法时,我需要这样调用它:

final Holder<String> sipHolder = new Holder<String>();
final Holder<List<ProgramaCronicoVO>> listProgramaCronico = new Holder<List<ProgramaCronicoVO>>();
final Holder<List<MarcaCronicidadVO>> listMarcaCronicidad = new Holder<List<MarcaCronicidadVO>>();
cronicos.consultarProgramaCronicos(cpc, sipHolder, listProgramaCronico, listMarcaCronicidad);

我传递了一个带有我想要的参数的 cpc 对象,并传递了 3 个持有者作为答案。 问题是我在列表中收到一个对象,但该对象的原始参数为“null”。

这是我收到的 xml:

<soap:Body wsu:Id="id-1995630735" xmlns:wsu="">
<consultarProgramaCronicosResponse xmlns="">
  <sip>1703595</sip>
  <marcaCronicidad>
    <tipoMarca>CCC</tipoMarca>
    <resultado>624</resultado>
    <estadosalud>5</estadosalud>
    <gravedad>1</gravedad>
    <nivel>1</nivel>
    <descripcionNivel>Texto cualquiera.</descripcionNivel>
  </marcaCronicidad>
</consultarProgramaCronicosResponse></soap:Body>

在“sip”持有人我有正确的价值。但是在列表持有者中,我有一个包含 MarcaCronicidadV0 元素的列表,但该元素的所有字符串均为空。

现在,我向您展示 .wsdl 的一部分:

<xsd:complexType name="consultarProgramaCronicosResponse">
<xsd:sequence>
<xsd:element minOccurs="0" name="sip" type="xs:string"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="programaCronico" type="tns:programaCronicoVO"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="marcaCronicidad" type="tns:marcaCronicidadVO"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="marcaCronicidadVO">
<xsd:sequence>
<xsd:element name="tipoMarca" type="xs:string"/>
<xsd:element minOccurs="0" name="resultado" type="xs:string"/>
<xsd:element minOccurs="0" name="estadosalud" type="xs:string"/>
<xsd:element minOccurs="0" name="gravedad" type="xs:string"/>
<xsd:element minOccurs="0" name="nivel" type="xs:string"/>
</xsd:sequence>
</xsd:complexType>

这是 MarcaCronicidadVO 类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "marcaCronicidadVO", namespace = "", propOrder = { "tipoMarca",
        "resultado", "estadosalud", "gravedad", "nivel" })
public class MarcaCronicidadVO {

    @XmlElement(required = true)
    protected String tipoMarca;
    protected String resultado;
    protected String estadosalud;
    protected String gravedad;
    protected String nivel;

    //getters y setters here

最后是“主要对象”:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "consultarProgramaCronicosResponse", namespace = "", propOrder = { "sip", "programaCronico","marcaCronicidad" })
public class ConsultarProgramaCronicosResponse {

    protected String sip;
    protected List<ProgramaCronicoVO> programaCronico;
    protected List<MarcaCronicidadVO> marcaCronicidad;

public String getSip() {
        return sip;
    }
public void setSip(String value) {
        this.sip = value;
    }
public List<MarcaCronicidadVO> getMarcaCronicidad() {
        if (marcaCronicidad == null) {
            marcaCronicidad = new ArrayList<MarcaCronicidadVO>();
        }
        return this.marcaCronicidad;
    }
public List<ProgramaCronicoVO> getProgramaCronico() {
        if (programaCronico == null) {
            programaCronico = new ArrayList<ProgramaCronicoVO>();
        }
        return this.programaCronico;
    }

为什么我没有任何错误,并且我收到了 3 个正确的持有人,但在持有人列表中我有一个元素,其属性字符串为空值??????

对不起,我的英语。谢谢!

【问题讨论】:

    标签: list soap null wsdl jax-ws


    【解决方案1】:

    我不知道为什么,但是在 package-info 类中添加这个参数解决了我的问题:

    "elementFormDefault = XmlNsForm.QUALIFIED"

    一开始我是这样的:

    @javax.xml.bind.annotation.XmlSchema(namespace = "http://myUrl....")
    

    现在我说:

    @javax.xml.bind.annotation.XmlSchema(namespace = "http://myUrl....", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
    

    这样运行正常! 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多