XML : how to avoid JAXB extracting element's namespace and put it at the place of root element

please help me with following question:

I am using Jersey and I have one XML, this XML comes with a class named "Definition" with well XML annotation annotated, the XML looks like:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <tosca:Definitions xmlns:tosca="http://docs.oasis-open.org/tosca/ns/2011/12" targetNamespace="http://www.example.org/" id="winery-defs-for_ex1-MediaWiki">      <tosca:ServiceTemplate targetNamespace="http://www.example.org/" name="MediaWiki" id="MediaWiki">          <ns3:Properties xmlns:ns3="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" xmlns:ns4="http://www.eclipse.org/winery/model/selfservice">          </ns3:Properties>          <tosca:TopologyTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.example.com" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="MediaWiki_WebApp" type="ns3:MediaWiki_WebApp" id="MediaWiki_WebApp" ns4:x="496" ns4:y="7">                  <tosca:Policies>                      <tosca:Policy xmlns:ns5="http://www.example.org/PolicyTemplates" xmlns:ns6="http://example.com/PolicyTypes" policyRef="ns5:PerformancePolicyTemplate" policyType="ns6:PerformancePolicyType" name="policy"/>                  </tosca:Policies>              </tosca:NodeTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.example.com" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="WikiDB_MySQLDB" type="ns3:WikiDB_MySQLDB" id="WikiDB_MySQLDB" ns4:x="841" ns4:y="145">                  <tosca:Policies>                      <tosca:Policy xmlns:ns5="http://www.example.org/PolicyTemplates" xmlns:ns6="http://example.com/PolicyTypes" policyRef="ns5:PerformancePolicyTemplate" policyType="ns6:PerformancePolicyType" name="2"/>                  </tosca:Policies>              </tosca:NodeTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.example.com" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="MediaWiki_PHPApp" type="ns3:MediaWiki_PHPApp" id="MediaWiki_PHPApp" ns4:x="183" ns4:y="84"/>              <tosca:RelationshipTemplate xmlns:ns3="http://www.example.com" name="con_337" type="ns3:ConsistsOf" id="con_337">                  <tosca:SourceElement ref="MediaWiki_WebApp"/>                  <tosca:TargetElement ref="WikiDB_MySQLDB"/>              </tosca:RelationshipTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://www.example.com" name="con_346" type="ns3:ConsistsOf" id="con_346">                  <tosca:SourceElement ref="MediaWiki_WebApp"/>                  <tosca:TargetElement ref="MediaWiki_PHPApp"/>              </tosca:RelationshipTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://www.example.com" name="con_358" type="ns3:InteractsWith" id="con_358">                  <tosca:SourceElement ref="MediaWiki_PHPApp"/>                  <tosca:TargetElement ref="WikiDB_MySQLDB"/>              </tosca:RelationshipTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes" name="WikiDB_MySQLDB_tbtHostedOn_MySQLServer" type="ns3:HostedOn" id="WikiDB_MySQLDB_tbtHostedOn_MySQLServer">                  <tosca:SourceElement ref="WikiDB_MySQLDB"/>                  <tosca:TargetElement ref="MySQLServer"/>              </tosca:RelationshipTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes" name="MediaWiki_PHPApp_tbtHostedOn_ApachePHPModule" type="ns3:HostedOn" id="MediaWiki_PHPApp_tbtHostedOn_ApachePHPModule">                  <tosca:SourceElement ref="MediaWiki_PHPApp"/>                  <tosca:TargetElement ref="ApachePHPModule"/>              </tosca:RelationshipTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.example.com" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="MySQLServer" type="ns3:MySQLServer" id="MySQLServer" ns4:x="841" ns4:y="338"/>              <tosca:RelationshipTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes" name="MySQLServer_tbtHostedOn_UbuntuVM_11" type="ns3:HostedOn" id="MySQLServer_tbtHostedOn_UbuntuVM_11">                  <tosca:SourceElement ref="MySQLServer"/>                  <tosca:TargetElement ref="UbuntuVM_11"/>              </tosca:RelationshipTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.opentosca.org/types/nodetypes" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="UbuntuVM" type="ns3:UbuntuVM" id="UbuntuVM_11" ns4:x="517" ns4:y="338">                  <tosca:Properties>                      <ns5:Properties xmlns:ns5="http://www.opentosca.org/types/nodetypes/propertiesdefinition/winery" xmlns:ns6="http://www.eclipse.org/winery/model/selfservice">                          <ns5:SSHUser/>                          <ns5:SSHKey/>                          <ns5:ImageID/>                          <ns5:IPAddress/>                          <ns5:Size/>              </ns5:Properties>                  </tosca:Properties>              </tosca:NodeTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes" name="UbuntuVM_11_tbtHostedOn_AmazonEC2_2" type="ns3:HostedOn" id="UbuntuVM_11_tbtHostedOn_AmazonEC2_2">                  <tosca:SourceElement ref="UbuntuVM_11"/>                  <tosca:TargetElement ref="AmazonEC2_2"/>              </tosca:RelationshipTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.opentosca.org/types/nodetypes" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="AmazonEC2" type="ns3:AmazonEC2" id="AmazonEC2_2" ns4:x="517" ns4:y="476">                  <tosca:Properties>                      <ns5:Properties xmlns:ns5="http://www.opentosca.org/types/nodetypes/propertiesdefinition/winery" xmlns:ns6="http://www.eclipse.org/winery/model/selfservice">                          <ns5:Password/>                          <ns5:Account/>              </ns5:Properties>                  </tosca:Properties>              </tosca:NodeTemplate>              <tosca:NodeTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaSpecificTypes" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="ApachePHPModule" type="ns3:ApachePHPModule" id="ApachePHPModule" ns4:x="183" ns4:y="215">                  <tosca:Properties>                      <ns5:Properties xmlns:ns5="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaSpecificTypes/propertiesdefinition/winery" xmlns:ns6="http://www.eclipse.org/winery/model/selfservice"/>                  </tosca:Properties>              </tosca:NodeTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes" name="ApachePHPModule_tbtHostedOn_ApacheWebserver" type="ns3:HostedOn" id="ApachePHPModule_tbtHostedOn_ApacheWebserver">                  <tosca:SourceElement ref="ApachePHPModule"/>                  <tosca:TargetElement ref="ApacheWebserver"/>              </tosca:RelationshipTemplate>              <tosca:NodeTemplate xmlns:ns3="http://www.opentosca.org/types/nodetypes" xmlns:ns4="http://www.opentosca.org/winery/extensions/tosca/2013/02/12" name="ApacheWebserver" type="ns3:ApacheWebserver" id="ApacheWebserver" ns4:x="183" ns4:y="338">                  <tosca:Properties>                      <ns5:Properties xmlns:ns5="http://www.opentosca.org/types/nodetypes/propertiesdefinition/winery" xmlns:ns6="http://www.eclipse.org/winery/model/selfservice">                          <ns5:HTTPPort/>              </ns5:Properties>                  </tosca:Properties>              </tosca:NodeTemplate>              <tosca:RelationshipTemplate xmlns:ns3="http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes" name="ApacheWebserver_tbtHostedOn_UbuntuVM_11" type="ns3:HostedOn" id="ApacheWebserver_tbtHostedOn_UbuntuVM_11">                  <tosca:SourceElement ref="ApacheWebserver"/>                  <tosca:TargetElement ref="UbuntuVM_11"/>              </tosca:RelationshipTemplate>          </tosca:TopologyTemplate>      </tosca:ServiceTemplate>  </tosca:Definitions>    

