Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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解组XML中缺少一些值_Java_Xml_Jaxb_Unmarshalling - Fatal编程技术网

Java 在通过JAXB解组XML中缺少一些值

Java 在通过JAXB解组XML中缺少一些值,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我有一个XML字符串,我想使用JAXB API将其解组到JavaBean中。 以下是XML: <?xml version="1.0" encoding="UTF-8"?> <ns0:TEST_REQ xmlns:ns0="http://Test.com"> <keys> <item> <key>MyKey1</key> </item>

我有一个XML字符串,我想使用JAXB API将其解组到JavaBean中。
以下是XML:

<?xml version="1.0" encoding="UTF-8"?>
  <ns0:TEST_REQ xmlns:ns0="http://Test.com">
    <keys>
       <item>
          <key>MyKey1</key>     
       </item>
       <item>
          <key>MyKey2</key>      
       </item>
    </keys>
    <root>
      <messageid>000000123<messageid/>
      <statusmessage>Successfully Done.</statusmessage>
      <statuscode>1</statuscode>
    </root>
</ns0:TEST_REQ>  
当我在XML上解组时,我在
keysList
对象中得到了密钥列表,但我没有在对象中得到其他参数,如
messageId
元素下的其他参数。
如何在bean变量中获取这些值


请帮助我解决此问题。

您尚未正确创建
ResponseKeysBean
类。这样做:

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class ResponseKeysBean {

    private Keys keyList;
    private Root status;

    public ResponseKeysBean() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="keys")
    public Keys getKeyList() {
        return keyList;
    }

    public void setKeyList(Keys keyList) {
        this.keyList = keyList;
    }

    @XmlElement(name="root")
    public Root getStatus() {
        return status;
    }

    public void setStatus(Root status) {
        this.status = status;
    }
}  

class Root {
    private String messageId;
    private Integer statusCode;
    private String statusMessage;

    @XmlElement(name="messageid")
    public String getMessageId() {
        return messageId;
    }

    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }

    @XmlElement(name="statuscode")
    public Integer getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(Integer statusCode) {
        this.statusCode = statusCode;
    }

    @XmlElement(name="statusmessage")
    public String getStatusMessage() {
        return statusMessage;
    }

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }

    @Override
    public String toString() {
        return "Root [messageId=" + messageId + ", statusCode=" + statusCode
                + ", statusMessage=" + statusMessage + "]";
    }


}

class Keys {
    private List<Item> keysList;

    public Keys() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="item")
    public List<Item> getKeysList() {
        return keysList;
    }

    public void setKeysList(List<Item> keysList) {
        this.keysList = keysList;
    }

    @Override
    public String toString() {
        return "Keys [keysList=" + keysList + "]";
    }   
}

class Item {

    private String key;

    @XmlElement(name="key")
    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "Item [key=" + key + "]";
    }
}
public static void main(String[] args) throws JAXBException, FileNotFoundException{
        JAXBContext jaxbContext = JAXBContext.newInstance(ResponseKeysBean.class);
        Unmarshaller um = jaxbContext.createUnmarshaller();
        ResponseKeysBean keyObj = (ResponseKeysBean) um.unmarshal(new FileReader(new File("./configurationfiles/testconfig.xml")));

        System.out.println(keyObj.getKeyList());
        System.out.println(keyObj.getStatus());

    }
输出

Key List is : Keys [keysList=[Item [key=MyKey1], Item [key=MyKey2]]]
Status is : Root [messageId=000000123, statusCode=1, statusMessage=Successfully Done.]

您尚未正确创建
ResponseKeysBean
类。这样做:

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class ResponseKeysBean {

    private Keys keyList;
    private Root status;

    public ResponseKeysBean() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="keys")
    public Keys getKeyList() {
        return keyList;
    }

    public void setKeyList(Keys keyList) {
        this.keyList = keyList;
    }

    @XmlElement(name="root")
    public Root getStatus() {
        return status;
    }

    public void setStatus(Root status) {
        this.status = status;
    }
}  

class Root {
    private String messageId;
    private Integer statusCode;
    private String statusMessage;

