Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法用JaxB将一个类包装在另一个类中的elementwrapper?_Java_Xml_Class_Nested_Jaxb - Fatal编程技术网

Java 有没有办法用JaxB将一个类包装在另一个类中的elementwrapper?

Java 有没有办法用JaxB将一个类包装在另一个类中的elementwrapper?,java,xml,class,nested,jaxb,Java,Xml,Class,Nested,Jaxb,我试图从xml中获得一个输出,它需要对我已经拥有的类进行包装。但我无法包装这些元素 我已经尝试过@xmlementwrapper这个类,也尝试过以某种方式嵌套,但都没有成功 这是我的地址类 @XmlRootElement(name="v41:address") public class Address { private String street; private String housenr; private String zip; pri

我试图从xml中获得一个输出,它需要对我已经拥有的类进行包装。但我无法包装这些元素

我已经尝试过
@xmlementwrapper
这个类,也尝试过以某种方式嵌套,但都没有成功

这是我的地址类

@XmlRootElement(name="v41:address")
public class Address {
    private String street;
    private String housenr;
    private String zip;
    private String city;

    public Address(String street, String housenr, String zip, String city) {
        setStreet(street);
        setHousenr(housenr);
        setZip(zip);
        setCity(city);
    }

    public Address(){

    }


    @XmlElement(name = "v41:street")
    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    @XmlElement(name = "v41:houseNr")
    public String getHousenr() {
        return housenr;
    }

    public void setHousenr(String housenr) {
        this.housenr = housenr;
    }

    @XmlElement(name = "v41:zip")
    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    @XmlElement(name = "v41:city")
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "street='" + street + '\'' +
                ", housenr=" + housenr +
                ", zip=" + zip +
                ", city='" + city + '\'' +
                '}';
    }
}
这是我的请求类

@XmlRootElement(name="v41:request")
public class WSGRequest {
    private String ispId;
    private String returnSpeekAtNok;
    private String basisContrEleId;
    private String contrEleId;
    private String bbType;
    private String dnType;
    private String qualifExtRef;
    private String correlationId;
    private String correlationValue;





public WSGRequest(String ispId, String returnSpeekAtNok, String basisContrEleId, String contrEleId, String bbType, String dnType, String qualifExtRef, String correlationId) {
        setIspId(ispId);
        setReturnSpeekAtNok(returnSpeekAtNok);
        setBasisContrEleId(basisContrEleId);
        setContrEleId(contrEleId);
        setBbType(bbType);
        setDnType(dnType);
        setQualifExtRef(qualifExtRef);
        setCorrelationid(correlationId);

    }

    public WSGRequest() {

    }

    @XmlAttribute
    public String getCorrelationid() {
        return correlationId;
    }

    public void setCorrelationid(String correlationid) {
        this.correlationId = correlationid;
    }

    public String getCorrelationValue() {
        return correlationValue;
    }

    public void setCorrelationValue(String correlationValue) {
        this.correlationValue = correlationValue;
    }

    @XmlElement(name = "v41:ispId")
    public String getIspId() {
        return ispId;
    }

    public void setIspId(String ispId) {
        this.ispId = ispId;
    }

    @XmlElement(name = "v41:returnSpeedAtNok")
    public String getReturnSpeekAtNok() {
        return returnSpeekAtNok;
    }

    public void setReturnSpeekAtNok(String returnSpeekAtNok) {
        this.returnSpeekAtNok = returnSpeekAtNok;
    }

    @XmlElement(name = "v41:basisContrEleId")
    public String getBasisContrEleId() {
        return basisContrEleId;
    }

    public void setBasisContrEleId(String basisContrEleId) {
        this.basisContrEleId = basisContrEleId;
    }

    @XmlElement(name = "v41:contrEleId")
    public String getContrEleId() {
        return contrEleId;
    }

    public void setContrEleId(String contrEleId) {
        this.contrEleId = contrEleId;
    }

    @XmlElement(name = "v41:bbType")
    public String getBbType() {
        return bbType;
    }

    public void setBbType(String bbType) {
        this.bbType = bbType;
    }

    @XmlElement(name = "v41:dnType")
    public String getDnType() {
        return dnType;
    }

    public void setDnType(String dnType) {
        this.dnType = dnType;
    }

