Как конвертировать XML в объект на Java Spring-Boot - PullRequest
0 голосов
/ 22 мая 2018

привет Я пытаюсь преобразовать xml с количеством объектов и получаю сообщение об ошибке: Разметка в документе после корневого элемента должна быть правильно сформирована.

XML:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="test.example.com">
  <Item>
    <ItemKey>1111</ItemKey>
    <Start>2/10/2017</Start>
    <customNumber>12</customNumber>
    <End>2/10/2018</End>
    <Account>2221111</Account>
    <Name>John</Name>
    <Note>GOOD</Note>
    <CodeNo>4444-1</CodeNo>
    <Source>www.cnn.com</Source>
  </Item>
  <Item>
    <ItemKey>2222</ItemKey>
    <Start>2/10/2017</Start>
    <customNumber>75</customNumber>
    <End>2/10/2018</End>
    <Account>3333111</Account>
    <Name>Smith</Name>
    <Note>NOT GOOD</Note>
    <CodeNo>4444-2</CodeNo>
    <Source>www.fox.com</Source>
  </Item>
</string>

Класс модели:

package example.models;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "Item")
public class Model {

private String CodeNo;

private String ItemKey;

private String Start;

private String End;

private String Account;

private String Name;

private String Note;

...(gets and sets)

основной код:

StringReader reader = new StringReader(response);
String response = restTemplate.getForObject(url, String.class);
...

 JAXBContext jaxbContext = JAXBContext.newInstance(Model.class);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            Model recordes = (Model) unmarshaller.unmarshal(reader);

исключение не маршала: разметка в документе после корневого элемента должна быть правильно сформирована.

xml только с одним элементом, с которым работает код.

что я пропустил и что нужно сделать, чтобы получить список элементов (элементов) без ошибок?

Ответы [ 4 ]

0 голосов
/ 24 мая 2019

Пошаговый процесс создания xml для объекта в Springboot

1. Сначала вам нужно создать проект maven, указав идентификатор группы и идентификатор артефакта.

2.Создайте свой класс java в src / main / java, а также имя вашего пакета и имя класса java для Example-XmlToJavaObject.java

3. Преобразуйте ваш код xml в класс pojo, используя следующую ссылку

http://pojo.sodhanalibrary.com/Convert

Он создаст класс pojo в соответствии с вашими данными xml.Создайте пакет для pojo и поместите все классы pojo в эту папку.

4. Поместите файл xml в этот проект рядом с pom.xml.

5.Создайте основной метод в класс XmlToJavaObject.java.

Напишите ниже код и измените в соответствии с вашими требованиями

import java.io.File;
import javax.xml.bind.JAXBContext;  
import javax.xml.bind.JAXBException;  
import javax.xml.bind.Unmarshaller;

import com.test.pojo.Student;


public class XmlToJavaObject {


    public static void main(String ar[])
    {
         try {  

                File file = new File("Student.xml");  
                JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);  

                Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  
                Student student= (Student) jaxbUnmarshaller.unmarshal(file);  


                System.out.println(student.getName());


              } catch (JAXBException e) {  
                e.printStackTrace();  
              }
    }
}
0 голосов
/ 22 мая 2018

В файле XML ваш корневой элемент имеет тег <string xmlns="test.example.com">, поэтому либо исправьте XML, либо исправьте класс Model, чтобы он заработал.

Чтобы узнать больше об ошибке, проверьте это Как исправитьошибка: разметка в документе после корневого элемента должна быть правильно сформирована

edit

Вы можете использовать этот инструмент для генерации POJO: http://pojo.sodhanalibrary.com

вот классы POJO для вышеуказанного XML:

public class MyXML
{
    private String string; // Change the class as String is Wrapper class

    public String getString ()
    {
        return string;
    }

    public void setString (String string)
    {
        this.string = string;
    }

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

Строковый класс:

public class String // Change this className as String is Wrapper class in java
{
    private Item[] Item;

    private String xmlns;

    public Item[] getItem ()
    {
        return Item;
    }

    public void setItem (Item[] Item)
    {
        this.Item = Item;
    }

    public String getXmlns ()
    {
        return xmlns;
    }

    public void setXmlns (String xmlns)
    {
        this.xmlns = xmlns;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [Item = "+Item+", xmlns = "+xmlns+"]";
    }
}

Классы предметов

public class Item
{
    private String Name;

    private String Source;

    private String End;

    private String CodeNo;

    private String Start;

    private String Account;

    private String ItemKey;

    private String Note;

    private String customNumber;

    public String getName ()
    {
        return Name;
    }

    public void setName (String Name)
    {
        this.Name = Name;
    }

    public String getSource ()
    {
        return Source;
    }

    public void setSource (String Source)
    {
        this.Source = Source;
    }

    public String getEnd ()
    {
        return End;
    }

    public void setEnd (String End)
    {
        this.End = End;
    }

    public String getCodeNo ()
    {
        return CodeNo;
    }

    public void setCodeNo (String CodeNo)
    {
        this.CodeNo = CodeNo;
    }

    public String getStart ()
    {
        return Start;
    }

    public void setStart (String Start)
    {
        this.Start = Start;
    }

    public String getAccount ()
    {
        return Account;
    }

    public void setAccount (String Account)
    {
        this.Account = Account;
    }

    public String getItemKey ()
    {
        return ItemKey;
    }

    public void setItemKey (String ItemKey)
    {
        this.ItemKey = ItemKey;
    }

    public String getNote ()
    {
        return Note;
    }

    public void setNote (String Note)
    {
        this.Note = Note;
    }

    public String getCustomNumber ()
    {
        return customNumber;
    }

    public void setCustomNumber (String customNumber)
    {
        this.customNumber = customNumber;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [Name = "+Name+", Source = "+Source+", End = "+End+", CodeNo = "+CodeNo+", Start = "+Start+", Account = "+Account+", ItemKey = "+ItemKey+", Note = "+Note+", customNumber = "+customNumber+"]";
    }
}
0 голосов
0 голосов
/ 22 мая 2018
int PRETTY_PRINT_INDENT_FACTOR = 4;
String TEST_XML_STRING =
        "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to 
JSON</test>";

try {
     JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
     String jsonPrettyPrintString = 
xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
     System.out.println(jsonPrettyPrintString);
} catch (JSONException je) {
     System.out.println(je.toString());
}

надеюсь, это поможет вам, используйте org.json jar file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...