我目前正在尝试将一个对象编组到xml中,但是在编组时,名称空间的结尾太过分了,我似乎无法找出原因。
以下是在valu.xsd:
中引用ValuationDetails的ValuationIn <xs:complexType name="ValuationIn">
<xs:sequence>
<xs:element xmlns:q1="httpAddress/common" minOccurs="0" name="ValuationIdentifier" nillable="true" type="q1:ValuationIdentifier">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element xmlns:q2="httpAddress/common" minOccurs="0" name="ValuationDetails" nillable="true" type="q2:ValuationDetails">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
,这是公共模式中的ValuationDetails元素:
<xs:element name="ValuationDetails" nillable="true" type="tns:ValuationDetails"/>
<xs:complexType name="Policy">
<xs:sequence>
<xs:element minOccurs="0" name="PolicyEffectiveDate" nillable="true" type="xs:dateTime">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="PolicyRenewalDate" nillable="true" type="xs:dateTime">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="EstimateExpirationDate" nillable="true" type="xs:dateTime">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="CurrentCoverage" nillable="true" type="xs:int">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="AccountNumber" nillable="true" type="xs:string">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="AttachmentCount" type="xs:int"/>
<xs:element minOccurs="0" name="RecordType" nillable="true" type="xs:string">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="DataSource" nillable="true" type="xs:string">
<xs:annotation>
<xs:appinfo>
<DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="Policy" nillable="true" type="tns:Policy"/>
这是valuService模式中的元素:
<xs:element name="GetFastTrackURL">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q35="httpAddress/valuation"
minOccurs="0" name="FastTrackRequest" nillable="true"
type="q35:FastTrackRequest" />
<xs:element xmlns:q36="httpAddress/valuation"
minOccurs="0" name="Valuation" nillable="true" type="q36:ValuationIn" />
<xs:element xmlns:q37="httpAddress/valuation"
minOccurs="0" name="SupplementalDataRequest" nillable="true"
type="q37:SupplementalDataRequest" />
</xs:sequence>
</xs:complexType>
</xs:element>
当我将其分解并将其与我们在项目中使用的工作硬编码XML进行比较时,我可以看到命名空间已关闭。比较xml的一小部分,显示顶部的硬编码和底部的生成。
硬编码:
<val:Valuation>
<val1:ValuationDetails>
<com:PropertyAddress>
<com:Address1>Address</com:Address1>
<com:City>City</com:City>
<com:StateProvince>MI</com:StateProvince>
<com:ZipPostalCode>Zip</com:ZipPostalCode>
</com:PropertyAddress>
<com:Building>
<com:MainHome>
<com:YearBuilt>1979</com:YearBuilt>
<com:LivingArea>2000</com:LivingArea>
</com:MainHome>
</com:Building>
</val1:ValuationDetails>
</val:Valuation>
生成:
<val1:ValuationIn>
<com:ValuationDetails>
<com:PropertyAddress>
<com:Address1>Address</com:Address1>
<com:City>City</com:City>
<com:StateProvince>MI</com:StateProvince>
<com:ZipPostalCode>Zip</com:ZipPostalCode>
</com:PropertyAddress>
<com:Building>
<com:MainHome>
<com:YearBuilt>1979</com:YearBuilt>
<com:LivingArea>2000</com:LivingArea>
</com:MainHome>
</com:Building>
</com:ValuationDetails>
</val1:ValuationIn>
我包含的XML的子部分是模式中的q36,它们在硬编码vs生成中引用的命名空间是在硬编码的xml中xmlns = valuationService,而在生成的xmlns = valu中(评估和评估服务是两种不同的模式。)
以下是ValuationService.xsd顶部的导入:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="httpAddress/valuationservice">
<xs:import namespace="httpAddress/valuation" schemaLocation="valuation.xsd" />
<xs:import namespace="httpAddress/common" schemaLocation="common.xsd"/>
我知道写一些可能相当简单的东西是很多的,但我不能为我的生活找出为什么我的编组xml引用的命名空间不同于主要的命名空间架构。
答案 0 :(得分:0)
没有看到jaxb bean,我只能猜测。 但, 在您的xsd架构中,valuinfo位于httpAddress / common命名空间中,因此生成的xml似乎与您的架构匹配(假设com前缀已解析为httpAddress / common),因此您的硬编码的xml是“错误的”。
通常,ValuationDetail类的名称空间可以在该类的XMLRoot或XMLType注释中声明,也可以在包含Valuation对象的XMLElement上声明。
但是你的xsd架构中似乎有错误用于生成bean,因为它与你的'hardcoded'xml不匹配。