格式化 XSD 以特定方式生成字符串数组
Formatting an XSD to produce an Array of Strings in a specific way
我没有很多使用 XSD 文件或 SOAP 的经验,如果这是一个微不足道的请求,我很抱歉。
我正在构建一个应用程序以通过 Quickbooks Web 连接器与 Quickbooks Desktop 通信,并且我需要我的 Web 服务在调用 authenticate(strUserName, strPassword) 时 return 一个字符串数组。
我正在使用 XJC 插件从 XSD 文件 FYI 创建我的 Java POJO 类。
我目前的 XSD 响应定义格式如下:
<xsd:element name="authenticateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="authenticateResult" type="xsd:string" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我也试过这样格式化:
<xsd:element name="authenticateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="authenticateResult">
<xsd:simpleType>
<xsd:list itemType="xsd:string"/>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我的 Spring 服务器正在 return 调用如下方法:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:authenticateResponse xmlns:ns2="http://developer.intuit.com/">
<ns2:authenticateResult>291bc0f2-b22b-40b7-9326-8bb946cf91ca</ns2:authenticateResult>
<ns2:authenticateResult/>
</ns2:authenticateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但我需要它们像这样 returned:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://developer.intuit.com/">
<SOAP-ENV:Body>
<ns1:authenticateResponse>
<ns1:authenticateResult>
<ns1:string>15c9ce293bd3f41b761c21635b14fa06</ns1:string>
<ns1:string></ns1:string>
</ns1:authenticateResult>
</ns1:authenticateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
注意:父对象应该是'ns2:authenticateResult',它的子对象应该是'ns2:string'作为元素。
如何正确地return?
在 XSD 模型中,每个 XML 标签都需要相应的 XSD 元素声明。您的 XSD 没有 'string' 标签的任何元素定义。因此,您需要将 'string' 元素显式声明为 'authenticateResponse' 元素的子元素:
<xsd:element name="authenticateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="authenticateResult">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="string" type="xsd:string" maxOccurs="unbounded">
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我没有很多使用 XSD 文件或 SOAP 的经验,如果这是一个微不足道的请求,我很抱歉。
我正在构建一个应用程序以通过 Quickbooks Web 连接器与 Quickbooks Desktop 通信,并且我需要我的 Web 服务在调用 authenticate(strUserName, strPassword) 时 return 一个字符串数组。
我正在使用 XJC 插件从 XSD 文件 FYI 创建我的 Java POJO 类。
我目前的 XSD 响应定义格式如下:
<xsd:element name="authenticateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="authenticateResult" type="xsd:string" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我也试过这样格式化:
<xsd:element name="authenticateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="authenticateResult">
<xsd:simpleType>
<xsd:list itemType="xsd:string"/>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我的 Spring 服务器正在 return 调用如下方法:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:authenticateResponse xmlns:ns2="http://developer.intuit.com/">
<ns2:authenticateResult>291bc0f2-b22b-40b7-9326-8bb946cf91ca</ns2:authenticateResult>
<ns2:authenticateResult/>
</ns2:authenticateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但我需要它们像这样 returned:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://developer.intuit.com/">
<SOAP-ENV:Body>
<ns1:authenticateResponse>
<ns1:authenticateResult>
<ns1:string>15c9ce293bd3f41b761c21635b14fa06</ns1:string>
<ns1:string></ns1:string>
</ns1:authenticateResult>
</ns1:authenticateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
注意:父对象应该是'ns2:authenticateResult',它的子对象应该是'ns2:string'作为元素。
如何正确地return?
在 XSD 模型中,每个 XML 标签都需要相应的 XSD 元素声明。您的 XSD 没有 'string' 标签的任何元素定义。因此,您需要将 'string' 元素显式声明为 'authenticateResponse' 元素的子元素:
<xsd:element name="authenticateResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="authenticateResult">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="string" type="xsd:string" maxOccurs="unbounded">
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>