    @XmlElement(name = "v41:qualifExtRef")
    public String getQualifExtRef() {
        return qualifExtRef;
    }

    public void setQualifExtRef(String qualifExtRef) {
        this.qualifExtRef = qualifExtRef;
    }



    @Override
    public String toString() {
        return "WSGRequest{" +
                "ispId='" + ispId + '\'' +
                ", returnSpeekAtNok='" + returnSpeekAtNok + '\'' +
                ", basisContrEleId='" + basisContrEleId + '\'' +
                ", contrEleId='" + contrEleId + '\'' +
                ", bbType='" + bbType + '\'' +
                ", dnType='" + dnType + '\'' +
                ", qualifExtRef='" + qualifExtRef + '\'' +
                ", correlationId='" + correlationId + '\'' +
                ", correlationValue='" + correlationValue + '\'' +
                '}';
    }

    /***** STATIC CLASS ADDRESS ******/
    /*
    public static class Address {
        private String street;
        private String housenr;
        private String zip;
        private String city;

        public Address(String street, String housenr, String zip, String city) {
            setStreet(street);
            setHousenr(housenr);
            setZip(zip);
            setCity(city);
        }

        public Address(){

        }


        @XmlElement(name = "v41:street")
        public String getStreet() {
            return street;
        }

        public void setStreet(String street) {
            this.street = street;
        }

        @XmlElement(name = "v41:houseNr")
        public String getHousenr() {
            return housenr;
        }

        public void setHousenr(String housenr) {
            this.housenr = housenr;
        }

        @XmlElement(name = "v41:zip")
        public String getZip() {
            return zip;
        }

        public void setZip(String zip) {
            this.zip = zip;
        }

        @XmlElement(name = "v41:city")
        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        @Override
        public String toString() {
            return "Address{" +
                    "street='" + street + '\'' +
                    ", housenr=" + housenr +
                    ", zip=" + zip +
                    ", city='" + city + '\'' +
                    '}';
        }

    /*** FINE STATIC CLASS ADDRESS *****/

}
我需要得到这个输出:

<v41:srvQualifByAddress>
             <v41:request correlationId="test">
                    <v41:ispId>x</v41:ispId>
                             <v41:returnSpeedAtNok>x</v41:returnSpeedAtNok>
                   <v41:basisContrEleId>x</v41:basisContrEleId>
                <v41:contrEleId>x</v41:contrEleId>
                <v41:bbType>x</v41:bbType>
                <v41:dnType>x</v41:dnType>
                <v41:qualifExtRef>x</v41:qualifExtRef>
                <v41:address>
                                   <v41:street>x</v41:street>
                                   <v41:houseNr>x</v41:houseNr>
                                   <v41:zip>x</v41:zip>
                                   <v41:city>x</v41:city>
                </v41:address>
             </v41:request>
          </v41:srvQualifByAddress>
这是我在“主”部分的代码的一部分


我想要的是一个字符串,它包含我上面发布的XML调用,可能在构造函数中有一个Address对象。

在您的
WSGRequest
类中当前没有
Address
字段,您到底尝试了什么?有,但它们像注释,因为否则代码会给我一个错误。我尝试过XmlElementWrapper类,但没有成功。我还尝试将make Address作为WSGRequest(地址类的getter)中的一个XmlElement。现在为了避免这个问题,我将把地址字段放在WSGRequest中,但不是作为类,而是作为字段。但这不是我想要的工作方式,这将是太多的硬代码和静态。我已经解决了这个问题。我刚刚使用索引of和子字符串将address类生成的XML插入请求中。:)
public static String requestJaxObjectToXML(WSGRequest request){
        try{
            //CREATE JAXB Context
            JAXBContext jaxbContext = JAXBContext.newInstance(WSGRequest.class);

            //Create Marshaller
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

            /*Required Formatting?*/
            jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

            //Print XML String to Console
            StringWriter sw = new StringWriter();
            //Write XML to Stringwriter
            jaxbMarshaller.marshal(request, sw);

            String xmlContent = sw.toString();

            return xmlContent;
        }
        catch(JAXBException e){
            //return e.getCause().toString();
            return "ERROR!";


        }
    }
 WSGRequest request = new WSGRequest("100032", "true", "110", "100", "2", "1", "#myTicId", "test");
        String completeRequest = requestJaxObjectToXML(request);