    @XmlElement(name="messageid")
    public String getMessageId() {
        return messageId;
    }

    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }

    @XmlElement(name="statuscode")
    public Integer getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(Integer statusCode) {
        this.statusCode = statusCode;
    }

    @XmlElement(name="statusmessage")
    public String getStatusMessage() {
        return statusMessage;
    }

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }

    @Override
    public String toString() {
        return "Root [messageId=" + messageId + ", statusCode=" + statusCode
                + ", statusMessage=" + statusMessage + "]";
    }


}

class Keys {
    private List<Item> keysList;

    public Keys() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="item")
    public List<Item> getKeysList() {
        return keysList;
    }

    public void setKeysList(List<Item> keysList) {
        this.keysList = keysList;
    }

    @Override
    public String toString() {
        return "Keys [keysList=" + keysList + "]";
    }   
}

class Item {

    private String key;

    @XmlElement(name="key")
    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "Item [key=" + key + "]";
    }
}
public static void main(String[] args) throws JAXBException, FileNotFoundException{
        JAXBContext jaxbContext = JAXBContext.newInstance(ResponseKeysBean.class);
        Unmarshaller um = jaxbContext.createUnmarshaller();
        ResponseKeysBean keyObj = (ResponseKeysBean) um.unmarshal(new FileReader(new File("./configurationfiles/testconfig.xml")));

        System.out.println(keyObj.getKeyList());
        System.out.println(keyObj.getStatus());

    }
输出

Key List is : Keys [keysList=[Item [key=MyKey1], Item [key=MyKey2]]]
Status is : Root [messageId=000000123, statusCode=1, statusMessage=Successfully Done.]

您尚未正确创建
ResponseKeysBean
类。这样做:

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class ResponseKeysBean {

    private Keys keyList;
    private Root status;

    public ResponseKeysBean() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="keys")
    public Keys getKeyList() {
        return keyList;
    }

    public void setKeyList(Keys keyList) {
        this.keyList = keyList;
    }

    @XmlElement(name="root")
    public Root getStatus() {
        return status;
    }

    public void setStatus(Root status) {
        this.status = status;
    }
}  

class Root {
    private String messageId;
    private Integer statusCode;
    private String statusMessage;

    @XmlElement(name="messageid")
    public String getMessageId() {
        return messageId;
    }

    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }

    @XmlElement(name="statuscode")
    public Integer getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(Integer statusCode) {
        this.statusCode = statusCode;
    }

    @XmlElement(name="statusmessage")
    public String getStatusMessage() {
        return statusMessage;
    }

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }

    @Override
    public String toString() {
        return "Root [messageId=" + messageId + ", statusCode=" + statusCode
                + ", statusMessage=" + statusMessage + "]";
    }


}

class Keys {
    private List<Item> keysList;

    public Keys() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="item")
    public List<Item> getKeysList() {
        return keysList;
    }

    public void setKeysList(List<Item> keysList) {
        this.keysList = keysList;
    }

    @Override
    public String toString() {
        return "Keys [keysList=" + keysList + "]";
    }   
}

class Item {

    private String key;

    @XmlElement(name="key")
    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "Item [key=" + key + "]";
    }
}
public static void main(String[] args) throws JAXBException, FileNotFoundException{
        JAXBContext jaxbContext = JAXBContext.newInstance(ResponseKeysBean.class);
        Unmarshaller um = jaxbContext.createUnmarshaller();
        ResponseKeysBean keyObj = (ResponseKeysBean) um.unmarshal(new FileReader(new File("./configurationfiles/testconfig.xml")));

        System.out.println(keyObj.getKeyList());
        System.out.println(keyObj.getStatus());

    }
输出

Key List is : Keys [keysList=[Item [key=MyKey1], Item [key=MyKey2]]]
Status is : Root [messageId=000000123, statusCode=1, statusMessage=Successfully Done.]

您尚未正确创建
ResponseKeysBean
类。这样做:

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class ResponseKeysBean {

    private Keys keyList;
    private Root status;

    public ResponseKeysBean() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="keys")
    public Keys getKeyList() {
        return keyList;
    }

    public void setKeyList(Keys keyList) {
        this.keyList = keyList;
    }

    @XmlElement(name="root")
    public Root getStatus() {
        return status;
    }

    public void setStatus(Root status) {
        this.status = status;
    }
}  

class Root {
    private String messageId;
    private Integer statusCode;
    private String statusMessage;

