简体   繁体   English

JAXB Complex子XmlRootElement

[英]JAXB Complex sub XmlRootElement

i need the below format output using JAXB 我需要使用JAXB的以下格式输出

<?xml version="1.0" encoding="UTF-8"?>
<tata-sky>
    <change-package-request>
        <sub-no>1064781105</sub-no>
        <ivr-id>ubona_7301341344310891411101430133</ivr-id>
        <date-time>05/29/2013 00:16:13</date-time>
        <package-list>
            <package-ref>Punjabi Regional Free Pack</package-ref>
            <action-code>Delete</action-code>
        </package-list>
    </change-package-request>
</tata-sky>

The output Iam getting 输出Iam得到

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tata-sky>
    <change-package-request>
        <sub-no>1064781105</sub-no>
        <ivr-id>ubona_7301341344310891411101430133</ivr-id>
        <date-time>05/29/2013 00:16:13</date-time>
    </change-package-request>
    <package-ref>
        <package-ref>Punjabi Regional Free Pack</package-ref>
        <action-code>Delete</action-code>
    </package-ref>
</tata-sky>

('package-ref' should be child of 'change-package-request'.Below is my Code) ('package-ref'应该是'change-package-request'的子代。以下是我的代码)

ChangePackage .java ChangePackage .java

package com.tsg.flow;

/**
 *
 * @author Shafiq
 */
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "tata-sky")
public class ChangePackage {

    //@XmlElement(name = "change-package-request", required = true)
    private ChangepackageRequest changePReq;


    public void setChangePReq(ChangepackageRequest changePReq) {
        this.changePReq = changePReq;
    }
  @XmlElement(name = "change-package-request")
    public ChangepackageRequest getChangePReq() {
        return changePReq;
    }
 private PackageRef packageList;


    public void setPackageList(PackageRef packageList) {
        this.packageList = packageList;
    }
@XmlElement(name = "package-ref")
    public PackageRef getPackageList() {
        return packageList;
    }

    public ChangePackage() {
    }
}

ChangepackageRequest.java ChangepackageRequest.java

package com.tsg.flow;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 *
 * @author Shafiq
 */
@XmlRootElement(name = "change-package-request")
@XmlType(propOrder = {"sub_no", "ivr_id", "date_time"})
public class ChangepackageRequest {

    private String sub_no;
    private String ivr_id;
    private String date_time;

   /*  private PackageList packageList;


     public void setPackageList(PackageList packageList) {
     this.packageList = packageList;
     }
 @XmlElement(name = "package-ref")
     public PackageList getPackageList() {
     return packageList;
     }*/
    //@XmlElementWrapper(name = "change-package-request")    
    @XmlElement(name = "sub-no")
    public String getSub_no() {
        return sub_no;
    }

    public void setSub_no(String sub_no) {
        this.sub_no = sub_no;
    }

    @XmlElement(name = "ivr-id")
    public String getIvr_id() {
        return ivr_id;
    }

    public void setIvr_id(String ivr_id) {
        this.ivr_id = ivr_id;
    }

    @XmlElement(name = "date-time")
    public String getDate_time() {
        return date_time;
    }

    public void setDate_time(String date_time) {
        this.date_time = date_time;
    }
}

PackageRef.java PackageRef.java

package com.tsg.flow;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 *
 * @author Shafiq
 */
@XmlRootElement(name = "package-list")
@XmlType(propOrder = {"package_ref", "action_code"})
public class PackageRef {
        private String package_ref;
    private String action_code;
       // @XmlElementWrapper(name = "package-list")
    @XmlElement(name = "package-ref")
    public String getPackage_ref() {
        return package_ref;
    }

    public void setPackage_ref(String package_ref) {
        this.package_ref = package_ref;
    }

    //@XmlElementWrapper(name = "package-list")
    @XmlElement(name = "action-code")
    public String getAction_code() {
        return action_code;
    }

    public void setAction_code(String action_code) {
        this.action_code = action_code;
    }
}

Main Method: ChangePackageService.java 主要方法: ChangePackageService.java

package com.tsg.flow;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

/** 
 *
 * @author Shafiq
 */
public class ChangePackageService {

    public static void main(String... args) {
        // public String createXMLString() {
        ChangePackage objCP = new ChangePackage();
        ChangepackageRequest cr = new ChangepackageRequest();

        cr.setSub_no("1064781105");
        cr.setIvr_id("ubona_7301341344310891411101430133");
        cr.setDate_time("05/29/2013 00:16:13");
        PackageRef pl = new PackageRef();
        pl.setPackage_ref("Punjabi Regional Free Pack");
        pl.setAction_code("Delete");
        objCP.setPackageList(pl);
        objCP.setChangePReq(cr);


        // create JAXB context and instantiate marshaller
        JAXBContext context = null;
        Marshaller m = null;
        try {
            context = JAXBContext.newInstance(ChangePackage.class);
            m = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            // Write to System.out
            //m.marshal(cs, System.out);
            // Write to File
            m.marshal(objCP, System.out);
        } catch (JAXBException ex) {
            System.out.println("Error XML Generation" + ex.getMessage());
            // System.out.println("Exception Occured during marshalling: " + ex.getMessage());

        }

        //  return "";
        //  }
    }
}

Please All do reply the solution at the earliest.Thanks 请大家尽早答复解决方案。谢谢

It looks like you have commented out part of the code in ChangepackageRequest that tells JAXB that package-list is a child of change-package-request ie 看来您已注释掉ChangepackageRequest中的部分代码,该代码告诉JAXB package-listchange-package-request的子代,即

@XmlElement(name = "package-ref")
public PackageList getPackageList() {`

What you would need to do is 您需要做的是

  • Uncomment that code 取消注释该代码
  • Update it to use the PackageRef class instead of PackageList 更新它以使用PackageRef类而不是PackageList
  • Remove any reference to PackageRef from ChangePackage ChangePackage删除对PackageRef任何引用

I found the solution... 我找到了解决方案...

in ChangePakageRequest.java 在ChangePakageRequest.java中

"added @XmlType(propOrder = {""}))"

so @XmlType(propOrder = {"", "date_time", "ivr_id", "sub_no"}) hence it assume that package-ref is a child of change-package-request. 因此@XmlType(propOrder = {"", "date_time", "ivr_id", "sub_no"})因此,它假定package-ref是change-package-request的子代。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM