Что я должен сделать, чтобы сделать вывод Java в XML? - PullRequest
0 голосов
/ 21 мая 2019

Я делаю домашнее задание, и у меня тут немного проблем.Вот в чем дело: мне пришлось создать программу на C #, которая взаимодействует с конечной точкой Java.Я пытался настроить веб-приложение на Java, где пользователь может дать некоторую информацию и зарегистрироваться в службе.Сначала я думал, что приложение Java будет генерировать XML от пользователя, затем приложение C # может загрузить файл, если необходимо, и затем настроить его.

Итак, я создал класс и назовем его Guest, с некоторыми полями данных.Затем я создал одноэлементный класс GuestContainer для всех зарегистрированных гостей с ArrayList, который содержит всех гостей.Если гость добавлен, GuestContainer должен создать из них XML-файл.Кажется, все работает, за исключением того, что Java не создает никаких файлов ...


import java.io.File;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;  
import javax.xml.bind.annotation.XmlRootElement; 


@XmlRootElement(name = "guest")
public class Guest{

    private String name;

    private String city;

    private String phoneNumber;

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

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

    @XmlElement(name = "phoneNumber")
    public String getPhoneNumber() {
        return phoneNumber;
    }

    public Guest(String name, String city, String phoneNumber) {
        this.name = name;
        this.city = city;
        this.phoneNumber = phoneNumber;
    }

Мой GuestContainer:

package Model;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.*;
import javanet.staxutils.XMLStreamEventWriter;
import javax.xml.bind.*;


public class GuestContainer{

    private ArrayList<Guest> guests;
    private static GuestContainer container;
    private JAXBContext context;
    private Marshaller _m;

    public static GuestContainer getInstance() throws JAXBException{

        if (container == null) {
            container = new GuestContainer();
        }

        return container;
    }

    private GuestContainer() throws JAXBException{

        this.guests = new ArrayList<Guest>();
        this.context = JAXBContext.newInstance(Guest.class);
        this._m = this.context.createMarshaller();
        this._m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    }

    public void AddGuest(Guest guest) throws JAXBException, 
        FileNotFoundException{

        guests.add(guest);
        MakeFile();
    }
    private void MakeFile() throws PropertyException, JAXBException, 
            FileNotFoundException{

        for (Guest guest : this.guests) {
            ///guest.ToXML(file);
            _m.marshal(guest, new File("guests.xml"));

        }
    }



Поэтому я хочу получить вывод XML, где присутствуют все гости, нок сожалению, у меня нет ни ошибок, ни XML.

Ответы [ 2 ]

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

Если вы просто хотите сбросить ваши элементы в файл, используйте FileOutputStream и добавьте ваши элементы:

private void makeFile() throws PropertyException, JAXBException, IOException
{
    try (FileOutputStream out = new FileOutputStream("d:/tmp/guests.xml", true))
    {
        if(guests.size()==1)
            _m.setProperty(Marshaller.JAXB_FRAGMENT, false);
        else
            _m.setProperty(Marshaller.JAXB_FRAGMENT, true);

        _m.marshal(guests.get(guests.size() - 1), out);
    }
}
0 голосов
/ 22 мая 2019

Вы можете сделать свой GuestContainer XmlRootElement, затем добавить все свои Guest и маршалировать GuestContainer после этого:

@XmlRootElement(name = "root")
public class GuestContainer
{
    private ArrayList<Guest> guests;
    private static GuestContainer container;
    @XmlTransient
    private JAXBContext context;
    @XmlTransient
    private Marshaller _m;

    public static GuestContainer getInstance() throws JAXBException
    {
        if (container == null)
        {
            container = new GuestContainer();
        }
        return container;
    }

    private GuestContainer() throws JAXBException
    {
        this.guests = new ArrayList<Guest>();
        this.context = JAXBContext.newInstance(GuestContainer.class);
        this._m = this.context.createMarshaller();
        this._m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    }

    public void addGuest(Guest guest) throws JAXBException, FileNotFoundException
    {
        guests.add(guest);
    }

    @XmlElement(name="guest")
    public ArrayList<Guest> getGuests()
    {
        return guests;
    }

    public void makeFile() throws PropertyException, JAXBException, IOException
    {
        _m.marshal(this, new File("guests.xml"));
    }

    public static void main(String[] args)
    {
        try
        {
            GuestContainer.getInstance().addGuest(new Guest("testName", "testCity", "testPhone"));
            GuestContainer.getInstance().addGuest(new Guest("test2", "testVillage", "testFax"));
            GuestContainer.getInstance().addGuest(new Guest("testAbc", "testTown", "testMail"));
            GuestContainer.getInstance().makeFile();
        }
        catch(Exception ex)
        {
            System.out.println(ex);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...