    @XmlElement(name="messageid")
    public String getMessageId() {
        return messageId;
    }

    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }

    @XmlElement(name="statuscode")
    public Integer getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(Integer statusCode) {
        this.statusCode = statusCode;
    }

    @XmlElement(name="statusmessage")
    public String getStatusMessage() {
        return statusMessage;
    }

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }

    @Override
    public String toString() {
        return "Root [messageId=" + messageId + ", statusCode=" + statusCode
                + ", statusMessage=" + statusMessage + "]";
    }


}

class Keys {
    private List<Item> keysList;

    public Keys() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement(name="item")
    public List<Item> getKeysList() {
        return keysList;
    }

    public void setKeysList(List<Item> keysList) {
        this.keysList = keysList;
    }

    @Override
    public String toString() {
        return "Keys [keysList=" + keysList + "]";
    }   
}

class Item {

    private String key;

    @XmlElement(name="key")
    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "Item [key=" + key + "]";
    }
}
public static void main(String[] args) throws JAXBException, FileNotFoundException{
        JAXBContext jaxbContext = JAXBContext.newInstance(ResponseKeysBean.class);
        Unmarshaller um = jaxbContext.createUnmarshaller();
        ResponseKeysBean keyObj = (ResponseKeysBean) um.unmarshal(new FileReader(new File("./configurationfiles/testconfig.xml")));

        System.out.println(keyObj.getKeyList());
        System.out.println(keyObj.getStatus());

    }
输出

Key List is : Keys [keysList=[Item [key=MyKey1], Item [key=MyKey2]]]
Status is : Root [messageId=000000123, statusCode=1, statusMessage=Successfully Done.]

下面是获得所需XML输出的完整ResponseKeyBean类

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.FIELD)
public static class ResponseKeysBean {
    static class Root {
        @XmlElement(name="messageid")
        private String messageId;
        @XmlElement(name="statuscode")
        private Integer statusCode;
        @XmlElement(name="statusmessage")
        private String statusMessage;
        public Root() {
        }
    }
    @XmlElement(name="root")
    private Root root;
    @XmlElementWrapper(name="keys")
    @XmlElement(name="key")
    private List<Key> keys;
    @XmlAccessorType(XmlAccessType.FIELD)
    static class Key {
        @XmlElement(name="item")
        private List<String> key = new ArrayList<>();
        public Key() {}
        public Key(String value) {
            this.key.add(value);
        }
    }
    public ResponseKeysBean() {
        this.keys = new ArrayList<>();
        this.root = new Root();
    }
    public ResponseKeysBean(String messageId, Integer statusCode, String statusMessage) {
        this();
        this.root.messageId = messageId;
        this.root.statusCode = statusCode;
        this.root.statusMessage = statusMessage;
    }
    public void addKey(String key) {
        this.keys.add(new Key(key));
    }
}
输出为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:TEST_REQ xmlns:ns2="http://Test.com"><root><messageid>000000123</messageid><statuscode>1</statuscode><statusmessage>Successfully Done.</statusmessage></root><keys><key><item>MyKey1</item></key><key><item>MyKey2</item></key></keys></ns2:TEST_REQ>
0000001231成功完成。MyKey1MyKey2

以下是获取所需XML输出的完整ResponseKeyBean类

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.FIELD)
public static class ResponseKeysBean {
    static class Root {
        @XmlElement(name="messageid")
        private String messageId;
        @XmlElement(name="statuscode")
        private Integer statusCode;
        @XmlElement(name="statusmessage")
        private String statusMessage;
        public Root() {
        }
    }
    @XmlElement(name="root")
    private Root root;
    @XmlElementWrapper(name="keys")
    @XmlElement(name="key")
    private List<Key> keys;
    @XmlAccessorType(XmlAccessType.FIELD)
    static class Key {
        @XmlElement(name="item")
        private List<String> key = new ArrayList<>();
        public Key() {}
        public Key(String value) {
            this.key.add(value);
        }
    }
    public ResponseKeysBean() {
        this.keys = new ArrayList<>();
        this.root = new Root();
    }
    public ResponseKeysBean(String messageId, Integer statusCode, String statusMessage) {
        this();
        this.root.messageId = messageId;
        this.root.statusCode = statusCode;
        this.root.statusMessage = statusMessage;
    }
    public void addKey(String key) {
        this.keys.add(new Key(key));
    }
}
输出为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:TEST_REQ xmlns:ns2="http://Test.com"><root><messageid>000000123</messageid><statuscode>1</statuscode><statusmessage>Successfully Done.</statusmessage></root><keys><key><item>MyKey1</item></key><key><item>MyKey2</item></key></keys></ns2:TEST_REQ>
0000001231成功完成。MyKey1MyKey2

