持有者<list <t>&gt;的JAX-WS响应使用对象但具有空属性</list <t>

时间:2015-01-15 11:09:14

标签: list soap null wsdl jax-ws

我在调用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”持有人中,我有正确的价值。但是在List持有者中我有一个包含MarcaCronicidadV0元素的列表,但是这个元素的所有字符串都是null。

现在,我向您展示.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个正确的持有人,但在持有人列表中我有一个元素属性字符串为空值??????

对不起我的英文。谢谢!

1 个答案:

答案 0 :(得分: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)

这个运行正常! 我希望能有所帮助。