Java Jaxb:生成包含不同根元素的XML,这些根元素包含在正在封送的类中?

Java Jaxb:生成包含不同根元素的XML,这些根元素包含在正在封送的类中?,java,jaxb,jaxb2,Java,Jaxb,Jaxb2,我正在尝试使用JAXB创建公司内部XML,JAXB具有以下格式 <GovtTalkMessage schemaLocation="schema1" xlmns="" xlmns:bs= "" xlmns:gt=""> <Header> .... </Header> <Body> <FormSubmission schemaLocation="schema2" xlmns="" xlmns:

我正在尝试使用JAXB创建公司内部XML,JAXB具有以下格式

<GovtTalkMessage  schemaLocation="schema1" xlmns="" xlmns:bs= "" xlmns:gt="">  
    <Header>    ....    </Header>    
   <Body>
       <FormSubmission schemaLocation="schema2" xlmns="" xlmns:xx="">
          .....
         <CompanyIncorporation schemaLocation="schema3" xlmns="" xlmns:yy="">
                 ...
          </CompanyIncorporation>
        </FormSubmission>    
   </Body> 
</GovtTalkMessage>
网关包-info.java:

 @XmlSchema(namespace = "",   
        xmlns = {    
            @XmlNs(namespaceURI = "http://www.w3.org/2000/09/xmldsig#", prefix = "dsig"),   
            @XmlNs(namespaceURI = "http://www.govtalk.gov.uk/schemas/govtalk/core", prefix = "gt"),   
            @XmlNs(namespaceURI = "http://www.w3.org/2001/XMLSchema-instance" , prefix="xsi")
       },   
        location = "http://www.govtalk.gov.uk/CM/envelope http://xmlgw.companieshouse.gov.uk/v1-0/schema/Egov_ch-v2-0.xsd",
     elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)   

    package com.xx.gateway;  
    import javax.xml.bind.annotation.XmlNs;   
    import javax.xml.bind.annotation.XmlSchema;
FormSubmission包信息.java

@XmlSchema(namespace = "",   
    xmlns = {    
        @XmlNs(namespaceURI = "http://xmlgw.companieshouse.gov.uk", prefix = "bs"),   
        @XmlNs(namespaceURI = "http://xmlgw.companieshouse.gov.uk/Header", prefix = ""),   
        @XmlNs(namespaceURI = "http://www.w3.org/2001/XMLSchema-instance" , prefix="xsi")
   }, 
   // location ="http://xmlgw.companieshouse.gov.uk/Header http://xmlgw.companieshouse.gov.uk/v2-1/schema/forms/FormSubmission-v2-7.xsd" ,
       //@javax.xml.bind.annotation.XmlSchema(namespace = "http://xmlgw.companieshouse.gov.uk/Header", 
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
    package com.xx.formsubmission;
    import javax.xml.bind.annotation.XmlNs;   

如何在网关需要的位置生成
schemalocations
xmlns

您需要在包上使用
@XmlSchema
注释

可以通过将
package info.java
添加到与JAXB注释类相同的包中来实现这一点

有关示例,请参见javadoc:

您可以在
Marshaller
上设置
Marshaller.JAXB\u SCHEMA\u位置
,以输出
schemaLocation

marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.example.com/address address.xsd")
了解更多信息


通过在相应的
@XmlRootElement
类中添加
@xmldattribute
解决了此问题

@XmlAttribute(name="namespace_name")
public String namespace_value="xxxxxxxxxx";

我在package-info.java中使用了
@XmlSchema
注释,而在我能够在Xml元素中添加不同的xmlns之后,问题是所有元素都是在顶部元素生成的,而不是在它应该在的其他标记处生成的。package-info.java中指定的Schemalocation未反映在生成的XML中。能否显示代码?这些不同的元素是由不同包中的类用它们自己的包信息建模的吗?我已经添加了包的包信息,请建议。我已经按照您的建议设置了schemalocation,但我只能为,我还需要schemalocation for和标记以及各种XMLN。现在,我不用在package-info.java中设置所有schemalocation和XMLN,而是使用@XmlAttribute进行设置,它工作正常(在生成的FormSubmission&CompanyCorporation内部),您推荐这种方法吗?
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.example.com/address address.xsd")
@XmlAttribute(name="namespace_name")
public String namespace_value="xxxxxxxxxx";