[英]Jaxb: Generating XML with different root element included in class which is being marshalled?
我正在嘗試使用具有以下格式的JAXB創建Companies House XML
<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>
除了schemalocations和xlmns之外,XML結構已經正確生成,schemalocation不會為應該在其中放置任何元素的任何元素生成,並且所有的xmlns在<GovtTalkMessage>
中都可見,例如
<GovtTalkMessage schemaLocation="schema1" xlmns="" xlmns:bs= "" xlmns:gt="" xlmns:xx="" xlmns:yy="">
FormSubmission
和CompanyCorporation
由xjc
生成為@XmlRootElement
。
xmlns的相關@XmlSchema屬性和schemalocation值已添加到package-info.java中,也按此處建議的方式嘗試了@XmlElementDecl
,但對我沒有幫助。
CompanyIncorportion package-info.java :
@XmlSchema(namespace = "",
xmlns = {
@XmlNs(namespaceURI = "http://xmlgw.companieshouse.gov.uk", prefix = ""),
@XmlNs(namespaceURI = "http://www.w3.org/2001/XMLSchema-instance" , prefix="xsi")
},
location = "http://xmlgw.companieshouse.gov.uk http://xmlgw.companieshouse.gov.uk/v2-1/schema/forms/CompanyIncorporation-v2-6.xsd",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNSET)
package com.xx.ch;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;
網關package-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 package-info.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: http : //docs.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlSchema.html
您可以在Marshaller.JAXB_SCHEMA_LOCATION
上設置Marshaller
以輸出schemaLocation
:
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.example.com/address address.xsd")
欲獲得更多信息
通過在相應的@XmlRootElement
類中添加@XmlAttribute
,可以解決此問題。
@XmlAttribute(name="namespace_name")
public String namespace_value="xxxxxxxxxx";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.