以下是获取所需XML输出的完整ResponseKeyBean类

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.FIELD)
public static class ResponseKeysBean {
    static class Root {
        @XmlElement(name="messageid")
        private String messageId;
        @XmlElement(name="statuscode")
        private Integer statusCode;
        @XmlElement(name="statusmessage")
        private String statusMessage;
        public Root() {
        }
    }
    @XmlElement(name="root")
    private Root root;
    @XmlElementWrapper(name="keys")
    @XmlElement(name="key")
    private List<Key> keys;
    @XmlAccessorType(XmlAccessType.FIELD)
    static class Key {
        @XmlElement(name="item")
        private List<String> key = new ArrayList<>();
        public Key() {}
        public Key(String value) {
            this.key.add(value);
        }
    }
    public ResponseKeysBean() {
        this.keys = new ArrayList<>();
        this.root = new Root();
    }
    public ResponseKeysBean(String messageId, Integer statusCode, String statusMessage) {
        this();
        this.root.messageId = messageId;
        this.root.statusCode = statusCode;
        this.root.statusMessage = statusMessage;
    }
    public void addKey(String key) {
        this.keys.add(new Key(key));
    }
}
输出为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:TEST_REQ xmlns:ns2="http://Test.com"><root><messageid>000000123</messageid><statuscode>1</statuscode><statusmessage>Successfully Done.</statusmessage></root><keys><key><item>MyKey1</item></key><key><item>MyKey2</item></key></keys></ns2:TEST_REQ>
0000001231成功完成。MyKey1MyKey2

以下是获取所需XML输出的完整ResponseKeyBean类

@XmlRootElement(name = "TEST_REQ", namespace = "http://Test.com")
@XmlAccessorType(XmlAccessType.FIELD)
public static class ResponseKeysBean {
    static class Root {
        @XmlElement(name="messageid")
        private String messageId;
        @XmlElement(name="statuscode")
        private Integer statusCode;
        @XmlElement(name="statusmessage")
        private String statusMessage;
        public Root() {
        }
    }
    @XmlElement(name="root")
    private Root root;
    @XmlElementWrapper(name="keys")
    @XmlElement(name="key")
    private List<Key> keys;
    @XmlAccessorType(XmlAccessType.FIELD)
    static class Key {
        @XmlElement(name="item")
        private List<String> key = new ArrayList<>();
        public Key() {}
        public Key(String value) {
            this.key.add(value);
        }
    }
    public ResponseKeysBean() {
        this.keys = new ArrayList<>();
        this.root = new Root();
    }
    public ResponseKeysBean(String messageId, Integer statusCode, String statusMessage) {
        this();
        this.root.messageId = messageId;
        this.root.statusCode = statusCode;
        this.root.statusMessage = statusMessage;
    }
    public void addKey(String key) {
        this.keys.add(new Key(key));
    }
}
输出为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:TEST_REQ xmlns:ns2="http://Test.com"><root><messageid>000000123</messageid><statuscode>1</statuscode><statusmessage>Successfully Done.</statusmessage></root><keys><key><item>MyKey1</item></key><key><item>MyKey2</item></key></keys></ns2:TEST_REQ>
0000001231成功完成。MyKey1MyKey2

我已发布了我的答案。它是否回答了您的问题?我已发布了我的答案。它是否回答了您的问题?我已发布了我的答案。它是否回答了您的问题?是否有其他方法可以将所有属性保留在一个类中?据我所知,没有其他方法。如您的案例中的键和根标记还有子元素。所以它们需要有自己的实现。有没有其他方法可以将所有属性保留在一个类中?据我所知,没有其他方法。正如在您的例子中,键和根标记还有子元素。所以它们需要有自己的实现。有没有其他方法可以将所有属性保留在一个类中?根据据我所知,没有其他方法。在您的案例中,键和根标记进一步具有子元素。因此,它们需要有自己的实现。是否有其他方法将所有属性保留在一个类中?据我所知,没有其他方法。在您的案例中,键和根标记进一步具有子元素。因此,它们需要有自己的实现实施