JAXB生成错误的命名空间

JAXB生成错误的命名空间,jaxb,Jaxb,我有一个xsd(让我们把它命名为afb),它导入另一个xsd(让我们把它命名为kts)。我在afb.xsd中引用了kts.xsd的一个元素以及正确的名称空间 但是当我使用JAXB生成类时,refered元素的名称空间是错误的 我的意思是,引用的元素应该有kts名称空间,因为它有afb名称空间 因此,根据这个xsd验证XML是失败的,也无法将XML数据绑定到java模型中 例: afb.xsd: <xs:import namespace="http://www.boschkts.com" s

我有一个xsd(让我们把它命名为afb),它导入另一个xsd(让我们把它命名为kts)。我在afb.xsd中引用了kts.xsd的一个元素以及正确的名称空间

但是当我使用JAXB生成类时,refered元素的名称空间是错误的

我的意思是,引用的元素应该有kts名称空间,因为它有afb名称空间

因此,根据这个xsd验证XML是失败的,也无法将XML数据绑定到java模型中

例: afb.xsd:

<xs:import namespace="http://www.boschkts.com" schemaLocation="kts.xsd"/>
<xs:element name="vehicle">

<xs:complexType>
        <xs:sequence>
          <xs:element ref="vType"/>
          <xs:element name="RESULTS" type="kts:RESULTS" >
        </xs:sequence>
    </xs:complexType>
</xs:element>
如果我观察Vehicle.java,results属性的名称空间应该是“http://www.boschkts.com“而不是”http://www.boschafb.com"

如果我手动更改名称空间,那么将数据从xml绑定到java模型就可以了。 但是仍然针对xsd进行验证失败,错误如下:

原因:org.xml.sax.SAXParseException:cvc复杂类型。2.4.a:发现以元素“kts:RESULTS”开头的无效内容。“{”之一http://www.boschafb.com应为“:RESULTS}”

有人能指出我在xsd中可能遗漏了什么吗?还是jaxb生成类的方式,我必须手动修改这些类

问候,


Satya

我假设你的
abf.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.boschafb.com"
           targetNamespace="http://www.boschafb.com" elementFormDefault="qualified">

尝试使用包含而不是导入,如下所示:

而不是


这种样式对内部命名空间includes造成的问题要少得多。

我不知道这是否解决了OP的问题,但它对我起到了作用-我有一个来自导入模式的子元素,该模式采用父命名空间,而它本应保留导入的命名空间。从
改为
对我很有效。谢谢
public class Vehicle {

    @XmlElement(namespace = "http://www.boschafb.com", required = true)
    protected String vType;
    @XmlElement(name = "RESULTS", namespace = "http://www.boschafb.com", required = true)
    protected Results results;

}
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.boschafb.com"
           targetNamespace="http://www.boschafb.com" elementFormDefault="qualified">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.boschkts.com" 
           targetNamespace="http://www.boschkts.com" elementFormDefault="qualified">
    <xs:element name="RESULTS">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SUMMARY" type="SUMMARY" minOccurs="0" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.boschafb.com"
           targetNamespace="http://www.boschafb.com" elementFormDefault="qualified"
           xmlns:kts="http://www.boschkts.com">

    <xs:import namespace="http://www.boschkts.com" schemaLocation="kts.xsd"/>

    <xs:element name="vehicle">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="vType"/>
                <xs:element ref="kts:RESULT"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>