The problem is that every time I will get several this kind of result,so I put it in a new class, and I put an ID for each "Definition",my new class looks like this(it is generated from xsd by xjc):

    @XmlAccessorType(XmlAccessType.FIELD)      @XmlType(name = "", propOrder = {          "specification"      })      @XmlRootElement(name = "MuTopologies")      public class MuTopologies {            protected List<MuTopologies.Specification> specification;              public List<MuTopologies.Specification> getSpecification() {              if (specification == null) {                  specification = new ArrayList<MuTopologies.Specification>();              }              return this.specification;          }                @XmlAccessorType(XmlAccessType.FIELD)          @XmlType(name = "", propOrder = {              "definitions"          })          public static class Specification {                @XmlElement(name = "Definitions", required = true,namespace="http://docs.oasis-open.org/tosca/ns/2011/12")              protected org.eclipse.toscaModel.Definitions definitions;              @XmlAttribute(name = "id", required = true)              protected int id;                  public org.eclipse.toscaModel.Definitions getDefinitions() {                  return definitions;              }                  public void setDefinitions(org.eclipse.toscaModel.Definitions value) {                  this.definitions = value;              }                  public int getId() {                  return id;              }                  public void setId(int value) {                  this.id = value;              }                    @XmlAccessorType(XmlAccessType.FIELD)              @XmlType(name = "")              public static class Definitions                  extends TDefinitions              {                  }            }        }    

Then I use JAXB to marshal it, I can get almost the perfect result,looks like this:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <MuTopologies xmlns:tosca="http://docs.oasis-open.org/tosca/ns/2011/12">      <specification id="1">          <tosca:Definitions targetNamespace="http://www.example.org/" id="winery-defs-for_ex1-MediaWiki">             ........          </tosca:Definitions>      </specification>      <specification id="2">          <tosca:Definitions targetNamespace="http://www.example.org/" id="winery-defs-for_ex1-MediaWiki">             ........          </tosca:Definitions>      </specification>  </MuTopologies>    

The only question is that my namespace in the "Definitions" is moved to the root element of my new XML(xmlns:tosca="http://docs.oasis-open.org/tosca/ns/2011/12" ), I do not want this, I want like this:

     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>      <MuTopologies >          <specification id="1">              <tosca:Definitions xmlns:tosca="http://docs.oasis-open.org/tosca/ns/2011/12" targetNamespace="http://www.example.org/" id="winery-defs-for_ex1-MediaWiki">                 ........              </tosca:Definitions>          </specification>          <specification id="2">              <tosca:Definitions xmlns:tosca="http://docs.oasis-open.org/tosca/ns/2011/12" targetNamespace="http://www.example.org/" id="winery-defs-for_ex1-MediaWiki">                 ........              </tosca:Definitions>          </specification>      </MuTopologies>    

Is there a method to avoid JAXB extracting the namespace of Element? if not, is there a way to wrap my every "Definition" xml in a new xml??

Thanks very much. I have try to solve it for the whole weekend, it makes me crazy. thanks.

No comments:

Post a Comment