我正在从Java项目向SOAP WS发送请求。
通过wsdl,我使用以下方法生成了所需的源:
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.1.6</version>
我使用的WSDL具有以下字段:
<xs:complexType name="HitOffers">
<xs:sequence>
<xs:element minOccurs="0" name="Comment" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="Offers" nillable="true" type="tns:ArrayOfHitOfferBase"/>
</xs:sequence>
</xs:complexType>
<xs:element name="HitOffers" nillable="true" type="tns:HitOffers"/>
<xs:complexType name="ArrayOfHitOfferBase">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="HitOfferBase" nillable="true"
type="tns:HitOfferBase"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfHitOfferBase" nillable="true" type="tns:ArrayOfHitOfferBase"/>
<xs:complexType name="HitOfferBase">
<xs:sequence>
<xs:element minOccurs="0" name="Id" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="IsExported" type="xs:boolean"/>
<xs:element minOccurs="0" name="IsRequired" type="xs:boolean"/>
<xs:element minOccurs="0" name="Order" type="xs:int"/>
<xs:element minOccurs="0" name="Status" nillable="true" type="tns:OfferStatus"/>
</xs:sequence>
</xs:complexType>
因此,在请求中,我想看到如下内容:
<b:Offers xmlns:c="http://schemas.datacontract.org/2004/07/TCSBank.Common.Model.Applications.Offers">
<c:Comment i:nil="true"/>
<c:Offers>
<c:HitOfferBase
xmlns:d="http://schemas.datacontract.org/2004/07/TCSBank.Common.Model.Applications.PreCollection.Offers.Mail"
i:type="d:PreCollectionMailOffer">
<c:Id>xxx</c:Id>
<c:IsExported>false</c:IsExported>
<c:IsRequired>true</c:IsRequired>
<c:Order>1</c:Order>
<c:Status i:nil="true"/>
<d:Mail xmlns:e="http://schemas.datacontract.org/2004/07/TCSBank.Common.Model.Applications.Offers.Blocks">
<c:BlockResult i:nil="true"/>
<c:IsWithClarify>false</c:IsWithClarify>
<c:Name>xxx</c:Name>
<c:OriginalValue>mail123@yandex.ru</c:OriginalValue>
<e:Value i:nil="true"/>
</d:Mail>
</c:HitOfferBase>
</c:Offers>
</b:Offers>
但我的要求看起来有点不同:
<ns28:Offers>
<ns10:ArrayOfHitOfferBase>
<ns10:HitOfferBase xsi:type="ns26:PreCollectionMailOffer">
<ns10:Id>425100970</ns10:Id>
<ns10:IsExported>false</ns10:IsExported>
<ns10:IsRequired>true</ns10:IsRequired>
<ns10:Order>1</ns10:Order>
<ns20:MailOfferBlock>
<ns10:IsWithClarify>false</ns10:IsWithClarify>
<ns10:Name>??????? email</ns10:Name>
<ns10:OriginalValue xsi:nil="true"/>
</ns20:MailOfferBlock>
</ns10:HitOfferBase>
</ns10:ArrayOfHitOfferBase>
正如你所看到的
ArrayOfHitOfferBase公司
标记名称,而不是
提供
,这是错误的
议论
param为null,因此没有标记)。我生成的源代码很好。一流的
HitOffers公司
来源看起来不错:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "HitOffers", namespace = "http://schemas.datacontract.org/2004/07/TCSBank.Common.Model.Applications.Offers", propOrder = {
"comment",
"offers"
})
public class HitOffers {
@XmlElementRef(name = "Comment", namespace = "http://schemas.datacontract.org/2004/07/TCSBank.Common.Model.Applications.Offers", type = JAXBElement.class)
protected JAXBElement<String> comment;
@XmlElementRef(name = "Offers", namespace = "http://schemas.datacontract.org/2004/07/TCSBank.Common.Model.Applications.Offers", type = JAXBElement.class)
protected JAXBElement<ArrayOfHitOfferBase> offers;
正如你看到的领域
@XmlElementRef
属性
name=“优惠”
这是正确的。有谁能帮助我理解这个问题的根源,以及如何摆脱这个错误的命名?
Thanx提前!