如何在 wsdl 中设置架构以正确解析项目列表?
How can I set the schema in a wsdl to correctly parse a list of items?
我进行了深入搜索,但没有找到解决此问题的方法:
我有一个 Web 服务需要接受这样的项目列表:
<registrationform>
...
...
<registerdoclist>
<registerdoc>
<date>2015-10-27</date>
<doctype>CC</doctype>
<filename>document1.pdf</filename>
<filecontent>JVBERi0xLjUNCi1tb1DQoxIDAg</filecontent>
<extrainfo>document A</extrainfo>
</registerdoc>
<registerdoc>
<date>2015-10-27</date>
<doctype>CC</doctype>
<filename>document2.pdf</filename>
<filecontent>IHRydWU+Pj4+DQplbmRvYmoNCjI</filecontent>
<extrainfo>document b</extrainfo>
</registerdoc>
</registerdoclist>
...
...
</registrationform>
架构是这样配置的(只有相关部分):
<xs:element maxOccurs="unbounded" minOccurs="0" name="registerdoclist" nillable="true" type="tns:registerdoc"/>
<xs:complexType name="registerdoc">
<xs:sequence>
<xs:element minOccurs="1" name="date" type="xs:date"/>
<xs:element minOccurs="1" name="doctype" type="tns:Alfa3Type"/>
<xs:element minOccurs="1" name="filename" type="tns:Alfa255Type"/>
<xs:element minOccurs="1" name="filecontent" type="xs:base64Binary"/>
<xs:element minOccurs="0" name="url" type="tns:Alfa255Type"/>
<xs:element minOccurs="0" name="extrainfo" type="tns:Alfa255Type"/>
</xs:sequence>
</xs:complexType>
当我生成网络服务 java 对象时,在注册 class 中,registerdoclist 似乎没问题,因为它是 Registerdoc 对象的列表:
@XmlElement(nillable = true)
protected List<Registerdoc> registerdoclist;
和 Registerdoc class:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "registerdoc", propOrder = {
"date",
"doctype",
"filename",
"filecontent",
"url",
"extrainfo"
})
public class Registerdoc {
@XmlElement(required = true, type = String.class)
@XmlJavaTypeAdapter(SctdXmlGregorianCalendarAdapter.class)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar date;
@XmlElement(required = true)
protected String doctype;
@XmlElement(required = true)
protected String filename;
@XmlElement(required = true)
protected byte[] filecontent;
protected String url;
protected String extrainfo;
...
...
在 registrationform 对象中,我有一个名为 registerdoclist 的 registerdoc 对象列表,这些对象显然与要解析的 xml 结构相匹配,但是当我调用 web 服务时,出现此错误:
<faultstring><![CDATA[Unmarshalling Error: unexpected element (uri:"", local:"registerdoc")
那么,模式有什么问题?我如何配置它以正确解析上面显示的列表 registerdoclist 中的示例 xml?
您的 XML 包含 <registerdoclist>...</registerdoclist>
个包含元素 <date>
等的元素,因此缺少 XML 个元素的集合包装级别。
您需要一个额外的 class 来容纳 List<Registerdoc>
:
<xs:element name="registerdoclist" type="tns:registerdoclist"/>
<xs:complexType name="registerdoclist">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0"
name="registerdoc" type="tns:registerdoc"/>
</xs:sequence>
</xs:complexType>
我进行了深入搜索,但没有找到解决此问题的方法: 我有一个 Web 服务需要接受这样的项目列表:
<registrationform>
...
...
<registerdoclist>
<registerdoc>
<date>2015-10-27</date>
<doctype>CC</doctype>
<filename>document1.pdf</filename>
<filecontent>JVBERi0xLjUNCi1tb1DQoxIDAg</filecontent>
<extrainfo>document A</extrainfo>
</registerdoc>
<registerdoc>
<date>2015-10-27</date>
<doctype>CC</doctype>
<filename>document2.pdf</filename>
<filecontent>IHRydWU+Pj4+DQplbmRvYmoNCjI</filecontent>
<extrainfo>document b</extrainfo>
</registerdoc>
</registerdoclist>
...
...
</registrationform>
架构是这样配置的(只有相关部分):
<xs:element maxOccurs="unbounded" minOccurs="0" name="registerdoclist" nillable="true" type="tns:registerdoc"/>
<xs:complexType name="registerdoc">
<xs:sequence>
<xs:element minOccurs="1" name="date" type="xs:date"/>
<xs:element minOccurs="1" name="doctype" type="tns:Alfa3Type"/>
<xs:element minOccurs="1" name="filename" type="tns:Alfa255Type"/>
<xs:element minOccurs="1" name="filecontent" type="xs:base64Binary"/>
<xs:element minOccurs="0" name="url" type="tns:Alfa255Type"/>
<xs:element minOccurs="0" name="extrainfo" type="tns:Alfa255Type"/>
</xs:sequence>
</xs:complexType>
当我生成网络服务 java 对象时,在注册 class 中,registerdoclist 似乎没问题,因为它是 Registerdoc 对象的列表:
@XmlElement(nillable = true)
protected List<Registerdoc> registerdoclist;
和 Registerdoc class:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "registerdoc", propOrder = {
"date",
"doctype",
"filename",
"filecontent",
"url",
"extrainfo"
})
public class Registerdoc {
@XmlElement(required = true, type = String.class)
@XmlJavaTypeAdapter(SctdXmlGregorianCalendarAdapter.class)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar date;
@XmlElement(required = true)
protected String doctype;
@XmlElement(required = true)
protected String filename;
@XmlElement(required = true)
protected byte[] filecontent;
protected String url;
protected String extrainfo;
...
...
在 registrationform 对象中,我有一个名为 registerdoclist 的 registerdoc 对象列表,这些对象显然与要解析的 xml 结构相匹配,但是当我调用 web 服务时,出现此错误:
<faultstring><![CDATA[Unmarshalling Error: unexpected element (uri:"", local:"registerdoc")
那么,模式有什么问题?我如何配置它以正确解析上面显示的列表 registerdoclist 中的示例 xml?
您的 XML 包含 <registerdoclist>...</registerdoclist>
个包含元素 <date>
等的元素,因此缺少 XML 个元素的集合包装级别。
您需要一个额外的 class 来容纳 List<Registerdoc>
:
<xs:element name="registerdoclist" type="tns:registerdoclist"/>
<xs:complexType name="registerdoclist">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0"
name="registerdoc" type="tns:registerdoc"/>
</xs:sequence>
</xs:complexType>