我在调用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个正确的持有人,但在持有人列表中我有一个元素属性字符串为空值??????
对不起我的英文。谢谢!
答案 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)
这个运行正常! 我希望能有所帮助。