我正在使用cxf wsdl2java命令行命令来生成客户端(java文件)。我的xsd看起来像这样 -
<xs:complexType name="ArrayOfString">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="string" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ConfirmSMSResults">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sessionId" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="smsIds" type="tns:ArrayOfString"/>
</xs:sequence>
</xs:complexType>
生成的java文件ConfirmSMSResults.java
有类似这样的内容
@XmlElement(required = true)
protected ArrayOfString smsIds;
应该是protected String[] smsIds;
我在date
文件中定义的xsd
数据类型遇到了类似问题,该问题已转换为XMLGregorianCalendar
。但是,我通过使用外部xjb
文件并在那里定义绑定来解决它。可以找到here。我似乎无法找到与我的Array问题类似的东西。
提前谢谢。
答案 0 :(得分:2)
你在说那个
应为
protected String[] smsIds
实际上你的XSD并没有这么说。
您的XSD说smsIDs
是类型为complexType
的{{1}},它在顶部定义,而CXF将创建相应的对象ArrayOfString
。在其中有一个名为ArrayOfString
的元素可以多次出现,因此您可能会在为XSD生成的string
对象中找到您的数组/列表。
如果要删除该包装器对象,在XSD中必须更改它:
ArrayOfString
到
<xs:element maxOccurs="1" minOccurs="1" name="smsIds" type="tns:ArrayOfString"/>
答案 1 :(得分:0)
好吧,好像我错过了什么。 if review.product.has_coupon_codes?
if CouponCodeService.assign_coupon(review) # this is false
if !review.coupon.nil? # this is false
review.approve! # this is some how executed.
success_message(review)
review.send_reviewer_approved_email
else
review.update(aasm_state: 'requested')
error_message(review)
end
else
review.update(aasm_state: 'requested')
error_message(review)
end
end
def self.assign_coupon(review)
begin
product = review.product
if product.has_coupon_codes?
coupon = product.coupons.where(claimed: false).first
coupon.review_id = review.id
coupon.claimed = true
if coupon.save
return true
else
return false
end
else
return false
end
rescue Exception => e
return false
end
end
属性引用type
对象,而应该是ArrayofString
。似乎不需要xs:string
个对象。此外,ArrayOfStrings
应该等于maxOccurs
。最终结果 -
unbounded
我还在我的xjb文件中添加了<xs:element name="ConfirmSMSResults">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sessionId" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="1" name="smsIds" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
。所以它现在看起来像collectionType="indexed"